国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【MySQL】一文帶你了解數(shù)據(jù)庫(kù)約束

這篇具有很好參考價(jià)值的文章主要介紹了【MySQL】一文帶你了解數(shù)據(jù)庫(kù)約束。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 約束類型

作用:
數(shù)據(jù)庫(kù)約束是用于限制數(shù)據(jù)輸入或數(shù)據(jù)更新的規(guī)則。數(shù)據(jù)庫(kù)約束確保在表中只能插入符合規(guī)則的數(shù)據(jù),以確保數(shù)據(jù)的完整性和一致性。
常見的數(shù)據(jù)庫(kù)約束包括:

  1. 主鍵約束:用于唯一標(biāo)識(shí)表中的每一行數(shù)據(jù),確保數(shù)據(jù)唯一性和完整性。

  2. 外鍵約束:用于確保表之間數(shù)據(jù)的關(guān)系正確性,保證引用表中的數(shù)據(jù)必須存在于被引用的表中。

  3. 非空約束:用于確保列中的值不為空。

  4. 唯一約束:用于確保列中的值不重復(fù)。

  5. 默認(rèn)約束:用于設(shè)置默認(rèn)值,當(dāng)插入數(shù)據(jù)時(shí)如果未提供該值,則數(shù)據(jù)庫(kù)將使用默認(rèn)值。

  6. 檢查約束:用于確保列中的值符合特定的條件或表達(dá)式。

  7. 觸發(fā)器約束:用于在特定情況下自動(dòng)執(zhí)行操作,如插入或刪除數(shù)據(jù)時(shí)執(zhí)行某項(xiàng)操作。

2.PRIMARY KEY:主鍵約束

概念:
主鍵約束是一種用于限制表中唯一標(biāo)識(shí)每行記錄的數(shù)據(jù)庫(kù)約束。主鍵約束可以確保表中每行的唯一性,并且可以作為其他表與該表之間關(guān)系的依據(jù)。每個(gè)表只能有一個(gè)主鍵約束,主鍵約束的值必須是唯一的且不為空。
主鍵約束可以在創(chuàng)建表時(shí)定義,也可以在已有表上添加。
舉例:
1.在創(chuàng)建一個(gè)名為"student"的表時(shí),可以給"id"列定義主鍵約束。
【MySQL】一文帶你了解數(shù)據(jù)庫(kù)約束
這個(gè)時(shí)候,當(dāng)我們添加元素的時(shí)候,id的值就必須唯一并且不為空。
【MySQL】一文帶你了解數(shù)據(jù)庫(kù)約束
>2.當(dāng)表已經(jīng)創(chuàng)建好,表中并沒有任何一列進(jìn)行主鍵約束,我們還可以通過下面這種方式進(jìn)行主鍵約束。
【MySQL】一文帶你了解數(shù)據(jù)庫(kù)約束
注意
這種約束方式并不如前者,而且當(dāng)想要約束的列,有null或者有重復(fù)元素的時(shí)候,會(huì)主鍵約束失敗。
【MySQL】一文帶你了解數(shù)據(jù)庫(kù)約束

上面用到的代碼:

mysql> create table student(id int primary key, name varchar(10));
Query OK, 0 rows affected (0.02 sec)

mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> insert into values(null,'張三');
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'values(null,'張三')' at line 1
mysql> insert into student values(null,'張三');
ERROR 1048 (23000): Column 'id' cannot be null
mysql> insert into student values('張三');
ERROR 1136 (21S01): Column count doesn't match value count at row 1
mysql> insert into student values(1,'張三');
Query OK, 1 row affected (0.01 sec)

mysql> insert into student values(1,'李四');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> insert into student values(2,'李四');
Query OK, 1 row affected (0.01 sec)

mysql> select * from student;
+----+------+
| id | name |
+----+------+
|  1 | 張三 |
|  2 | 李四 |
+----+------+
2 rows in set (0.00 sec)

3.FOREIGN KEY:外鍵約束

概念:
外鍵約束是一種用于保持表之間數(shù)據(jù)一致性的約束,它建立了兩個(gè)表之間的一對(duì)多關(guān)系。外鍵約束確保了一個(gè)表中的數(shù)據(jù)必須和另一個(gè)表中的數(shù)據(jù)相關(guān)聯(lián),否則就會(huì)觸發(fā)約束錯(cuò)誤。
外鍵約束也可以在創(chuàng)建表時(shí)定義或者在已有表上添加。
舉例:
外鍵約束也可以在創(chuàng)建表時(shí)定義或者在已有表上添加。
下圖定義了一個(gè)外鍵約束:
【MySQL】一文帶你了解數(shù)據(jù)庫(kù)約束
外鍵約束通常用于將兩個(gè)表之間建立一對(duì)多關(guān)系,上面圖中,student表中的class_id列是一個(gè)外鍵,它關(guān)聯(lián)到了class表中的id列。這個(gè)外鍵約束確保student表中的class_id列的值只能從class表中的id列中的值中選擇,如果沒有,則報(bào)錯(cuò)。
【MySQL】一文帶你了解數(shù)據(jù)庫(kù)約束

上面用到的代碼:

mysql> create table class(id int primary key, name varchar(10));
Query OK, 0 rows affected (0.01 sec)

mysql> create table student(id int primary key, name varchar(20), class_id int,
    -> foreign key (class_id) references class(id));
Query OK, 0 rows affected (0.02 sec)

mysql> desc student;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int(11)     | NO   | PRI | NULL    |       |
| name     | varchar(20) | YES  |     | NULL    |       |
| class_id | int(11)     | YES  | MUL | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> insert into class values(1, '軟件工程'),(2, '計(jì)科');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> insert into student values(20211,'張三',1);
Query OK, 1 row affected (0.01 sec)

mysql> insert into student values(20212,'李四',2);
Query OK, 1 row affected (0.01 sec)

mysql> insert into student values(20213,'王五',3);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`xiaoc`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `class` (`id`))

4.NOT NULL:非空約束

概念:
非空約束是一種用于確保列中的值不為空的約束。如果為某個(gè)列定義了非空約束,那么在插入或更新數(shù)據(jù)時(shí)必須為該列提供一個(gè)非空值,否則就會(huì)觸發(fā)非空約束錯(cuò)誤。
舉例:
在創(chuàng)建表時(shí),可以為某個(gè)列定義非空約束。
下面的代碼定義了一個(gè)名為student的表,其中的id列被定義為非空約束:
【MySQL】一文帶你了解數(shù)據(jù)庫(kù)約束
這個(gè)時(shí)候如果插入空的元素就會(huì)報(bào)錯(cuò)。
【MySQL】一文帶你了解數(shù)據(jù)庫(kù)約束

上面用到的代碼:

mysql> create table student(id int not null, name varchar(10));
Query OK, 0 rows affected (0.01 sec)

mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

mysql> insert into student values(1,'張三');
Query OK, 1 row affected (0.01 sec)

mysql> insert into student values(null,'李四');
ERROR 1048 (23000): Column 'id' cannot be null
mysql> insert into student values('李四');

5.UNIQUE:唯一約束

概念:
唯一約束是一種用于確保某個(gè)列中的值唯一的約束。如果為某個(gè)列定義了唯一約束,那么該列中的值必須是唯一的,不允許有重復(fù)值。唯一約束可以用于確保表中某一列或多列的組合中沒有重復(fù)值。
舉例:
在創(chuàng)建表時(shí),可以為某個(gè)列定義唯一約束。
下面的代碼定義了一個(gè)名為users的表,其中的email列被定義為唯一約束:
【MySQL】一文帶你了解數(shù)據(jù)庫(kù)約束
上述例子中,student表中的id列被定義為唯一約束,因此,任何向student表插入數(shù)據(jù)的操作,都必須確保id列中的值是唯一的。
【MySQL】一文帶你了解數(shù)據(jù)庫(kù)約束

上面用到的代碼:

mysql> create table student(id int unique,name varchar(20));
Query OK, 0 rows affected (0.02 sec)

mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  | UNI | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> insert into student values(1,'張三');
Query OK, 1 row affected (0.01 sec)

mysql> insert into student values(2,'李四');
Query OK, 1 row affected (0.01 sec)

mysql> insert into student values(2,'威威');
ERROR 1062 (23000): Duplicate entry '2' for key 'id'

5.DEFAULT:默認(rèn)值約束

概念:
默認(rèn)值約束是指在向表中插入新行時(shí),如果沒有為某個(gè)列指定具體的值,則該列會(huì)使用預(yù)定義的默認(rèn)值。默認(rèn)值可以是任何常量或表達(dá)式,例如字符串、數(shù)字、日期等。如果某個(gè)列定義了默認(rèn)值約束,則在執(zhí)行INSERT操作時(shí),如果沒有為該列指定具體值,則會(huì)自動(dòng)使用默認(rèn)值。
舉例:
在創(chuàng)建表時(shí),可以為某個(gè)列指定默認(rèn)值約束。例如,下面的代碼創(chuàng)建了一個(gè)名為student的表,其中的name列被定義為默認(rèn)值約束:
【MySQL】一文帶你了解數(shù)據(jù)庫(kù)約束
當(dāng)插入null.
【MySQL】一文帶你了解數(shù)據(jù)庫(kù)約束

上面用到的代碼:

mysql> create table student(id int, name varchar(10) default '陌路人');
Query OK, 0 rows affected (0.02 sec)

mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | 陌路人  |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> insert into student(id) values(1),(2);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> insert into student values(3,'張三');
Query OK, 1 row affected (0.01 sec)

mysql> select * from student;
+------+--------+
| id   | name   |
+------+--------+
|    1 | 陌路人 |
|    2 | 陌路人 |
|    3 | 張三   |
+------+--------+
3 rows in set (0.00 sec)

6.總結(jié)

數(shù)據(jù)庫(kù)約束是數(shù)據(jù)庫(kù)設(shè)計(jì)中的重要概念,它可以有效地保障數(shù)據(jù)的完整性、一致性、準(zhǔn)確性和安全性,幫助開發(fā)人員更好地管理和維護(hù)數(shù)據(jù),所以掌握約束還是非常重要的。
以上就是常用的約束,下次見!文章來源地址http://www.zghlxwxcb.cn/news/detail-482523.html

到了這里,關(guān)于【MySQL】一文帶你了解數(shù)據(jù)庫(kù)約束的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 一文帶你了解MySQL之約束

    一文帶你了解MySQL之約束

    在SQL標(biāo)準(zhǔn)中,一共規(guī)定了6種不同的約束, 包括非空約束,唯一約束和檢查約束等,而在MySQL中是不支持檢查約束的,所以這篇文章先對(duì)其余5種約束做一個(gè)詳解和練習(xí)。 約束是作用于表中列上的規(guī)則,用于限制加入表的數(shù)據(jù)。 例如,作為主鍵的列一定是非空的唯一的,否則將

    2024年02月07日
    瀏覽(28)
  • MySQL的約束類型、數(shù)據(jù)庫(kù)操作、數(shù)據(jù)表操作大全(簡(jiǎn)述)

    目錄 一.數(shù)據(jù)庫(kù)的操作語法 二.MySQL數(shù)據(jù)庫(kù)約束 三.數(shù)據(jù)類型 四.數(shù)據(jù)表操作 作者簡(jiǎn)介: ?tq02,一個(gè)想成為編程高手的夢(mèng)中人 作者主頁(yè): ?tq02的博客_CSDN博客-C語言,Java,Java數(shù)據(jù)結(jié)構(gòu)領(lǐng)域博主 學(xué)習(xí)專欄:? ??? MySQL基礎(chǔ)? ? ? ? ? ?? ?JavaSE??????????????? ?? ??C語言 本

    2024年02月12日
    瀏覽(93)
  • 【從刪庫(kù)到跑路】一文帶你明白MySQL數(shù)據(jù)庫(kù)的 事務(wù) 操作

    【從刪庫(kù)到跑路】一文帶你明白MySQL數(shù)據(jù)庫(kù)的 事務(wù) 操作

    ??專欄【MySQL】 ??喜歡的詩(shī)句:更喜岷山千里雪 三軍過后盡開顏。 ??音樂分享【如愿】 大一同學(xué)小吉,歡迎并且感謝大家指出我的問題?? 建議大家先看目錄 是一組操作的集合,它是一個(gè)不可分割的工作單位,事務(wù)會(huì)把所有的操作作為一個(gè)整體一起向系統(tǒng)提交或撤銷操作

    2024年02月13日
    瀏覽(94)
  • 【JAVA】一文帶你了解java的數(shù)據(jù)類型與變量

    作者主頁(yè):paper jie的博客 本文作者:大家好,我是paper jie,感謝你閱讀本文,歡迎一建三連哦。 本文錄入于《JAVASE語法系列》專欄,本專欄是針對(duì)于大學(xué)生,編程小白精心打造的。筆者用重金(時(shí)間和精力)打造,將javaSE基礎(chǔ)知識(shí)一網(wǎng)打盡,希望可以幫到讀者們哦。 其他專欄

    2024年02月14日
    瀏覽(23)
  • 【MySQL】一文帶你了解數(shù)據(jù)過濾

    【MySQL】一文帶你了解數(shù)據(jù)過濾

    ?? 博客主頁(yè):博主鏈接 ?? 本文由 M malloc 原創(chuàng),首發(fā)于 CSDN?? ?? 學(xué)習(xí)專欄推薦:LeetCode刷題集! ?? 歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? 如有錯(cuò)誤敬請(qǐng)指正! ?? 未來很長(zhǎng),值得我們?nèi)Ρ几案篮玫纳? ??大家好呀,今天是我第N次寫MySQL,也是最近才學(xué)習(xí)MySQL,也想著記錄

    2024年02月09日
    瀏覽(24)
  • 【MySQL】一文帶你了解檢索數(shù)據(jù)

    【MySQL】一文帶你了解檢索數(shù)據(jù)

    ?? 博客主頁(yè):博主鏈接 ?? 本文由 M malloc 原創(chuàng),首發(fā)于 CSDN?? ?? 學(xué)習(xí)專欄推薦:LeetCode刷題集! ?? 歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? 如有錯(cuò)誤敬請(qǐng)指正! ?? 未來很長(zhǎng),值得我們?nèi)Ρ几案篮玫纳? ------------------??分割線??------------------------- —————————

    2024年02月09日
    瀏覽(20)
  • 【MySQL】一文帶你了解過濾數(shù)據(jù)

    【MySQL】一文帶你了解過濾數(shù)據(jù)

    ?? 博客主頁(yè):博主鏈接 ?? 本文由 M malloc 原創(chuàng),首發(fā)于 CSDN?? ?? 學(xué)習(xí)專欄推薦:LeetCode刷題集! ?? 歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? 如有錯(cuò)誤敬請(qǐng)指正! ?? 未來很長(zhǎng),值得我們?nèi)Ρ几案篮玫纳? ??大家好呀,今天是我第N次寫MySQL,也是最近才學(xué)習(xí)MySQL,也想著記錄

    2024年02月09日
    瀏覽(26)
  • 一文帶你了解MySQL之InnoDB 數(shù)據(jù)頁(yè)結(jié)構(gòu)

    一文帶你了解MySQL之InnoDB 數(shù)據(jù)頁(yè)結(jié)構(gòu)

    前言 學(xué)完了記錄結(jié)構(gòu),我們?cè)搶W(xué)數(shù)據(jù)頁(yè)的結(jié)構(gòu),前邊我們簡(jiǎn)單的提了一下頁(yè)的概念,它是Innodb管理存儲(chǔ)空間的基本單位,頁(yè)的大小默認(rèn)16KB,InnoDB為了不同的目的而設(shè)計(jì)了許多種不同類型的頁(yè),比如存放表空間頭部信息的頁(yè),存放Insert Buffer信息的頁(yè),存放INODE信息的頁(yè),存放

    2024年02月06日
    瀏覽(14)
  • MySQL數(shù)據(jù)庫(kù),數(shù)據(jù)的約束

    MySQL數(shù)據(jù)庫(kù),數(shù)據(jù)的約束

    目錄 1.數(shù)據(jù)的約束 1.1約束的類型 1.2NULL約束 1.3UNIQUE約束 1.4DEFAULT約束 1.5PRIMARY KEY約束 1.6FOREIGN KEY約束 首先,創(chuàng)建一個(gè)名為test的數(shù)據(jù)庫(kù): 下方的所有測(cè)試表,都是在這個(gè)test數(shù)據(jù)庫(kù)中進(jìn)行創(chuàng)建的。 NOT NULL - 指定某列不得為NULL(空) UNIQUE - 唯一值,每一列的值都是不同的 DEFAULT -

    2023年04月20日
    瀏覽(46)
  • MySQL 數(shù)據(jù)庫(kù)約束

    MySQL 數(shù)據(jù)庫(kù)約束

    目錄 一、數(shù)據(jù)庫(kù)約束? 1、約束類型 二、NULL 約束 三、unique 約束 四、default 約束 五、primary key 約束 自增主鍵 六、foreign key 外鍵約束 七、check 約束 我們使用數(shù)據(jù)庫(kù)來存儲(chǔ)數(shù)據(jù),一般是希望這里存儲(chǔ)的數(shù)據(jù)是靠譜的,那么如何來保證數(shù)據(jù)是否靠譜呢? 那么MySQL就提供了一些機(jī)

    2024年02月15日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包