Qt5.12+VS2017環境下編譯QtAV視訊庫
阿新 • • 發佈:2020-10-21
約束
約束的作用
在MySQL中,各種完整性約束是資料庫關係模式定義的一部分CREATE TABLE或ALERT TABLE來定義。一旦定義了完整性約束,MySQL伺服器就會隨時監測處於更新狀態的資料庫內容是否符合相關的完整性約束,從而保證資料的一致性與正確性。這樣可以防止操作對資料庫的意外破壞,也能提高完整性檢測效率,還能減輕資料庫程式設計人員的負擔。
主鍵約束
主鍵約束即在表中定義一個主鍵來唯一確定表中每一行資料的識別符號
- 每個表只能定義一個主鍵
- 主鍵必須標識表中的每一行,且不能為null,即表中不可能存在兩行資料有相同的主鍵名
- 一個列名只能複合主鍵列表中一次
- 複合主鍵不能包含不必要的多餘列
建立表時設定主鍵約束
<欄位名> <資料型別> PRIMARY KEY [預設值]
#示例1
create table emp(
id int(11) PRIMARY KEY,
name varchar(25)
);
#示例2
create table emp(
id int(11),
name varchar(25),
PRIMARY KEY(id)
);
#查看錶結構
DESC emp;
建立表時設定複合主鍵
PRIMARY KEY [欄位1,欄位2。。。。,欄位n]
#示例1 create table emp( deptid int(11), name varchar(25), salary FLOAT, PRIMARY KEY(name,deptid) ); #查看錶結構 DESC emp;
在修改表時,新增主鍵約束
ALTER TABLE <資料表名> ADD PRIMARY KEY (<列名>);
#示例1
create table emp(
id int(11),
name varchar(25),
salary FLOAT
);
ALERT TABLE emp ADD PRIMARY KEY(id);
#查看錶結構
DESC emp;
外來鍵約束
外來鍵用來在兩個表的資料之間建立連線,它可以是一列或者多列,一個表可以有一個或多個外來鍵。外來鍵對應的是參照完整性,一個表的外來鍵可以為空值,若不為空值,則每一個外來鍵的值必須等於另一個表中主鍵的某個值。
主表(父表):對於兩個具有關聯關係的表而言,相關聯欄位中主鍵所在的表就是主表。
從表(子表):對於兩個具有關聯關係的表而言,相關聯欄位中外來鍵所在的表就是從表。
- 父表必須已經存在與資料庫中,或者是當前正在建立的表。
- 必須為父表定義主鍵。
- 主鍵不能包含空值,但允許外來鍵中出現空值。
- 在父表的表名後面指定列名或列名的組合。
- 外來鍵中列的數目必須和父表的主鍵中列的數目相同。
- 外來鍵中列的資料型別必須和父表主鍵中對應列的資料型別相同。
在建立表時設定外來鍵約束
[CONSTARAINT <外來鍵名>] FOREIGN KEY 欄位名 [,欄位名2,。。。]
REFERENCES <主鍵名> 主鍵列1 [,主鍵列2。。。]
#示例
create table dept(
id int(11) PRIMARY KEY,
name varchar(20) not null,
location varchar(50)
);
create table emp(
id int(11) PRIMARY KEY,
name varchar(28),
deptId int(11),
CONSTARAINT fk_emp_dept
FOREIGH KEY(deptId) REFERENCES dept(id)
);
#查勘表結構
DESC emp;
在修改表時新增外來鍵約束
ALTER TABLE <資料表名> ADD CONSTRAINT <索引名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
#示例
ALTER TABLE emp ADD CONSTRAINT fk_tb_dept1 FOREIGN KEY(deptId) REFERENCES dept(id);
#查看錶結構
SHOW CREATE TABLE EMP\G;
刪除外來鍵約束
ALTER TABLE emp DROP FOREIGN KEY fk_tb_dept;
唯一約束
唯一約束要求該列唯一,允許為空,但只能出現一個空值。唯一約束可以確保一列或者幾列不出現重複值。
在建立表時設定唯一約束
<欄位名> <資料型別> UNIQUE
#示例
create table dept2(
id int(11) PRIMARY KEY,
name VARCHAR(22) UNIQUE,
lication VARCHAR(50)
);
#查看錶結構
DESC dept2;
在修改表時新增唯一約束
ALTER TABLE <資料表名> ADD CONSTRAINT <唯一約束名> UNIQUE(<列名>);
#示例
ALTER TABLE dept1 ADD CONSTRAINT unique_name UNIQUE(name);
#查看錶結構
DESC dept1;
刪除唯一約束
ALTER TABLE <表名> DROP INDEX <唯一約束名>;
#示例
ALTER TABLE dept1 DROP INDEX unique_name;
#查看錶結構
DESC dept1;
檢查約束
CHECK約束可以通過CREATE TABLE或ALTER TABLE語句實現,根據使用者實際的完整性要求來定義。他可以分別對列或表實施CHECK約束。
在建立表時設定檢查約束
CHECK (<檢查約束>)
#示例
create table emp(
id int(11) PRIMARY KEY,
name varchar(21),
deptId int(12),
salary FLOAT,
CHECK(salary>0 AND salary<100),
FOREIGN KEY(deptId) REFERENCES dept(id)
);
#查看錶結構
DESC emp;
在修改表時新增檢查約束
ALTER TABLE emp ADD CONSTRAINT <檢查約束名> CHECK(<檢查約束>)
#示例
ALTER TABLE emp ADD CONSTARINT check_id CHECK(id>0);
刪除檢查欄位
ALTER TABLE <資料表名> DROP CONSTRAINT <檢查約束名>;
預設約束
預設值約束指定某列的預設值
在建立表時設定預設值約束
<欄位名> <資料型別> DEFAULT <預設值>
#示例
create table dept(
id int(11) PRIMARY KEY ,
name VARCHAR(20),
lication VARCHAR(30) DEFAULT 'BEIJING'
);
#查看錶結構
DESC dept;
在修改表時新增預設約束
ALTER TABLE <資料表名> CHANGE COLUMN <欄位名> <資料型別> DEFAULT <預設值>;
#示例
ALTER TABLE dept CHANGE COLUMN location
location VARCHAR(50) DEFAULT 'SHANGHAI';
#查看錶結構
DESC dept;
刪除預設值約束
ALTER TABLE <資料表名> CHANGE COLUMN <欄位名> <欄位名> <資料型別> DEFAULT NULL;
#示例
ALTER TABLE dept CHANGE COLUMN location
location VARCHAR(50) DEFAULT NULL;
#查看錶結構
DESC dept;
非空約束
非空約束可以通過CREATE TABLE 或ALTER TABLE語句實現。在表中某個列的定義後加上關鍵字NOT NULL 作為限定詞,來約束該列的取值不能為空。
- 非空約束指欄位的值不能為空。對於使用了非空約束的欄位,如果使用者在新增資料時沒有指定值,資料庫系統就會報錯。
在建立表時設定非空約束
<欄位名> <資料型別> NOT NULL;
#示例
create table dept(
id int(11) PRIMARY KEY,
name VARCHAR(22) NOT NULL,
location VARCHAR(50)
);
#查看錶結構
DESC dept;
在修改表時新增非空約束
ALTER TABLE <資料表名> CHANGE COLUMN <欄位名> <欄位名> <欄位型別> NOT NULL;
#示例
ALTER TABLE dept CHANGE COLUMN location
location VARCHAR(50) NOT NULL;
刪除非空約束
ALTER TABLE <資料表名> CHANGE COLUMN <欄位名> <欄位名> <資料型別> NULL;
#示例
ALTER TABLE dept CHANGE COLUMN location
location VARCHAR(50) NULL;
#查看錶結構
DESC dept;