程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase教程 >> 五種完整性約束分別是什麼——基於MySQL數據庫的數據約束實例

五種完整性約束分別是什麼——基於MySQL數據庫的數據約束實例

編輯:SyBase教程

五種完整性約束分別是什麼——基於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,

#默認值就是null

age 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無效,此主鍵約束名仍為PRIMARY

constraint 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

 );


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved