約束
1、約束
約束,是指作用在表中字段上的規則,用于限制字段輸入的數據,使得表格式統一,數據內容正確。同一個字段的約束可以有多個
約束包括:
非空約束,限制表中的值不為null:not?null
唯一約束:同一個字段的值不重復:unique
主鍵約束:一行數據的唯一標識,非空且唯一:primary key
默認約束:若字段的值為空,則使用默認值:default
檢查約束:保證字段值符合某一個條件:check(條件)
約束的語法為:字段名 字段類型 約束1 約束2……[comment]
create table cusinfo(id int primary key auto_increment comment'序號',name varchar(20) not null comment '姓名',sex varchar(10) check(sex='男'||sex='女'||sex='未知') default '未知' comment '性別',age int check (age>=0&&age<=120)comment '年齡',birthday date check ( birthday <= '2025-6-27') comment '生日',phone varchar(20) check(length(phone)=11) unique comment '電話',address varchar(50) comment '地址'
)comment='用戶信息表';insert into cusinfo values(null,'張三','男',18,'1999-01-01','13888888888','北京'),
(null,'李四','女',19,'1998-01-01','13888888889','上海'),
(null,'王五','未知',20,'1997-01-01','13888888890','廣州'),
(null,'趙六','男',21,'1996-01-01','13888888891','深圳'),
(null,'孫七','女',22,'1995-01-01','13888888892','杭州'),
(null,'周八','男',23,'1994-01-01','13888888893','西安'),
(null,'吳九','女',24,'1993-01-01','13888888894','武漢'),
(null,'鄭十','男',25,'1992-01-01','13888888895','南京');
2、外鍵約束(不常用)
兩張表在數據庫層面建立連接的約束,使得兩張表的完整與統一,外鍵連接最常用的方法是在子表中創建一個子id,然后去連接父表的主鍵
添加外鍵:在創建表格時添加:create table 表名(
字段名 數據類型 ,
……
[constraint] [外鍵名稱] foreign key (外鍵字段名) reference 父表 父表字段名
創建表后在表中增加一個外鍵: alter table 表名 [add constraint fk_子表名_父表名]?foreign key (父表名_外鍵字段名 )references 父表名 (父表字段名)
create table serinfo(id int primary key comment'序號',level varchar(10) comment'等級'
)comment '用戶等級表';insert into serinfo values(1,'普通會員'),(2,'高級會員'),(3,'VIP會員');alter table cusinfo add column serinfo_id int comment '等級id';update cusinfo set serinfo_id=1 where id=1;
update cusinfo set serinfo_id=2 where id=2;
update cusinfo set serinfo_id=1 where id=3;
update cusinfo set serinfo_id=3 where id=4;
update cusinfo set serinfo_id=2 where id=5;
update cusinfo set serinfo_id=3 where id=6;
update cusinfo set serinfo_id=1 where id=7;
update cusinfo set serinfo_id=3 where id=8;
update cusinfo set serinfo_id=2 where id=9;alter table cusinfo add constraint fk_cusinfo_serinfo foreign key (serinfo_id) references serinfo(id);
刪除外鍵
alter table 表名 drop foreign key 外鍵名稱;
alter table cusinfo drop foreign key fk_cusinfo_serinfo;
外鍵的刪除更新行為約束
在創建外鍵時可以語句后增加一個約束更新、刪除的語法:alter table 表名 [add constraint fk_子表名_父表名]?foreign key (父表名_外鍵字段名 )references 父表名 (父表字段名)on update 行為 on delete 行為
外鍵的更新/刪除行為有:
當在父表中刪除/更新對應記錄時,首先檢查該記錄是否有對應外鍵,如果有則不允許刪除/更新:no action #默認存在
當在父表中刪除/更新對應記錄時,首先檢查該記錄是否有對應外鍵,如果有則不允許刪除/更新:
restrict #默認存在,與no action一致
將父表與子表級聯:當在父表中刪除/更新對應記錄時,首先檢查該記錄是否有對應外鍵,如果有,則也刪除/更新外鍵在子表中的記錄:cascadeas
當在父表中刪除對應記錄時,首先檢查該記錄是否有對應外鍵,如果有則設置子表中該外鍵值為null: set null
alter table cusinfo add constraint fk_cusinfo_serinfo foreign key (serinfo_id) references serinfo(id) on delete cascade on update cascade;alter table cusinfo add constraint fk_cusinfo_serinfo foreign key (serinfo_id) references serinfo(id) on delete set null;