mysql學習筆記四

mysql維護數據的完整性

數據的完整性用於確保數據庫數據遵從一定的
商業的邏輯規則。在oracle中,數據完整性可
以使用約束、觸發器、過程三種方法來實現,
在這三種方法中,因爲約束易於維護,並且具
有最好的性能,所以作爲維護數據完整性的首選。

 維護數據的完整性—約束

約束用於確保數據庫數據滿足特定的商業規則。
在mysql中,約束包括: not null、unique,
primary key,foreign key,和check 五種.

(1)not null(非空)
如果在列上定義了not null,那麼當插入數據時,必須爲列提供數據。
字段名 字段類型 not null
(2)unique(唯一)
當定義了唯一約束後,該列值是不能重複的.但是可以爲null。
字段名 字段類型 unique
(3)primary key(主鍵)
用於唯一的標示錶行的數據,當定義主鍵約束後,該列不但不能重複而且不能爲null。需要說明的是:一張表最多只能有一個主鍵,但是可以有多個unqiue約束。
字段名 字段類型 primary key    
注:一張表最多只能有一個主鍵,但是可以有多個unqiue約束。
(4)foreign key(外鍵)
   用於定義主表和從表之間的關係: 外鍵約束要定義在從表上,主表則必須具有主鍵約束或是unique約束.,當定義外鍵約束後,要求外鍵列數據必須在主表的主鍵列存在或是爲null (學生/班級 圖示)
    FOREIGN KEY (本表字段名) REFERENCES 
主鍵表名(主鍵名或unique字段名)
如:
--外鍵指向的字段類型要一致
create table classes
(id varchar(64) primary key,
 name varchar(64)) type=innodb;
insert into classes values('1','aaa');
--創建student表
create table student
(id int primary key,
 name varchar(64) not null,
 classId varchar(32), --這裏如果寫成classId int 則不能創建外鍵成功!
 foreign key (classId) references classes(id)
);
 注:外鍵指向的表的字段,必須是primary key 或者是 unique
表的類型是innodb, 這樣的表才支持外鍵
外鍵字段的類型要和主鍵字段的類型一致(長度可以不同)
外鍵字段的值,必須在主鍵字段中出現過,或者爲null
(5)check
   用於強制行數據必須滿足的條件,假定在sal列上定義了check約束,並要求sal列值在1000~2000之間如果不再1000~2000之間就會提示出錯。
☞ oracle 和 sql server 均支持check ,但是mysql目前還不支持check ,只做語法校驗,但不會生效。
   create table user4(id int primary key, name varchar(64) not null,
    sex varchar(6) check (sex in('man','woman')),
    salary int check (salary>=1000 and salary<=2000));
在mysql中實現check的功能,一般是在程序中控制,或者通過觸發器完成。
 (6)刪除約束
    當不再需要某個約束時,可以刪除.
alter table 表名 drop {index|key} 約束名稱;
在刪除主鍵約束的時候,可能有錯誤,比如:
   alter table 表名 drop primary key
   這是因爲有另外一張表的外鍵指向該主鍵,所以需要先刪除指向該主鍵的外鍵,然後再刪除該主鍵。
    刪除外鍵:
   alter table 表名 drop foreign key fk_name
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章