MySQL 數據庫表的約束


數據庫約束的種類

約束名 約束關鍵字
主鍵 primary key
唯一 unique
非空 not null
外鍵 foreign key
檢查約束 check 注:mysql 不支持,sql支持

主鍵約束

創建主鍵方式

  • 在創建表的時候給字段添加主鍵

    字段名 字段類型 PRIMARY KEY
    

    例1:

    CREATE TABLE tb_info (
        id INT PRIMARY KEY,
        name VARCHAR(30),
        age INT
    );
    

    例2:

    CREATE TABLE tb_info (
        id INT,
        name VARCHAR(30),
        age INT,
        PRIMARY KEY(id)
    );
    
  • 在已有表中添加主鍵

    ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
    

    例:

    ALTER TABLE tb_info ADD PRIMARY KEY(id);
    

刪除主鍵的方式

刪除單表主鍵約束

ALTER TABLE 表名 DROP PRIMARY KEY;

刪除有外鍵連接的表的主鍵

第一步:解除外鍵約束

ALTER TABLE 外鍵表 DROP FOREIGN KEY 外鍵名稱

第二步:刪除主鍵

ALTER TABLE 主鍵表 DROP PRIMARY KEY;

如:刪除tb1的主鍵

img

img

這里有兩個表,tb2的外鍵連接tb1的主鍵

第一步:解除與tb2的外鍵約束

ALTER TABLE tb2 DROP FOREIGN KEY id2;

第二步:刪除tb1的主鍵約束

ALTER TABLE tb1 DROP PRIMARY KEY;

主鍵自增

-- 表示自動增長(字段類型必須是整數類型)
AUTO_INCREMENT

如:

CREATE TABLE tb (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(30),
    age INT
);

默認地 AUTO_INCREMENT 的開始值是 1

創建表時指定起始值

CREATE TABLE 表名 (
    列名 INT PRIMARY KEY AUTO_INCREMENT
) AUTO_INCREMENT=起始值;

如:指定起始值為5

CREATE TABLE tb (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(30),
    age INT
) AUTO_INCREMENT=5;

創建好以后修改起始值

ALTER TABLE 表名 AUTO_INCREMENT=起始值;
備注:DELETE 和 TRUNCATE 對自增長的影響

DELETE:刪除所有的記錄之后,自增長沒有影響。
TRUNCATE:刪除以后,自增長又重新開始。

唯一約束

唯一約束: 表中某一列不能出現重復的值

基本格式

字段名 字段類型 UNIQUE

如:tb表中的 name 字段中的記錄不能出現重復的

CREATE TABLE tb (
    id INT,
    name VARCHAR(30) UNIQUE,
    age INT
);

非空約束

非空約束:某一列不能為null

基本語法格式

字段名 字段類型 NOT NULL

如:tb表中的 id 字段不能出現null

CREATE TABLE tb (
    id INT NOT NULL,
    name VARCHAR(30),
    age INT
);

默認值

基本語法格式

字段名 字段類型 DEFAULT 默認值

如:tb表中的 age 字段的默認值為18

CREATE TABLE tb (
    id INT,
    name VARCHAR(30),
    age INT DEFAULT 18
);

外鍵約束

創建外鍵約束

新建表時增加外鍵

CONSTRAINT 外鍵約束名稱 FOREIGN KEY(外鍵字段名) REFERENCES 主表名(主鍵字段名)

如:

主表

CREATE TABLE tb1 (
    id INT,
    name VARCHAR(30),
    age INT,
    PRIMARY KEY(id)
);

從表

CREATE TABLE tb2 (
    card INT,
    name VARCHAR(30),
    age INT,
    CONSTRAINT tb2_card FOREIGN KEY(card) REFERENCES tb1(id)
);

從表的外鍵card,與主表的主鍵id關聯,從表中外鍵約束的名為tb2_card。

已有表增加外鍵

ALTER TABLE 從表 ADD CONSTRAINT 外鍵約束名稱 FOREIGN KEY(外鍵字段名) REFERENCES 主表(主鍵字段名);

如:

表1

CREATE TABLE tb1 (
    id INT,
    name VARCHAR(30),
    age INT,
    PRIMARY KEY(id)
);

表2

CREATE TABLE tb2 (
    card INT,
    name VARCHAR(30),
    age INT,
);

在tb2表中添加外鍵約束,外鍵字段為card。連接tb1表中的主鍵,主鍵字段為id:

ALTER TABLE tb2 ADD CONSTRAINT tb2_card FOREIGN KEY(card) REFERENCES tb1(id);

刪除外鍵約束

ALTER TABLE 從表 DROP FOREIGN KEY 外鍵名稱;

外鍵的級聯

級聯操作:在修改和刪除主表的主鍵時,同時更新或刪除副表的外鍵值,稱為級聯操作。

級聯操作語法 描述
ON UPDATE CASCADE 級聯更新,只能是創建表的時候創建級聯關系。更新主表中的主鍵,從表中的外鍵列也自動同步更新
ON DELETE CASCADE 級聯刪除

舉例:

創建tb1表

CREATE TABLE tb1 (
    id INT,
    name VARCHAR(30),
    age INT,
    PRIMARY KEY(id)
);

創建tb2表

-- 創建 tb2 表,添加級聯更新和級聯刪除
CREATE TABLE tb2 (
    card INT,
    name VARCHAR(30),
    age INT,
    CONSTRAINT tb2_card FOREIGN KEY(card) REFERENCES tb1(id)
                 ON UPDATE CASCADE
                 ON DELETE CASCADE 
);

這個時候,如果我們向tb1表中插入數據:

INSERT INTO tb1 (id, name, age) VALUES (1001, 'LeeHua', 22)

那么,tb2中的card字段也會更新。

這個時候,如果主表執行刪除,則會自動刪除從表中的相應記錄。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM