1. 程式人生 > >DDL語句(五) -- 約束

DDL語句(五) -- 約束

ren 添加 空格 ces foreign 方式 con 表名 rain

一、常見約束

NOT NULL:非空,該字段的值必填

UNIQUE:唯一,該字段的值不可重復

DEFAULT:默認,該字段的值當沒有插入時有默認值

CHECK:檢查,mysql 不支持

PRIMARY KEY:主鍵,該字段的值不可重復並且非空 UNIQUE + NOT NULL

FOREIGN KEY:外鍵,該字段的值引用了另外的表的字段

主鍵約束和唯一約束

1、區別

① 一個表至多有一個主鍵約束,但可以有多個唯一約束

② 主鍵約束不允許為空 ,唯一約束可以為空

2、相同點

都具有唯一性

都支持組合鍵,但不推薦

外鍵:

1、用於限制兩個表的關系,從表的字段值引用了主表的某字段值;

2、外鍵列和主表的被引用列要求類型一致,意義一樣,名稱無要求;

3、主表的被引用列要求時一個 key(一般就是主鍵);

4、插入數據時,先在主表中插入,再在從表中插入

 刪除數據是,先從從表中刪除數據,再從主表中刪除數據。

可以通過以下兩種方式來刪除主表的記錄

方式一:級聯刪除

ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(maiorid) REFERENCES major(id) ON DELETE CASCADE;

方式二:級聯置空

ALTER TABLE stuinfo ADD CONSTRAINT fk_stu_major FOREIGN KEY(maiorid) REFERENCES major(id) ON DELETE SET NULL;

二、創建表時添加約束

CREATE TABLE 表名(
  字段名 字段類型 PRIMARY KEY, #主鍵約束
  字段名 字段類型 NOT NULL, #非空約束
  字段名 字段類型 UNIQUE, #唯一約束
  字段名 字段類型 DEFAULT 值, #默認約束
  字段名 字段類型,
  CONSTRAINT 約束名 FOREIGN KEY(字段名) REFERENCES 主表(被引用列)
)

註意:

      支持類型          約束名

列級約束  除了主鍵約束        可以重新設置

表級約束  除了非空約束和默認約束   可以重新設置,但對主鍵約束無效

列級約束可以在一個字段上追加多個,中間用空格隔開,沒有順序要求

三、修改表時添加或刪除約束

1、非空約束

添加非空約束

ALTER TABLE 表名 MODIFY COLUMN 字段名 字段類型 NOT NULL;

刪除非空約束

ALTER TABLE 表名 MODIFY COLUMN 字段名 字段類型 ;

2、默認約束

添加默認約束

ALTER TABLE 表名 MODIFY COLUMN 字段名 字段類型 DEFAULT 值;

刪除默認約束

ALTER TABLE 表名 MODIFY COLUMN 字段名 字段類型 ;

3、主鍵約束

添加主鍵約束

ALTER TABLE 表名 ADD 【CONSTRAINT 自定義的約束名稱】 PRIMARY KEY(字段名);

刪除主鍵約束

ALTER TABLE 表名 DROP PRIMARY KEY;

4、唯一約束

添加唯一約束

ALTER TABLE 表名MODIFY COLUMN UNIQUE(字段名);

刪除主鍵唯一約束

ALTER TABLE 表名 DROP INDEX 索引名;

5、外鍵約束

添加外鍵約束

ALTER TABLE 表名 ADD 【CONSTRAINT 自定義的約束名稱】 CONSTRAINT (字段名) REFERENCES 主表(被引用列);

刪除外鍵約束

ALTER TABLE 表名DROP FOREIGN KEY 自定義的約束名稱;

DDL語句(五) -- 約束