欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:數(shù)據(jù)庫 【MySQL】表的約束

柚子快報激活碼778899分享:數(shù)據(jù)庫 【MySQL】表的約束

http://yzkb.51969.com/

文章目錄

1. 約束概念2. 空屬性3. 默認(rèn)值5. comment——列描述6. zerofill7. 主鍵8. 復(fù)合主鍵9. 自增長10. 唯一鍵關(guān)于唯一鍵的理解

11. 外鍵外鍵的理解

1. 約束概念

表中一定要有各種約束,通過約束,讓未來插入數(shù)據(jù)庫表中的數(shù)據(jù)是符合預(yù)期的 約束本質(zhì)是 通過技術(shù)手段,倒逼程序員 插入正確的數(shù)據(jù) 站在mysql的視角,凡是插入進(jìn)來都是符合數(shù)據(jù)約束的 約束的最終目標(biāo):保證 數(shù)據(jù)的完整性和可預(yù)期性

如:使用VS時,當(dāng)代碼寫錯了,編譯器就會報錯,如果不改錯而執(zhí)行代碼,就會導(dǎo)致執(zhí)行不通過 必須將錯誤修改正確,才能執(zhí)行才能通過

2. 空屬性

在mysql中 NULL表示沒有 ’ ’ 表示空串,有只不過是空的

輸入 select NULL; 查詢時發(fā)現(xiàn)什么都沒有

共有兩種默認(rèn)值:null (默認(rèn)為空) 和 not null(不為空) 數(shù)據(jù)庫默認(rèn)字段基本都是字段為空,但是實(shí)際開發(fā)時,盡可能保證字段不為空,因?yàn)閿?shù)據(jù)為空沒辦法參與計(jì)算

創(chuàng)建一個班級表,內(nèi)部包含 一個 班級名稱和 教室名稱 以及其他 其中班級名稱和班級教室都不能為空,所以設(shè)置 not null 進(jìn)行約束 而其他沒有約束,也就沒有帶 not null

輸入 desc myclass; 查看myclass 表的更詳細(xì)信息 Null 表示對應(yīng) 列未來做插入時,是否為空 如: class_name 這一列未來做插入時 不能為空 other 這一列 未來做插入時,可以為空

向myclass表中 插入 班級名 初一6班, 班級教室 111教室,其他為普通班 時,是可以成功插入的

再次插入時,沒有給other具體的值,此時依舊可以插入成功 當(dāng)查看表 的信息時,other為NULL (other沒有添加非空約束)

當(dāng)插入班級名稱 以及 教室名稱設(shè)置為空時,就會插入失敗 (因?yàn)閏lass_room 添加了非空約束)

3. 默認(rèn)值

某一種數(shù)據(jù)會經(jīng)常性的出現(xiàn)某個具體的值,可以在一開始就指定好,在需要真實(shí)數(shù)據(jù)的時候,用戶可以選擇性的使用默認(rèn)值

創(chuàng)建一張表t11 ,內(nèi)部包含 不能為空的名字 、 默認(rèn)值為18 的年齡、 默認(rèn)為男的性別

當(dāng)插入 名字為張三、年齡為19、性別為女,可以插入成功 當(dāng)只插入名字李四時,也是可以插入成功的 顯示表的信息時,年齡和性別都為默認(rèn)值

所以 deault 如果設(shè)置了,用戶將來插入,有具體的數(shù)據(jù)了,就用用戶的,沒有就用默認(rèn)的

創(chuàng)建一張表 t12,內(nèi)部包含 不能為空的名字、 默認(rèn)為18的年齡、 不能為空且默認(rèn)為男的性別 性別 把 deault 和not null 同時設(shè)置了

若向t11表中插入年齡和性別,而不插入名字 就會報錯,沒有默認(rèn)值存在

結(jié)論: 若沒有明確指定一列要插入,用的是default 如果建表中對應(yīng)的列默認(rèn)沒有default值,就無法直接插入

向t11表中只插入名字和年齡,不插入性別 由于性別有默認(rèn)值存在,所以會使用默認(rèn)值 所以查詢表信息時,發(fā)現(xiàn)趙六的性別為默認(rèn)值男

如果忽略某一列,若設(shè)定了默認(rèn)值且默認(rèn)值不為空,則可以直接插入

default 作用于 當(dāng)用戶忽略這一列時,如果設(shè)置了默認(rèn)值,則使用默認(rèn)值 not null 作用于 當(dāng)用戶想插入時,若輸入null 則會報錯 ,約束用戶輸入合法數(shù)據(jù)

5. comment——列描述

comment 后面跟的相當(dāng)于注釋 創(chuàng)建一張表 t13,內(nèi)部包含 用戶名 、默認(rèn)為男的用戶性別

輸入 show create table t13 \G 獲取t13表更詳細(xì)信息 就可以看到列信息的描述字段

6. zerofill

創(chuàng)建一張表 t14,內(nèi)部包含 一個 無符號的整形 a 與 無符號的整形 b 兩者都不能為空

輸入 show create table t14 \G 查詢t14表中更詳細(xì)的信息 發(fā)現(xiàn) 默認(rèn) mysql 的int 帶了一個10 無符號范圍為0 到42億多,所以需要寬度10去表示 所以 無符號int 的默認(rèn)寬度為10

向t14表中插入 1 和 2, 輸入 select *from t14; 查看t14表結(jié)構(gòu) 目前來看沒有什么問題

將t14表中的b成員類型改為 無符號int 并添加 向zerofill

再次輸入 select *from t14; 查看t14表的結(jié)構(gòu) a沒有變化,而b從 2變成 0000000002

zerofill的作用為 給特定的一列添加 zerofill屬性 對于結(jié)果,如果顯示的寬度 少于 限定的寬度,則會自動填0 如:int類型的限定寬度為10,則輸入的2 顯示寬度為1,就默認(rèn)在2前面全部補(bǔ)充0 ,就把 2變?yōu)?0000000002

將t14表中的b成員類型改為 int的限定寬度為3

分別插入 1 20 和 1 2000 可以發(fā)現(xiàn) 當(dāng)小于限定寬度時,會在前面自動填充0 如:20 顯示寬度為2 ,小于限定寬度 3 ,所以在前面填充0

而大于限定寬度時,就什么都不做 如:2000 顯示寬度為4,大于限定寬度3,就直接顯示

7. 主鍵

primary key 用來唯一的約束該字段里面的數(shù)據(jù),不能重復(fù),不能為空,一張表最多只有一個主鍵 主鍵所在的列 通常是整數(shù)類型

創(chuàng)建一張表 test_key,內(nèi)部包含 被設(shè)置為主鍵的學(xué)號 以及 不能設(shè)置為空的 名字

學(xué)號id中并沒有設(shè)置為非空,但是查詢test_key表結(jié)構(gòu)時,發(fā)現(xiàn)自動將其設(shè)置為 not null 由于學(xué)號被設(shè)置為主鍵 所以查詢時 在key 列(表示當(dāng)前列是否為主鍵列),發(fā)現(xiàn)id所在列為 PRI (當(dāng)前為主鍵列)

將 id為1,名字為劉備 插入到test_key表中,可以插入成功

當(dāng)再次在相同的id中,插入不同的名字時,就會報錯,出現(xiàn) 主鍵沖突 所以就需要去其他的id中去插入

主鍵約束:如果想要在一個表中插入,主鍵是不可以沖突的,如果沖突 就會插入失敗

輸入 alter table test_key drop primart key; 將 主鍵從test_key表中刪除 輸入 desc test_key; 發(fā)現(xiàn)當(dāng)前的test_key表中不存在主鍵

再次輸入 insert into test_key values(1,‘張飛’); 向test_key表中插入 1 張飛 ,是可以插入成功的(沒有主鍵約束)

也可以將表建好后,再添加主鍵 當(dāng)前的test_key 表是沒有主鍵存在的

輸入 alter table test_key add primary key(id); 向 test_key表中的id成員插入 主鍵 但是會報錯,因?yàn)?當(dāng)前test_key表中存在主鍵沖突 必須將其解決,才能添加主鍵

輸入 delete from test_key where name=‘張飛’; 即可刪除test_key表中的張飛信息

再次輸入 alter table test_key add primary key(id); 即可再test_key表中加入主鍵

8. 復(fù)合主鍵

雖然一個表中只能有一個主鍵,但是并不意味著一個表中的主鍵,只能添加給一列 即 一個主鍵 也可以被添加到多列 ——復(fù)合主鍵

創(chuàng)建一張表 pick_course,內(nèi)部包含 無符號int的id、課程編號、課程分?jǐn)?shù) 為了使 學(xué)生 與課程編號 是一對一的關(guān)系,所以將 id 和course_id 都包含 主鍵

輸入 desc pick_course; 查看pick_course表結(jié)構(gòu) id和course_id中都包含同一個主鍵

第一次插入 1200 50 90 ,可以插入成功 第二次插入 1300 50 80, 也可以插入成功 因?yàn)?id與course_id是一對一關(guān)系,即只是不能有相同的id與course_id存在

再次插入 1200 50 40 ,因?yàn)榕c第一次插入 1200 50 重復(fù)了 引起 主鍵沖突,就會報錯

9. 自增長

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

自增長的特點(diǎn): 任何一個字段要自增長,前提key一欄要有值 自增長字段必須是整數(shù) 一張表最多只能有一個自增長

加入 auto_increment ,表示當(dāng)前這一列屬于自增式主鍵 創(chuàng)建一張表 tt21,內(nèi)部包含 自增式主鍵 的id 以及 不能為空的名字

輸入 desc tt21; 查看tt21表結(jié)構(gòu) key列的PRI 表示 id為主鍵列 Extra列的auto_increment 表示 id列是自增的

分別只插入 名字 a和 名字 b 輸入 select * from tt21; 查看tt21表結(jié)構(gòu),發(fā)現(xiàn)id會從1開始 并加1(保證跟別人不沖突,并且是連續(xù)的)

若想自定義id進(jìn)行插入 ,也是可以的 并且當(dāng)再次插入相同id時,就會引起主鍵沖突,從而插入失敗

當(dāng)前面id為500時,再次插入數(shù)據(jù),就會id就會默認(rèn)從501開始

創(chuàng)建表 tt23,并在表外設(shè)置id的默認(rèn)值從400開始

只插入名字e時,id就會默認(rèn)從400開始

10. 唯一鍵

一張表中有很多字段需要唯一性,數(shù)據(jù)不能重復(fù),但是一張表中只能有一個主鍵 唯一鍵就可以解決表中多個字段需要唯一約束的問題

唯一鍵和主鍵差不多,唯一鍵允許為空,而且可以多個為空,空字段不做唯一性比較

使用 unique 創(chuàng)建唯一鍵 (寫成 unique 或者 unique key 都可以) 創(chuàng)建一張表 stu ,內(nèi)部包含 擁有唯一鍵的id 以及 不為空的名字

輸入 desc stu; 查看stu表結(jié)構(gòu) 發(fā)現(xiàn) key列 內(nèi)部 變?yōu)?UNI

第一次插入 id為1234,名字為李四,插入成功 第二次插入與第一次插入的id相同,就導(dǎo)致 唯一鍵 沖突,從而插入失敗

若插入id為空,雖然名字相同,但依舊可以插入成功

若連續(xù)插入 NULL 值,皆可插入成功

唯一鍵表達(dá)了類似于主鍵的功能 但是唯一鍵可以為空,并且空值可以多次插入(NULL不參與計(jì)算) 而主鍵不可以為空

關(guān)于唯一鍵的理解

創(chuàng)建一張表student, 內(nèi)部包含 id 、名字、電話 將成員id設(shè)置為主鍵

將id為1234、名字為張三、電話為123456 插入到student表中,并插入成功

若將id修改與名字修改 而電話不變,將其插入到student表中 張三和李四的電話號相同 但是正常情況下是不存在,因?yàn)槊恳粋€人的電話號是唯一的

當(dāng)想要通過電話號去尋找對應(yīng)的人時,就發(fā)現(xiàn)無法準(zhǔn)確找到對應(yīng)的人

所以在主鍵保證唯一性的同時,其他字段有可能也需要唯一性,此時就需要借助唯一鍵來實(shí)現(xiàn)

重新創(chuàng)建 表student,內(nèi)部包含 主鍵的id、不為空的名字、唯一鍵的電話號、唯一鍵的qq號

輸入 desc student; 查看student表結(jié)構(gòu) 為了保證電話號和qq號的唯一性,所以兩者包含唯一鍵

當(dāng)將 id為1234、名字為李四、電話號為123456、qq號為456789 成功插入時 再次插入id 相同的人時,就會因?yàn)?主鍵沖突 而插入失敗

當(dāng)將 id為1234、名字為李四、電話號為123456、qq號為456789 成功插入時 再次插入 電話號與qq號 相同的人時,就會因?yàn)?唯一鍵沖突 而插入失敗

11. 外鍵

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

語法: foregin key(字段名) references 主表(列)

外鍵的理解

創(chuàng)建一張學(xué)生表student,包含 主鍵且自增長的id 、不為空的名字、不為空的電話號、班級號 (正常來說 電話號 是唯一的,應(yīng)該加上唯一鍵,這里只是初步測驗(yàn),所以沒有加)

輸入 desc student; 查看student表結(jié)構(gòu)

再創(chuàng)建一個班級表class,內(nèi)部包含 主鍵的id、不為空的名字

向class表中 插入 班級1 通信101 ,以及 班級2 通 信102

向student表中第一次插入 名字為張三、電話為123456、1號班級 由于id擁有主鍵并且為自增長的,所以默認(rèn)從1開始,每次加1 第二次插入 名字為李四、電話為456789、2號班級

由于張三是1號班級的,所以查找1號班級,發(fā)現(xiàn)通信101

假設(shè) 向student表中 誤插入3號班級中

邏輯上存在有一個學(xué)生所屬的班級 并不存在 若:王五屬于3號班級,但是class表中只有1號和2號班級 MySQL數(shù)據(jù)庫就要通過數(shù)據(jù)手段在邏輯上規(guī)避 并不符合要求的情況的產(chǎn)生

輸入 delete from class where d=1; 將 class表中 id值為1 刪除 此時再次查看 class表,發(fā)現(xiàn) 只剩下 id值為2

但是這種刪除不合理 因?yàn)樵趕tudent表 還有 屬于1號班級的信息 存在

這樣就會導(dǎo)致每次操作前 ,就需要查看是否影響其他表中的信息

班級表可以看作是主表,學(xué)生表可以看作 從表

外鍵需要考慮兩層面的關(guān)系:關(guān)聯(lián)關(guān)系 和 約束關(guān)系

student表中的class_id 有關(guān)聯(lián)關(guān)系,但是沒有約束關(guān)系

若要插入一名學(xué)生,但是插入的班級并不存在,就不允許插入,使其插入一個合法的id

為了創(chuàng)建出主表和從表的關(guān)系,就需要使用 外鍵 重新創(chuàng)建從表

先輸入 drop table student; 將從表 student 去掉

再次創(chuàng)建從表 student,內(nèi)部包含 主鍵的id、不為空的name、唯一鍵的telphone、class_id 并使 student表中的 class_id作為外鍵,與 class表中的id 產(chǎn)生外鍵約束

輸入 desc studnet; 查看student表的結(jié)構(gòu) class_id對應(yīng)的 default列中的 MUL 表示 外鍵約束

輸入 desc class ; 查看class表的結(jié)構(gòu) 發(fā)現(xiàn)有id值為1的通信101 和id值為2的通信102

第一次插入 id值為100 、名字為張三、電話為1234、班級號為1 第二次插入 id值為101、名字為李四、電話為4567 、班級號為2 兩者都插入成 輸入 select * from student; 查看student表的結(jié)構(gòu)

當(dāng)插入到 3號班級時,因?yàn)?class表中只有1號班級和2號班級 ,并不存在3號班級,所以就會發(fā)生外鍵約束

同樣若想刪除 class 主表中的id值為1的班級 是不可以的,因?yàn)閕d值為1的班級在 student 從表中存在信息

外鍵約束 保證 表跟表之間數(shù)據(jù)做刪除時的邏輯關(guān)系 和數(shù)據(jù)的完整性

先將student從表中的id值為100 1號班級的信息 刪除 再次 就可以刪除掉 class表中的 1號班級了

想要使用外鍵 ,就需要先保證 從表和主表的關(guān)聯(lián)關(guān)系(學(xué)生表 和班級表) 再 產(chǎn)生外鍵約束 (不會在學(xué)生表中插入一個不存在班級的學(xué)生,也不會在刪除 在學(xué)生表中有信息的 班級)

柚子快報激活碼778899分享:數(shù)據(jù)庫 【MySQL】表的約束

http://yzkb.51969.com/

參考閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19030712.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄