首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 主鍵設計與自增實戰:聲明方式、聯合主鍵、自增配置、時間戳默認值

     編輯:MySQL 綜合教學

MySQL 主鍵設計與自增實戰:聲明方式、聯合主鍵、自增配置、時間戳默認值

主鍵是表數據唯一標識,也是 InnoDB 聚簇索引的核心。本文涵蓋主鍵聲明語法、聯合主鍵應用、自增屬性配置、默認值設置、時間戳自動賦值的完整實戰演示,助你構建高性能表結構。

一、主鍵聲明兩種方式

-- 建表時指定
CREATE TABLE tbl_name (..., PRIMARY KEY(index_col_name));

-- 事後添加
ALTER TABLE tbl_name ADD PRIMARY KEY (index_col_name, ...);

主鍵隱含 NOT NULL + UNIQUE,若列未顯式聲明 NOT NULL,MySQL 會隱式添加。

二、聯合主鍵:多列唯一標識

如「防火牆規則表」以 (host, port) 為主鍵,單列無法唯一確定記錄。

CREATE TABLE firewall(
  host VARCHAR(11) NOT NULL,
  port SMALLINT(4),
  access ENUM('deny','allow') NOT NULL,
  PRIMARY KEY (host, port)
);
INSERT INTO firewall(host, port, access) VALUES('202.65.3.87', 21, 'deny'); -- 成功
-- 聯合主鍵每列隱含 NOT NULL,組合唯一

三、自增主鍵配置實戰

CREATE DATABASE ssh2;
USE ssh2;
CREATE TABLE user(
  id INTEGER PRIMARY KEY,
  firstname VARCHAR(200) NOT NULL,
  lastname VARCHAR(200) NOT NULL,
  age INTEGER
);

-- 修改主鍵為自增
ALTER TABLE user MODIFY id INTEGER AUTO_INCREMENT;

-- 設置默認值(自增列通常無需默認值,此處僅演示語法)
ALTER TABLE user MODIFY id INTEGER DEFAULT 1;
ALTER TABLE user MODIFY id INTEGER AUTO_INCREMENT; -- 重新聲明自增

四、時間戳自動賦值

CREATE TABLE dd(
  id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
  name VARCHAR(20),
  time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO dd(name) VALUES('fhihgifds');
INSERT INTO dd(name) VALUES('steven');
INSERT INTO dd(name) VALUES('anthony');

SELECT * FROM dd;
+----+-----------+---------------------+
| id | name      | time                |
+----+-----------+---------------------+
| 1  | fhihgifds | 2011-03-27 01:58:46 |
| 2  | steven    | 2011-03-27 01:59:35 |
| 3  | anthony   | 2011-03-27 02:00:07 |
+----+-----------+---------------------+

最佳實踐:InnoDB 表建議使用業務無關的 BIGINT UNSIGNED AUTO_INCREMENT 作為主鍵,避免業務字段變更導致頁分裂,配合 TIMESTAMP DEFAULT CURRENT_TIMESTAMP 記錄創建時間,簡潔高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved