五種完整性條件約束分別是什麼——基於MySQL資料庫的資料約束執行個體,完整性mysql
為了防止不符合規範的資料進入資料庫,在使用者對資料進行插入、修改、刪除等操作時,DBMS自動按照一定的約束條件對資料進行監測,使不符合規範的資料不能進入資料庫,以確保資料庫中儲存的資料正確、有效、相容。
#資料約束
#五種完整性條件約束:#NOT NULL :非空約束,指定某列不可為空;#UNIQUE : 唯一約束,指定某列或者幾列組合不能重複#PRIMARY KEY :主鍵,指定該列的值可以唯一地標識該列記錄#FOREIGN KEY :外鍵,指定該行記錄從屬於主表中的一條記錄,主要用於參照完整性#CHECK :檢查,指定一個布林運算式,用於指定對應的值必須滿足該運算式(mysql不支援check約束) #--------------------------------NOT NULL 非空約束 ---------------------------create table test4( #建立非空約束id int not null,name varchar(55) default 'ABCD' not null,#預設值就是nullage int null);#取消非空約束 alter table test4 modify name varchar(55) default 'ABCD' not null,#增加非空約束 alter table test4 modify age int not null;#--------------------------------UNIQUE : 唯一約束--------------------------------#資料行層級條件約束文法建立約束 create table test_unique ( #建立行級唯一約束 id int not null unique, age int ); #表級約束文法格式 create table unique_test3 (test6_id int not null,test6_name varchar(255),test6_pass varchar(255),#使用表級約束文法建立唯一約束,指定test6_id和test6_name兩列組合不能重複constraint test6_unique unique(test6_id,test6_name),#使用表級約束文法建立唯一約束,約束名為test6_unique_2,test6_pass不能重複constraint test6_unique_2 unique(test6_pass) ); #add關鍵字增加唯一約束 alter table test4 add unique(id,name,age); #modify關鍵字刪除或者增加唯一約束 alter table test4 modify age varchar(255) not null; alter table test4 modify age varchar(255) not null unique; #對大部分資料庫而言,刪除約束使用: alter table 表名 drop constraint 約束名 #但是Mysql不採取此方式,而是: alter table 表名 drop index 約束名 #--------------------------------PRIMARY KEY : 主鍵約束-------------------------------- #主鍵約束相當於非空約束和唯一約束。 #每個表只允許擁有一個主鍵,但是這個主鍵可以由多個資料列組成,這些列組合不能重複 #標準SQL允許給主鍵自行命名,但是對於Mysql來說自己的名字沒有任何作用,總是預設名為PRIMARY create table primary_test (#使用列級文法建立主鍵約束test_id int primary key,test_name varchar(255) ); #使用表級文法建立主鍵約束 create table primary_test2 (test_id int not null,test_name varchar(255),test_pass varchar(255),#指定主鍵約束名為test2_pk,對大部分資料庫有效,但是對mysql無效,此主鍵約束名仍為PRIMARYconstraint test2_pk primary key (test_id) ); #以多列組合創立主鍵 create table primary_test3 (test_id int,test_name varchar(255),primary key(test_id,test_name) ); #使用資料行層級條件約束文法 alter table primary_test3 modify test_id int primary key(); #使用表級約束文法 alter table primary_test3 add primary key(test_id,test_name); #刪除主鍵約束:alter table 表名 drop primary key; #主鍵列自增長特性:如果某個資料列的類型是整型,而且該列作為主鍵列,則可指定該列具有自增長功能 #mysql使用auto_increment來設定自增長,向該表插入記錄時可不為該列指定值,由系統產生 create table primary_test3 (//建立主鍵約束、設定自增長test_id int auto_increment primary key,test_name varchar(255) ); #外鍵約束 FOREIGN KEY #Mysql中只有表級文法建立的外鍵約束才可以生效 #為保證參照主表的存在,先建立主表 create table teacher_tb (t_id int auto_increment,t_name varchar(255),primary key(t_id) ); create table student_tb (s_id int auto_increment primary key,s_name varchar(255) not null,t_java int,foreign key(t_java) references teacher_tb(t_id) );#如果使用表級約束文法,則需要使用foreign key指定本表的外鍵列,如果建立外鍵約束時沒有指定約束名,#則mysql會為該外鍵約束命名為table_name_ibfk_n,其中table_name是從表的表名,n是從1開始的整數 create table teacher_tb2 (t_id int auto_increment,t_name varchar(255),primary key(t_id) ); create table student_tb2 (s_id int auto_increment primary key,s_name varchar(255) not null,t_java int,constraint student_teacher_fk foreign key(t_java) references teacher_tb2(t_id) ); #建立多列組合外鍵約束 create table teacher_tb5 (t_name varchar(255),t_pass varchar(255),primary key(t_name,t_pass) ); create table student_tb5 (s_id int auto_increment primary key,s_name varchar(255) not null,t_java_pass varchar(255),t_java_name varchar(255),foreign key(t_java_name,t_java_pass) references teacher_tb5(t_name,t_pass) ); #刪除外鍵約束 alter table student_tb2 drop foreign key student_teacher_fk; #增加外鍵約束 alter table student_tb2 add foreign key(t_java) references teacher_tb2(t_id); #外鍵約束參照自身,自約束 create table foreign_test9 (foreign_id int auto_increment primary key,foreign_name varchar(255),refer_id int,foreign key(refer_id) references foreign_test9(foreign_id) ); #定義當刪除主表記錄時,從表記錄也隨之刪除 #on delete cascade 把參照該主表記錄的從表記錄全部串聯刪除 #on delete set null 把參照該主表記錄的從表記錄從表設為null e create table teacher_tb8 (t_id int auto_increment,t_name varchar(255),primary key(t_id) ); create table student_tb8 (s_id int auto_increment primary key,s_name varchar(255) not null,t_java int,constraint student_teacher_fk foreign key(t_java) references teacher_tb8(t_id) on delete cascade );