最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQL中的鍵與約束

 更新時(shí)間:2025年10月24日 10:03:39   作者:啊吧怪不啊吧  
本文圍繞SQL約束展開(kāi),核心是通過(guò)not null、default、主鍵、唯一鍵、自增長(zhǎng)、外鍵等約束類型,解決數(shù)據(jù)庫(kù)數(shù)據(jù)無(wú)效、重復(fù)及表間關(guān)聯(lián)混亂問(wèn)題,保障數(shù)據(jù)可靠性,為數(shù)據(jù)庫(kù)設(shè)計(jì)和管理提供基礎(chǔ)指導(dǎo),本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧

1. 約束的概念講解

在SQL這里所說(shuō)的約束是一種規(guī)則,它不是一個(gè)具體的代碼或者指令。然后我們創(chuàng)建了鍵,然后給不同的鍵添加了不同的規(guī)則,用來(lái)實(shí)現(xiàn)約束。

約束的存在主要解決三大問(wèn)題,確保數(shù)據(jù)庫(kù)數(shù)據(jù)可靠:

  1. 防止無(wú)效數(shù)據(jù):比如禁止在 “年齡” 列插入負(fù)數(shù)或字符串。
  2. 避免重復(fù)數(shù)據(jù):比如確保 “用戶 ID” 列不會(huì)出現(xiàn)兩個(gè)相同的編號(hào)。
  3. 維護(hù)表間關(guān)聯(lián):比如確保 “訂單表” 中的 “用戶 ID”,在 “用戶表” 中一定存在。

2. 空屬性

我們可以理解為在一些用戶注冊(cè)的時(shí)候要求必須填入的部分。

簡(jiǎn)單來(lái)說(shuō)就是在創(chuàng)建的時(shí)候我們可以設(shè)置某一個(gè)字段不可以為空,然后用戶在輸入的時(shí)候?yàn)榭樟四蔷蛨?bào)錯(cuò)。

使用方式:null (默認(rèn)的)和not null(不為空  我們可以在參數(shù)后面添加這個(gè)用來(lái)表示是否可以為空。

我們看,如果不給a1插入的話,就會(huì)報(bào)錯(cuò),因?yàn)槲覀兲崆霸O(shè)置了要求a1不可以為空。這就是一種約束。

我們查看t1也可以發(fā)現(xiàn)在Null這一欄a1寫的是NO。

3. 默認(rèn)值default

這個(gè)我們可以理解為比如說(shuō)在填入自己的信息是默認(rèn)都是漢族,類似于這種。

default

我們看下面這張表格,如果我們?cè)O(shè)置了其中一個(gè)為default,那么哪怕我們不填入,它也會(huì)是1。如果我們往a1里面填入了,那么它就是我們填入的值。

4.列描述comment

列描述:comment,沒(méi)有實(shí)際含義,專門用來(lái)描述字段,會(huì)根據(jù)表創(chuàng)建語(yǔ)句保存,用來(lái)給程序員或DBA 來(lái)進(jìn)行了解。簡(jiǎn)單來(lái)說(shuō)就是注釋。

我們?cè)趧?chuàng)建的時(shí)候這么寫。

然后我們通過(guò)下面這行代碼就可以查看到注釋信息。

5. 主鍵

主鍵: primary key 用來(lái)唯一的約束該字段里面的數(shù)據(jù),不能重復(fù),不能為空,一張表中最多只能有一個(gè)。

同時(shí)當(dāng)一個(gè)字段被確認(rèn)為主鍵的時(shí)候,那么就意味著它在插入的時(shí)候必須被填入,同時(shí)也不允許重復(fù)。

我們看下面這一張圖片,當(dāng)a1被設(shè)置為主鍵時(shí)候,Key這一欄就顯示為PRI。如果我們插入兩個(gè)一樣的數(shù)給a1,那么就會(huì)直接報(bào)錯(cuò)。

當(dāng)表創(chuàng)建好以后但是沒(méi)有主鍵的時(shí)候,可以再次追加主鍵

alter table 表名 add primary key(字段列表)

刪除主鍵

alter table 表名 drop primary key;

復(fù)合主鍵

在創(chuàng)建表的時(shí)候,在所有字段之后,使用primary key(主鍵字段列表)來(lái)創(chuàng)建主鍵,如果有多個(gè)字段

作為主鍵,可以使用復(fù)合主鍵。在這里的報(bào)錯(cuò)條件就是多個(gè)字段全部重復(fù)。

我們看下面這一張圖片,在id和course全部重復(fù)的時(shí)候,那么就會(huì)報(bào)錯(cuò)。

下面這行代碼是設(shè)置復(fù)合主鍵的方式。

mysql> create table tt14( -> id int unsigned,
-> course char(10) comment '課程代碼', 
-> score tinyint unsigned default 60 comment '成績(jī)',
-> primary key(id, course) -- id和course為復(fù)合主鍵 -> ); 
Query OK, 0 rows affected (0.01 sec)

6.自增長(zhǎng)

auto_increment:當(dāng)對(duì)應(yīng)的字段,不給值,會(huì)自動(dòng)的被系統(tǒng)觸發(fā),系統(tǒng)會(huì)從當(dāng)前字段中已經(jīng)有的最大值 +1操作,得到一個(gè)新的不同的值。通常和主鍵搭配使用,作為邏輯主鍵。

自增長(zhǎng)的特點(diǎn):

任何一個(gè)字段要做自增長(zhǎng),前提是本身是一個(gè)索引(key一欄有值)

自增長(zhǎng)字段必須是整數(shù)

一張表最多只能有一個(gè)自增長(zhǎng)

auto_increment必須在主鍵或者唯一索引的地方使用。我們看下面這一張圖片,如果設(shè)置成功的話,我們desc會(huì)在Extra的地方顯示一個(gè)auto_increment。

我們看下面的代碼和圖片,如果我們一開(kāi)始a1給了1,那么接下來(lái)它就會(huì)在這一額基礎(chǔ)上進(jìn)行++,但是我們?nèi)绻诤竺娼o了100,那么接下來(lái)就是在100的基礎(chǔ)上進(jìn)行++。

mysql> insert into t5 (a1,a2) values (1,"a");
Query OK, 1 row affected (0.00 sec)
mysql> insert into t5 (a2) values ("a");
Query OK, 1 row affected (0.01 sec)
mysql> insert into t5 (a2) values ("a");
Query OK, 1 row affected (0.00 sec)
mysql> insert into t5 (a2) values ("a");
Query OK, 1 row affected (0.00 sec)
mysql> insert into t5 (a2) values ("a");
Query OK, 1 row affected (0.00 sec)
mysql> insert into t5 (a1,a2)values (100,"b");
Query OK, 1 row affected (0.00 sec)
mysql> insert into t5 (a2) values ("b");
Query OK, 1 row affected (0.00 sec)
mysql> insert into t5 (a2) values ("b");
Query OK, 1 row affected (0.00 sec)

7.唯一鍵

一張表中有往往有很多字段需要唯一性,數(shù)據(jù)不能重復(fù),但是一張表中只能有一個(gè)主鍵:唯一鍵就可以

解決表中有多個(gè)字段需要唯一性約束的問(wèn)題。

唯一鍵的本質(zhì)和主鍵差不多,唯一鍵允許為空,而且可以多個(gè)為空,空字段不做唯一性比較。

關(guān)于唯一鍵和主鍵的區(qū)別:

我們可以簡(jiǎn)單理解成,主鍵更多的是標(biāo)識(shí)唯一性的。而唯一鍵更多的是保證在業(yè)務(wù)上,不要和別的信息 出現(xiàn)重復(fù)。

其實(shí)簡(jiǎn)單來(lái)說(shuō)唯一鍵就是為了解決我們?cè)谝粡埍砀裰胁恢挂粋€(gè)需要去重的地方而設(shè)計(jì)的。

我們看下面這張圖片,它可以達(dá)到和主鍵一樣的效果。

8. 外鍵

外鍵用于定義主表和從表之間的關(guān)系:外鍵約束主要定義在從表上,主表則必須是有主鍵約束或unique約束。當(dāng)定義外鍵后,要求外鍵列數(shù)據(jù)必須在主表的主鍵列存在或?yàn)閚ull

foreign key (字段名) references 主表(列)

這個(gè)比較抽象,我們借用下面這張圖來(lái)進(jìn)行說(shuō)明,foreign key (class_id) references myclass(id)就給兩者之間建立了關(guān)系。然后現(xiàn)在班級(jí)有10和20,那么現(xiàn)在在學(xué)生表中插入數(shù)據(jù),同時(shí)給他的calss_id填入30,那么SQL就會(huì)報(bào)錯(cuò)。

注意:foreign key (字段名) references 主表(列)     這行要寫在創(chuàng)建從表時(shí)的時(shí)候。

我們看下面這張圖片,被關(guān)聯(lián)的主表里面的列要為主鍵。這樣我們就建立好了外鍵約束。

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

相關(guān)文章

最新評(píng)論

鱼台县| 新民市| 辽宁省| 清镇市| 温泉县| 金山区| 塔河县| 法库县| 吉木萨尔县| 斗六市| 克拉玛依市| 肇东市| 隆化县| 中阳县| 马边| 沾益县| 梧州市| 南雄市| 榆树市| 柯坪县| 营山县| 永顺县| 克东县| 建水县| 淮安市| 美姑县| 利辛县| 宣威市| 鄂托克旗| 庄浪县| 东源县| 闸北区| 青川县| 平泉县| 丹阳市| 广河县| 巴彦县| 璧山县| 神池县| 分宜县| 南江县|