跨域(後端)
阿新 • • 發佈:2021-10-14
約束(constraint) 在建立表的時候,可以給表的欄位新增相應的約束,新增約束的目的是為了 保證表中資料的合法性、有效性、完整性 常見的約束有: 非空約束:not null 約束的欄位不能為空 唯一約束:unique 約束的欄位不能重複,但可以為null 主鍵約束:primary key 約束的欄位既不能為null,也不能重複 外來鍵約束:foreign key 檢查約束:check //oracle資料庫有check約束,但mysql沒有,目前mysql不支援該約束 1.非空約束 只有列級約束 mysql> drop table if exists t_user; mysql> create table t_user( id int, username varchar(255) not null, password varchar(255) ); 2.唯一性約束 案例:給某一列新增unique drop table if exists t_user; create table t_user( id int, username varchar(255) unique 【列級約束】 ); insert into t_user(id,username) values(1,'zhangsan'); insert into t_user(id,username) values(2,'zhangsan'); //error:duplicate entry 案例:給多個列新增unique drop table if exists t_user; create table t_user( id int, username varchar(255), usercode varchar(255), unique(username,usercode) //多個欄位聯合起來新增一個約束【表級約束】 ); insert into t_user values(1,'zs','111'); //zs111 insert into t_user values(2,'lisi','111'); //lisi111 insert into t_user values(3,'zs','222'); //zs222 3.主鍵約束 (一張表的主鍵約束只能有一個) drop table if exists t_user; create table t_user( id int primary key, //列級約束 username varchar(255), email varchar(255) ); insert into t_user (id,username,email) values (1,'zs','[email protected]'); insert into t_user (id,username,email) values (2,'ls','[email protected]'); insert into t_user (id,username,email) values (3,'ww','[email protected]'); *主鍵有什麼作用? -表的設計三正規化中有要求,第一正規化就是要求任何一張表都應該有主鍵 -主鍵的作用:主鍵值是這行記錄在這張表當中的唯一標識 *使用表級約束方式定義主鍵 drop table if exists t_user; create table t_user( id int, username varchar(255), primary key(id) ); *主鍵值自增 drop table if exists t_user; create table t_user( id int primary key auto_increment, //id欄位自增,從1開始遞增 username varchar(255) ); insert into t_user(username) values ('a'); insert into t_user(username) values ('b'); insert into t_user(username) values ('c'); 4.外來鍵約束 t_student中的classno欄位引用t_class表中的cno欄位,此時t_student表叫做子表,t_class表叫做父表 順序要求: 刪除資料的時候,先刪除子表,再刪除父表 新增資料的時候,先新增父表,再新增子表 建立表的時候,先建立父表,再建立子表 刪除表的時候,先刪除子表,再刪除父表 drop table if exists t_student; drop table if exists t_class; create table t_class( cno int primary key, cname varchar(255) ); create table t_student( sno int primary key, sname varchar(255), classno int, foreign key(classno) references t_class(cno) ); insert into t_class values(101,'xxxxxxxxxxxxxxxxx'); insert into t_class values(102,'yyyyyyyyyyyyyyyyy'); insert into t_student values(1,'zs1',101); insert into t_student values(2,'zs2',101); insert into t_student values(3,'zs3',101); insert into t_student values(4,'zs4',102); insert into t_student values(5,'zs5',102); insert into t_student values(6,'zs6',102); *注: 外來鍵可以為null 外來鍵欄位引用其他表的某個欄位的時候,被引用的欄位不必是主鍵,但至少具有unique約束