完整性約束
阿新 • • 發佈:2020-07-28
完整性約束
概覽
為了防止不符合規範的資料進入資料庫,在使用者對資料進行插入、修改、刪除等操作時,DBMS自動按照一定的約束條件對資料進行監測,使不符合規範的資料不能進入資料庫,以確保資料庫中儲存的資料正確、有效、相容。
約束條件與資料型別的寬度一樣,都是可選引數,主要分為以下幾種:
# NOT NULL :非空約束,指定某列不能為空;
# UNIQUE : 唯一約束,指定某列或者幾列組合不能重複
# PRIMARY KEY :主鍵,指定該列的值可以唯一地標識該列記錄
# FOREIGN KEY :外來鍵,指定該行記錄從屬於主表中的一條記錄,主要用於參照完整性
設定嚴格模式: 不支援對not null欄位插入null值 不支援對自增長欄位插入”值 不支援text欄位有預設值 直接在mysql中生效(重啟失效): mysql>set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"; 配置檔案新增(永久失效): sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
約束某一個欄位
無符號的 int unsigned
不能為空 not null
預設值 default
唯一約束 unique
聯合唯一 unique(欄位1,欄位2)
自增 auto_increment
只能對數字有效.自帶非空約束
至少是unique的約束之後才能使用auto_increment
主鍵 primary key
一張表只能有一個
如果不指定主鍵,預設是第一個非空+唯一
聯合主鍵 primary key(欄位1,欄位2)
外來鍵 Foreign key
Foreign key(自己的欄位) references 外表(外表欄位)
外表欄位必須至少是"唯一"的
on update cascade #級聯更新
on delete cascade # 級聯刪除 儘量不用
不能重複 unique 值不能重複,但是null可以寫入多個 create table t13( id1 int unique, id2 int ) 聯合唯一 unique create table t14( id int, server_name char(12), ip char(15), port char(5), unique(ip,port) ); 非空 + 唯一約束 第一個被定義為非空+唯一的那一列會成為這張表的primary key 一張表只能定義一個主鍵 create table t15( id int not null unique, username char(18) not null unique ); create table t16( username char(18) not null unique, id int not null unique ); create table t17( username char(18) not null unique, id int primary key ); 聯合主鍵 create table t18( id int, server_name char(12), ip char(15) default '', port char(5) default '', primary key(ip,port) ); create table t19( id int primary key, server_name char(12), ip char(15) not null, port char(5) not null, unique(ip,port) ); 自增 create table t20( id int primary key auto_increment, name char(12) ); insert into t20(name) values('alex'); 外來鍵 班級表 create table class( cid int primary key auto_increment, cname char(12) not null, startd date )# 學生表 # create table stu( # id int primary key auto_increment, # name char(12) not null, # gender enum('male','female') default 'male', # class_id int, # foreign key(class_id) references class(cid) # ) create table stu2( id int primary key auto_increment, name char(12) not null, gender enum('male','female') default 'male', class_id int, foreign key(class_id) references class(cid) #設定外來鍵 涉及class表的cid on update cascade #級聯更新 on delete cascade # 級聯刪除 儘量不用 )