列級約束:對乙個資料列建立的約束
表級約束:對多個資料列建立的約束
列級約束既可以在定義時宣告,也可以在定以後宣告。表級約束只能在列定義後宣告。
mysql中的完整性約束主要包括下面這些:
not null
非空約束,當我們給某個字段新增非空約束後,我們新增的記錄的時候,就必須給該字段賦值,如果不賦值則會報錯。
auto_increment
自動編號,且必須與主鍵組合使用;預設情況下,起始值為1,每次的增量為1.這樣就可以保證該字段的唯一性。
primary key
主鍵約束,每張資料表只能存在乙個主鍵,主鍵保證的記錄的唯一性,主鍵自動為not null。如果我們只設定主鍵,而不設定auto_increment,當我們插入記錄的時候,需要自己主動新增主鍵字段,並且主鍵字段不能重複。如果,我們給某個字段同時新增primary key和auto_increment。那麼就不需要,我們主動新增該欄位,mysql會自動的幫我們新增該欄位。一般我們在乙個表中通常會新增乙個id欄位並同時新增primary key和auto_increment。該欄位沒有任何具體的含義,主要是為了保證記錄的唯一。
unique key
唯一約束,也可以保證表中某個欄位的惟一性。與primary key不同的地方是唯一約束的字段可以為空值,而且一張表中可以同時存在多個唯一約束。而主鍵約束在一張表中只存在乙個。
default
預設約束,如果我們給乙個字段新增預設約束。當插入記錄時,如果我們給該字段賦值了,該字段的值即為我們設定的值。如果沒有給該字段明確賦值,則自動賦予預設值。
foreign key
1 具有外來鍵列的表為字表,字表外來鍵列參照的表為父表
2 父表和子表必須使用相同的儲存引擎,而且禁止使用臨時表。
3 資料表的儲存引擎只能為innodb
4 外來鍵列和參照列必須具有相似的資料型別。其中數字的長度或是否有符號位必須相同;而字元的長度則可以不同。
5 外來鍵列和參照列必須建立索引。如果外來鍵列不存在索引的話,mysql將自動建立索引。
編輯資料表的預設儲存引擎
在mysql的安裝目錄中找到my.ini,在my.ini檔案中找到default-storage-engine=innodb,可以看出缺省的儲存引擎innodb,在這裡我們也可以自己修改預設的儲存引擎。修改後需要重啟mysql服務。
外來鍵約束的參照操作
1 cascade:從父表刪除或更新行同時自動刪除或更新子表中匹配的行
2 set null:從父表刪除或更新行同時設定子表中的外來鍵列為null。如果使用該選項,必須保證子表列沒有指定not null
3 restrict:拒絕對父表的刪除或更新操作。
4 no action:標準sql的關鍵字,在mysql中與restrict相同
在實際開發過程中很少使用物理的外來鍵約束,一般都使用邏輯的外來鍵約束(即我們定義表的結構的時候,按照表的邏輯結構去定義,但不使用關鍵字foreign key)。因為foreign key 只支援innode引擎,不支援其他的引擎。
create table subject(
id int unsigned primary key auto_increment,
username varchar(
20) unique not null );
create table user(
id int unsigned primary key auto_increment, 建立id並設定auto_increment
username varchar(
20) unique not null, 將username新增唯一約束,並且非空
age smallint unsigned default 20
, 將age的預設值設定為20
sid int unsigned,
foreign key (sid) references subject(
id) on delete cascade
); 將user表中的sid欄位設為外來鍵,參照subject表中的id欄位,外來鍵約束參照操作on delete cascade, 即從父表中刪除記錄時,同時刪除子表中相關聯的記錄
MySQL完整性約束
create database adrui show databases use adrui not null 非空約束,插入資料該欄位不能為空 primary key 主鍵約束 主鍵約束相當於非空約束 唯一約束,auto increment是mysql擴充套件的字段值自加的約束,約束字段資料型別必...
Mysql 完整性約束
定義 完整性約束是對字段進行限制,從而符合該欄位達到我們期望的效果比如字段含有預設值,不能是null等,主要有唯 一 自增 主鍵 外來鍵約束 唯一約束 唯一約束可以有多個但索引列的值必須唯一,索引列的值允許有空值。如果能確定某個資料列將只包含彼此各不相同的值,在為這個資料列建立索引的時候就應該使用關...
完整性約束
create table student tb id int notnull 非空約束 資料不允許為空 name varchar 255 null 顯式指定允許為空 新增非空約束 alter table 表名 modify column 屬性名 屬性型別 not null alter table s...