這篇文章主要介紹了數據庫中數據約束的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著(zhù)大家一起了解一下。
為了防止不符合規范的數據進(jìn)入數據庫,在用戶(hù)對數據進(jìn)行插入、修改、刪除等操作時(shí),DBMS自動(dòng)按照一定的約束條件對數據進(jìn)行監測,使不符合規范的數據不能進(jìn)入數據庫,以確保數據庫中存儲的數據正確、有效、相容。
#數據約束
#五種完整性約束: #NOT NULL :非空約束,指定某列不能為空; #UNIQUE : 唯一約束,指定某列或者幾列組合不能重復 #PRIMARY KEY :主鍵,指定該列的值可以唯一地標識該列記錄 #FOREIGN KEY :外鍵,指定該行記錄從屬于主表中的一條記錄,主要用于參照完整性 #CHECK :檢查,指定一個(gè)布爾表達式,用于指定對應的值必須滿(mǎn)足該表達式(mysql不支持check約束) #--------------------------------NOT NULL 非空約束 --------------------------- create table test4 ( #建立非空約束 id int not null, name varchar(55) default 'ABCD' not null, #默認值就是null age int null ); #取消非空約束 alter table test4 modify name varchar(55) default 'ABCD' not null, #增加非空約束 alter table test4 modify age int not null; #--------------------------------UNIQUE : 唯一約束-------------------------------- #列級約束語(yǔ)法建立約束 create table test_unique ( #建立行級唯一約束 id int not null unique, age int ); #表級約束語(yǔ)法格式 create table unique_test3 ( test6_id int not null, test6_name varchar(255), test6_pass varchar(255), #使用表級約束語(yǔ)法建立唯一約束,指定test6_id和test6_name兩列組合不能重復 constraint test6_unique unique(test6_id,test6_name), #使用表級約束語(yǔ)法建立唯一約束,約束名為test6_unique_2,test6_pass不能重復 constraint test6_unique_2 unique(test6_pass) ); #add關(guān)鍵字增加唯一約束 alter table test4 add unique(id,name,age); #modify關(guān)鍵字刪除或者增加唯一約束 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 : 主鍵約束-------------------------------- #主鍵約束相當于非空約束和唯一約束。 #每個(gè)表只允許擁有一個(gè)主鍵,但是這個(gè)主鍵可以由多個(gè)數據列組成,這些列組合不能重復 #標準SQL允許給主鍵自行命名,但是對于Mysql來(lái)說(shuō)自己的名字沒(méi)有任何作用,總是默認名為PRIMARY create table primary_test ( #使用列級語(yǔ)法建立主鍵約束 test_id int primary key, test_name varchar(255) ); #使用表級語(yǔ)法建立主鍵約束 create table primary_test2 ( test_id int not null, test_name varchar(255), test_pass varchar(255), #指定主鍵約束名為test2_pk,對大部分數據庫有效,但是對mysql無(wú)效,此主鍵約束名仍為PRIMARY constraint test2_pk primary key (test_id) ); #以多列組合創(chuàng )立主鍵 create table primary_test3 ( test_id int, test_name varchar(255), primary key(test_id,test_name) ); #使用列級約束語(yǔ)法 alter table primary_test3 modify test_id int primary key(); #使用表級約束語(yǔ)法 alter table primary_test3 add primary key(test_id,test_name); #刪除主鍵約束:alter table 表名 drop primary key; #主鍵列自增長(cháng)特性:如果某個(gè)數據列的類(lèi)型是整型,而且該列作為主鍵列,則可指定該列具有自增長(cháng)功能 #mysql使用auto_increment來(lái)設置自增長(cháng),向該表插入記錄時(shí)可不為該列指定值,由系統生成 create table primary_test3 ( //建立主鍵約束、設置自增長(cháng) test_id int auto_increment primary key, test_name varchar(255) ); #外鍵約束 FOREIGN KEY #Mysql中只有表級語(yǔ)法建立的外鍵約束才可以生效 #為保證參照主表的存在,先建立主表 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) ); #如果使用表級約束語(yǔ)法,則需要使用foreign key指定本表的外鍵列,如果創(chuàng )建外鍵約束時(shí)沒(méi)有指定約束名, #則mysql會(huì )為該外鍵約束命名為table_name_ibfk_n,其中table_name是從表的表名,n是從1開(kāi)始的整數 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) ); #定義當刪除主表記錄時(shí),從表記錄也隨之刪除 #on delete cascade 把參照該主表記錄的從表記錄全部級聯(lián)刪除 #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 );
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站