五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

mysql_約束

2023-03-01 18:51 作者:蘇喆i  | 我要投稿

一.基礎(chǔ)知識

1.為什么需要約束??

為了保證數(shù)據(jù)的完整性!

2.什么叫約束?

對表中字段的限制。

3.約束的分類:

4.如何添加/刪除約束?

5,如何查看表中的約束

二.非空約束

在CREATE TABLE時添加約束:

在ALTER TABLE時添加約束:

在ALTER TABLE時刪除約束:

三.唯一性約束

在ALTER TABLE時添加約束

復(fù)合的唯一性約束

UNIQUE KEY 和?UNIQUE的含義是一樣的

刪除唯一性約束

四.PRIMARY KEY 約束(主鍵約束)

關(guān)于復(fù)合主鍵:

五.自增列:AUTO_INCREMENT

MySQL 8.0新特性—自增變量的持久化

1.在MySQL 8.0之前,自增主鍵AUTO_INCREMENT的值如果大于max(primary key)+1,在MySQL重啟后,會重置AUTO_INCREMENT=max(primary key)+1,這種現(xiàn)象在某些情況下會導(dǎo)致業(yè)務(wù)主鍵沖突或者其他難以發(fā) 現(xiàn)的問題。

2.在MySQL 5.7系統(tǒng)中,對于自增主鍵的分配規(guī)則,是由InnoDB數(shù)據(jù)字典 內(nèi)部一個 計數(shù)器 來決定的,而該計數(shù)器只在 內(nèi)存中維護 ,并不會持久化到磁盤中。當(dāng)數(shù)據(jù)庫重啟時,該 計數(shù)器會被初始化。

3.MySQL 8.0將自增主鍵的計數(shù)器持久化到 重做日志 中。每次計數(shù)器發(fā)生改變,都會將其寫入重做日志 中。如果數(shù)據(jù)庫重啟,InnoDB會根據(jù)重做日志中的信息來初始化計數(shù)器的內(nèi)存值。


六.FOREIGN KEY 約束(外鍵約束)

問題1:如果兩個表之間有關(guān)系(一對一、一對多),比如:員工表和部門表(一對多),它們之間是否 一定要建外鍵約束??

答:不是的

問題2:建和不建外鍵約束有什么區(qū)別??

答:建外鍵約束,你的操作(創(chuàng)建表、刪除表、添加、修改、刪除)會受到限制,從語法層面受到限制。例如:在員工表中不可能添加一個員工信息,它的部門的值在部門表中找不到。

不建外鍵約束,你的操作(創(chuàng)建表、刪除表、添加、修改、刪除)不受限制,要保證數(shù)據(jù)的 引用完整性 ,只能依 靠程序員的自覺 ,或者是 在Java程序中進行限定 。例如:在員工表中,可以添加一個員工的 信息,它的部門指定為一個完全不存在的部門。

問題3:那么建和不建外鍵約束和查詢有沒有關(guān)系?

答:沒有

在 MySQL 里,外鍵約束是有成本的,需要消耗系統(tǒng)資源。對于大并發(fā)的 SQL 操作,有可能會不適合。比如大型網(wǎng)站的中央數(shù)據(jù)庫,可能會 因為外鍵約束的系統(tǒng)開銷而變得非常慢 。所以, MySQL 允 許你不使用系統(tǒng)自帶的外鍵約束,在 應(yīng)用層面 完成檢查數(shù)據(jù)一致性的邏輯。也就是說,即使你不用外鍵約束,也要想辦法通過應(yīng)用層面的附加邏輯,來實現(xiàn)外鍵約束的功能,確保數(shù)據(jù)的一致性。

七.CHECK 約束(檢查約束)

八.DEFAULT約束(默認值約束)

九.面試題

面試1、為什么建表時,加 not null default '' 或 default 0?

答:不想讓表中出現(xiàn)null值。

面試2、為什么不想要 null 的值?

答:(1)不好比較。null是一種特殊值,比較時只能用專門的is null 和 is not null來比較。碰到運算符,通 常返回null。?

(2)效率不高。影響提高索引效果。因此,我們往往在建表時 not null default '' 或 default 0

面試3、帶AUTO_INCREMENT約束的字段值是從1開始的嗎??

答:不是,如在表中插入第一 條記錄,同時指定id值為5,則以后插入的記錄的id值就會從6開始往上增加。添加主鍵約束時,往往需要設(shè)置字段自動增加屬性。

面試4、每個表都可以任意選擇存儲引擎??

答:外鍵約束(FOREIGN KEY)不能跨引擎使用。

MySQL支持多種存儲引擎,每一個表都可以指定一個不同的存儲引擎,需要注意的是:外鍵約束是用來 保證數(shù)據(jù)的參照完整性的,如果表之間需要關(guān)聯(lián)外鍵,卻指定了不同的存儲引擎,那么這些表之間是不 能創(chuàng)建外鍵約束的。所以說,存儲引擎的選擇也不完全是隨意的。


mysql_約束的評論 (共 條)

分享到微博請遵守國家法律
呼伦贝尔市| 松江区| 靖远县| 博兴县| 金华市| 崇州市| 华容县| 田阳县| 丹巴县| 乾安县| 湾仔区| 灵台县| 水城县| 应城市| 兰西县| 新余市| 偃师市| 富裕县| 富锦市| 姜堰市| 祁门县| 泌阳县| 赤城县| 西和县| 无棣县| 民丰县| 梓潼县| 七台河市| 成武县| 宁晋县| 临桂县| 彰武县| 麻江县| 辽阳县| 汤原县| 南汇区| 响水县| 肇源县| 阿克| 平湖市| 房山区|