市場上主流的關係型數據庫:Oracle、DB二、Sybase 、PostgreSQL、Microsoft SQL Server、Microsoft Access、MySQL。
關係型數據庫有三大完整性:mysql
實體完整性:實體屬性中的標識屬性不能爲空、不能重複,該約束經過制定的主鍵實現,其約束有系統強制實施sql
參照完整性:實體中的外鍵能夠爲空,但不能是錯的。數據庫
用戶定義完整性:某一具體的實際數據庫的約束條件,由應用環境所決定,反映某一具體應用所涉及的數據必須知足的要求。(例如定義某一行不能爲空)express
約束主要完成對數據的檢驗
和限制
,從而保證數據庫的完整性
。函數
主鍵約束列不容許重複,即任意兩行的主鍵值都不相同;每行都具備一個主鍵值,也不容許出現空值;性能
建立有兩種方式:
一種是直接對字段加primary key
關鍵字:code
CREATE TABLE student( id INT PRIMARY KEY, name VARCHAR(20), )
另一種是經過額外加約束的方式:索引
CREATE TABLE student( id INT NOT NULL, name VARCHAR(20), CONSTRAINT PK_STUD_ID PRIMARY KEY(id) //PK_STUD_ID爲約束的名字 )
有時候一個列的字段可能有重複,能夠聯合多個列設爲主鍵。文檔
CREATE TABLE student( name VARCHAR(20), class VARCHAR(20), CONSTRAINT PK_STUD_ID PRIMARY KEY(name,class) )
//刪除主鍵約束 ALTER TABLE 表名 DROP PRIMARY KEY; //添加主鍵 ALTER TABLE 表名 ADD PRIMARY KEY(列名); //修改列爲主鍵 ALTER TABLE 表名 MODIFY 列名 數據類型 PRIMARY KEY;
外鍵約束是保證一個或兩個表之間的參照完整性,保持數據一致性。表的外鍵能夠是另外一表的主鍵(也能夠是惟一索引,詳情看這裏), 外鍵能夠有重複的, 能夠是空值。實現一對一或一對多關係。get
CREATE TABLE classes( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20) ); //第一種:添加關鍵字 CREATE TABLE student( id INT AUTO_INCREMENT, name VARCHAR(20), CONSTRAINT PK_ID PRIMARY KEY(id), class_id INT REFERENCES classes(id) ) //第二種:額外聲明 CREATE TABLE student( id INT AUTO_INCREMENT, name VARCHAR(20), CONSTRAINT PK_ID PRIMARY KEY(id), class_id INT, CONSTRAINT fk_class_id FOREIGN KEY(classe_id) REFERENCES classes(id) )
父表和子表必須使用相同的存儲引擎,並且禁止使用臨時表
數據表的存儲引擎只能爲InnoDB,default-storage-engine-INNODB
外鍵列和參照列必須具備類似的數據類型,數字的長度或是有符號位必須相同,而字符 的長度能夠不一樣
外鍵列和參照列必須建立索引,若是外鍵列不存在索引的話,MySQL將自動建立索引。
設定參照列:FOREIGN KEY(id) PEFERENCES provinces(id)
CASCADE:從父表刪除或更新且自動刪除或更新子表中匹配的行
SET NULL:從父表刪除或更新行,並設置子表中的外鍵列爲NULL,若是使用該選項,必須保證子表列沒有指定NOT NULL
RESTRICT:拒絕對父表的刪除或更新操做
NO ACTION:標準SQL的關鍵字,在MySQL中與RESTRICT相同
//刪除外鍵約束 ALTER TABLE 表名 DROP FOREIGN KEY 外鍵約束名; (建立外鍵的方法沒有指定約束名稱,系統會默認給外鍵約束分配外鍵約束名稱,命名爲student_ibfk_n) //增長外鍵約束 ALTER TABLE 表名 ADD FOREIGN KEY 列名 REFERENCES 父表(對應列名);
指定表中某一列或多個列不能有相同的兩行或者兩行以上的數據存在,
惟一約束能夠保證記錄的惟一性
惟一約束的字段能夠爲空值(容許的空值有多個,可是最終存儲的只有一個)
每張數據表能夠存在多個惟一約束
UNIQUE KEY的用途:主要是用來防止數據插入的時候重複。
CREATE TABLE student ( name CHAR(20) UNIQUE KEY );
爲表中列添加UNIQUE KEY
ALTER TABLE student MODIFY CHAR(20) UNIQUE KEY;
輸入值必須是非空的,須要注意的是容許控制儘可能不要太多,太多會更消耗數據庫性能。
CREATE TABLE student ( name CHAR(20) NOT NULL );
默認約束有如下的要求:
定義的常量必須與該列的數據類型、精度等匹配
每一個列只能定義一個DEFAULT約束
DEFAULT約束會在使用INSERT語句
這裏須要說明的是,DEFAULT後面不能像SQL Server那樣使用函數,後面只能是一個常量。官方文檔原文:
With one exception, the default value must be a constant; it cannot be a function or an expression.
若是咱們想要獲取當前的時間,可使用CURRENT_TIMESTAMP
CREATE TABLE student ( joinTime DATETIME DEFAULT CURRENT_TIMESTAMP );
CHECK約束,驗證數據,好比性別中只能爲女或男,而不能爲其它。MySQL不支持check約束,但可使用check約束,就是沒有任何效果。
《大話數據庫》
IMOOC課程:《與MySQL的零距離接觸》