亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySql約束超詳細(xì)介紹

 更新時間:2022年09月16日 14:47:02   作者:在人間負(fù)債^  
MySQL唯一約束(Unique?Key)是指所有記錄中字段的值不能重復(fù)出現(xiàn)。例如,為?id?字段加上唯一性約束后,每條記錄的?id?值都是唯一的,不能出現(xiàn)重復(fù)的情況

1. 什么是約束

約束對應(yīng)的英語單詞:constraint

在創(chuàng)建表的時候,我們可以給表中的字段加上一些約束,來保證表中的數(shù)據(jù)的完整性、有效性?。?!

約束的作用就是為了保證:表中的數(shù)據(jù)有效?。?/p>

2. 約束包括哪些

非空約束 not null

唯一性約束 unique

主鍵約束 primary key

外鍵約束 foreign key

檢查約束 check

3. 非空約束

非空約束 not null 約束的字段不能為 NULL

mysql> create table t_vip(id int, name varchar(255) not null);

mysql> insert into t_vip(id, name) values(1, 'zhangsan');
mysql> insert into t_vip(id, name) values(2, 'lisi');

mysql> insert into t_vip(id) values(3);
ERROR 1364 (HY000): Field 'name' doesn't have a default value

4. 唯一性約束

唯一性約束 unique 約束的字段不能重復(fù),但是可以為 NULL

1. 單字段唯一性約束

mysql> create table t_vip(id int, name varchar(255) unique, email varchar(255));

mysql> insert into t_vip(id, name, email) values(3, 'lisi', 'lisi@123.com');
ERROR 1062 (23000): Duplicate entry 'lisi' for key 't_vip.name'
mysql> select * from t_vip;

2. 多字段唯一性約束

需求:name 和 email 兩個字段聯(lián)合起來具有唯一性?。?!

mysql> create table t_vip(id int, name varchar(255) unique, email varchar(255) unique);

這樣創(chuàng)建的表是不符合上述需求的,因為 name 具有唯一性,email 具有唯一性。兩個字段各自具有唯一性。

mysql> create table t_vip(id int, name varchar(255), email varchar(255), unique(name, email));
mysql> insert into t_vip(id, name, email) values(1, 'zhangsan', 'zhangsan@123.com');
mysql> insert into t_vip(id, name, email) values(1, 'zhangsan', 'zhangsan@sina.com');

5. 主鍵約束

主鍵約束 primary key 簡稱 pk

1. 主鍵約束的相關(guān)術(shù)語

  1. 主鍵約束:就是一種約束。
  2. 主鍵字段:該字段上添加了主鍵約束,這樣的字段叫做:主鍵字段。
  3. 主鍵值:主鍵字段中的每一個值都叫做:主鍵值。

2. 什么是主鍵以及有啥用

主鍵值是每一行記錄的唯一標(biāo)識

主鍵值是每一行記錄的身份證號?。。?/p>

記?。喝魏我粡埍矶紤?yīng)該有主鍵,沒有主鍵,表無效!?。?/p>

主鍵的特征:not null + unique(主鍵值不能是 NULL,同時也不能重復(fù))

3. 單一主鍵

mysql> create table t_vip(id int primary key, name varchar(255));

主鍵不能重復(fù)

mysql> insert into t_vip(id, name) values(2, 'lisi');
ERROR 1062 (23000): Duplicate entry '2' for key 't_vip.PRIMARY'

主鍵不能為NULL

mysql> insert into t_vip(name) values('lisi');
ERROR 1364 (HY000): Field 'id' doesn't have a default value

4. 復(fù)合主鍵

mysql> create table t_vip(id int, name varchar(255), email varchar(255), primary key(id, name));

mysql> insert into t_vip(id, name, email) values(1, 'zhangsan', 'zhansgan@123.com');
mysql> insert into t_vip(id, name, email) values(1, 'lisi', 'lisi@123.com');

5. 其他主鍵

除了單一主鍵和復(fù)合主鍵外,還擁有:

  • 自然主鍵:主鍵值是一個自然數(shù),和業(yè)務(wù)沒有關(guān)系。
  • 業(yè)務(wù)主鍵:主鍵值和業(yè)務(wù)緊密關(guān)聯(lián),例如拿銀行卡賬號做主鍵值。這就是業(yè)務(wù)主鍵!

實際開發(fā)中,使用自然主鍵多,很少使用業(yè)務(wù)主鍵?。?!

主鍵一旦和業(yè)務(wù)值掛鉤,可能會出現(xiàn)各種問題!?。?/p>

6. 外鍵約束

外鍵頁數(shù) foregin key 簡稱 fk

1. 外鍵約束的相關(guān)術(shù)語

  1. 外鍵約束:一種約束:foregin key。
  2. 外鍵字段:該字段上添加了外鍵約束。
  3. 外鍵值:外鍵字段當(dāng)中的每一個值。

2. 外鍵出現(xiàn)的原因

業(yè)務(wù)背景:

請設(shè)計數(shù)據(jù)庫表,來描述 “班級和學(xué)生” 的信息?

第一種方案:班級和學(xué)生存儲在一張表中

分析上述方案的缺點:數(shù)據(jù)冗余,空間浪費?。?!

第二種方案:班級一張表,學(xué)生一張表

當(dāng) cno 字段沒有任何約束的時候,可能會導(dǎo)致數(shù)據(jù)無效??赡艹霈F(xiàn)一個 102,但是 102 班級不存在,所以為了保證 cno 字段中的值都是 100 和 101,需要給 cno 字段添加外鍵約束。 那么:cno 字段就是外鍵字段。cno 字段中的每一個值都是外鍵值。

注意:

t_class 是父表 t_student 是字表

刪除表的順序?

先刪子,再刪父。

創(chuàng)建表的順序?

先創(chuàng)建父,再創(chuàng)建子。

刪除數(shù)據(jù)的順序?

先刪子,再刪父。

插入數(shù)據(jù)的順序?

先插入父,再插入子。

3. 創(chuàng)建外鍵表

創(chuàng)建表

mysql> create table t_class(classno int primary key, classname varchar(255));
mysql> create table t_student(no int primary key auto_increment, name varchar(255), cno int, foreign key(cno) references t_class(classno));

插入數(shù)據(jù)

mysql> insert into t_class(classno, classname) values(100, '北京市大興區(qū)亦莊鎮(zhèn)第二中學(xué)高三1班');
mysql> insert into t_class(classno, classname) values(101, '北京市大興區(qū)亦莊鎮(zhèn)第二中學(xué)高三2班');

mysql> insert into t_student(name, cno) values('jack', 100);
mysql> insert into t_student(name, cno) values('lucy', 100);
mysql> insert into t_student(name, cno) values('lilei', 100);
mysql> insert into t_student(name, cno) values('hanmeimei', 100);
mysql> insert into t_student(name, cno) values('zhangsan', 100);
mysql> insert into t_student(name, cno) values('lisi', 100);
mysql> insert into t_student(name, cno) values('wangwu', 100);
mysql> insert into t_student(name, cno) values('zhaoliu', 100);

注意:子表中的外鍵引用的父表中的某個字段,被引用的這個字段必須是主鍵嗎?

不一定是主鍵,但至少具有 unique 約束。

到此這篇關(guān)于MySql約束超詳細(xì)介紹的文章就介紹到這了,更多相關(guān)MySql約束內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論