mysql 參照完整性規則_MySQL整理4—資料表的基本操作1
阿新 • • 發佈:2021-01-06
技術標籤:mysql 參照完整性規則
資料科學探路者:MySQL知識整理3—資料庫的基本操作zhuanlan.zhihu.com主要內容:建立資料表,檢視資料表結構,修改資料表,刪除資料表,約束、預設和規則含義
一、建立資料表
語法形式:
create table <表名> (
欄位1 , 資料型別 [列級別約束條件][預設值],
欄位2 , 資料型別 [列級別約束條件][預設值],
...
);
例子:
create create table tb_emp1( id int(11) primary key, name varchar(25), deptID int(11), salary float /*新增主鍵約束,在最後新增也可*/ /*primary key(id)*/ /*多欄位主鍵新增 primary key(id,name)*/ );
約束包括哪些?
- 非空約束 (not null)
- 唯一性約束 (unique)
- 主鍵約束 (primary key) 簡稱 PK
- 外來鍵約束 (foreign key) 簡稱 FK
- 檢查約束【目前MYSQL不支援,oracle資料庫支援】
1.主鍵:表中的每一行都應該具有可以唯一標識自己的一列(或一組列)。而這個承擔標識作用的列稱為主鍵。如果沒有主鍵,資料的管理將會十分混亂。比如會存在多條一模一樣的記錄,刪除和修改特定行十分困難。
任何列都可以作為主鍵,只要它滿足以下條件:
- 任何兩行都不具有相同的主鍵值。就是說這列的值都是互不相同的
- 每個行都必須具有一個主鍵值。主鍵列不允許設定為NULL
- 主鍵列的值不建議進行修改和更新
(註釋:在第一部分,資料庫基礎中,主鍵知識已介紹)
2.外來鍵
基本概念 :
- (1) MySQL中“鍵”和“索引”的定義相同,所以外來鍵和主鍵一樣也是索引的一種。不同的是MySQL會自動為所有表的主鍵進行索引,但是外來鍵欄位必須由使用者進行明確的索引。用於外來鍵關係的欄位必須在所有的參照表中進行明確地索引,InnoDB不能自動地建立索引。
- (2) 外來鍵可以是一對一的,一個表的記錄只能與另一個表的一條記錄連線,或者是一對多的,一個表的記錄與另一個表的多條記錄連線。
- (3) 如果需要更好的效能,並且不需要完整性檢查,可以選擇使用MyISAM表型別,如果想要在MySQL中根據參照完整性來建立表並且希望在此基礎上保持良好的效能,最好選擇表結構為innoDB型別。
- (4) 外來鍵的使用條件: ① 兩個表必須是InnoDB表,MyISAM表暫時不支援外來鍵 ② 外來鍵列必須建立了索引,MySQL 4.1.2以後的版本在建立外來鍵時會自動建立索引,但如果在較早的版本則需要顯式建立; ③ 外來鍵關係的兩個表的列必須是資料型別相似,也就是可以相互轉換型別的列,比如int和tinyint可以,而int和char則不可以;
- (5) 外來鍵的好處:可以使得兩張表關聯,保證資料的一致性和實現一些級聯操作。
create table tb_dept1(
id int(11) primary key,
name varchar(22) not null,
location varchar(50)
);
create table tb_emp5(
id int(11) primary key,
name varchar(25),
deptID int(11),
salary float,
constraint fk_empdept1 foreign key(deptID) references tb_dept1(id)
);
3.非空約束
強制列不能為 NULL 值,約束強制欄位始終包含值。這意味著,如果不向欄位新增值,就無法插入新記錄或者更新記錄。例子:name欄位不能為空
create table tb_dept1(
id int(11) primary key,
name varchar(22) not null,
location varchar(50)
);
4.唯一性約束
unique約束的欄位具有唯一性,不可重複。唯一性約束要求該列唯一,允許為空,但只能出現一個空值。唯一性約束可以確保一列或者幾列不出現重複值。
- UNIQUE KEY 唯一約束
- 唯一約束可以保證資料的唯一性
- 唯一約束的欄位可以為空
- 每張資料表可以有存在多個唯一約束
create table tb_dept1(
id int(11) primary key,
name varchar(22) unique,
location varchar(50)
/*或者在最後新增constraint <約束名> unique <欄位名>*/
/*constraint na unique(name)*/
);
5.設定表的屬性自動增加
在資料庫應用中,經常希望在每次插入新紀錄時,系統自動生成欄位的主鍵值。 實現此目的,可以使用關鍵字:ATUO_INCREMENT
- 1.預設,MySQL中AUTO_INCREMENT的初值是1,每新增一條記錄,欄位值自動加1;
- 2.一個表只能用一個欄位使用AUTO_INCREMENT約束,且該欄位必須為主鍵的一部分。
- 約束的欄位可以是任何整數型別(tinyint,smallint,int,bigint)
create table tb_emp1(
id int(11) primary key auto_increment,
name varchar(25),
deptID int(11),
salary float
);
insert into tb_emp1(name,salary)
values('lucy',7000),('tom',15000),('steven',40000);
插入資料後,id欄位自動增加1。