CREATE TABLE tbl_name ( ..., PRIMARY KEY (index_col_name) );
ALTER TABLE tbl_name ADD PRIMARY KEY (index_col_name, ...);
若列未顯式定義 NOT NULL,MySQL 會隱式添加。主鍵即索引,支持單列或多列(組合主鍵)。
CREATE TABLE firewall (
host VARCHAR(11) NOT NULL,
port SMALLINT(4),
access ENUM('deny','allow') NOT NULL,
PRIMARY KEY (host, port)
);
插入 ('202.65.3.87', 21, 'deny') 成功;同 host+port 再插入報 Duplicate Entry 錯誤。組合主鍵每列隱含 NOT NULL,組合唯一。
# 1. 創建庫表 CREATE DATABASE ssh2; USE ssh2; CREATE TABLE user ( id INTEGER PRIMARY KEY, firstname VARCHAR(200) NOT NULL, lastname VARCHAR(200) NOT NULL, age INTEGER ); # 2. 修改主鍵為自增 ALTER TABLE user MODIFY id INTEGER AUTO_INCREMENT; # 3. (可選) 設置默認起始值 ALTER TABLE user MODIFY id INTEGER DEFAULT 1; -- 默認即為 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'); -- id=1, time=2011-03-27 01:58:46
INSERT INTO dd(name) VALUES ('steven'); -- id=2, time=2011-03-27 01:59:35
INSERT INTO dd(name) VALUES ('anthony'); -- id=3, time=2011-03-27 02:00:07
AUTO_INCREMENT 列必須為索引(主鍵或唯一索引)。LAST_INSERT_ID() 獲取本會話最後生成的自增值,安全併發。TIMESTAMP DEFAULT CURRENT_TIMESTAMP 自動記錄插入時間,無需應用層傳參。