首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 主鍵聲明、組合主鍵與自增屬性完整配置教程

     編輯:MySQL 資料庫相關知識

主鍵聲明兩種方式

1. 建表時指定

CREATE TABLE tbl_name (
  ...,
  PRIMARY KEY (index_col_name)
);

2. 事後添加

ALTER TABLE tbl_name ADD PRIMARY KEY (index_col_name, ...);

主鍵本質 = NOT NULL + UNIQUE + 索引

若列未顯式定義 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,組合唯一。

自增主鍵 (AUTO_INCREMENT) 配置全流程

# 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 自動記錄插入時間,無需應用層傳參。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved