欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一篇文章帶你了解MySQL數(shù)據(jù)庫約束

 更新時(shí)間:2023年06月12日 10:11:22   作者:是小辰  
數(shù)據(jù)庫中要管理很多數(shù)據(jù),但是這些數(shù)據(jù)是否正確、是否非法,光靠人力來檢驗(yàn)是遠(yuǎn)遠(yuǎn)不夠的,因此我們想讓數(shù)據(jù)庫擁有豐富的檢驗(yàn)和校驗(yàn)?zāi)芰?所以便引入了約束,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫約束的相關(guān)資料,需要的朋友可以參考下

1. 約束類型

作用:

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

常見的數(shù)據(jù)庫約束包括:

  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ù)庫將使用默認(rèn)值。
  6. 檢查約束:用于確保列中的值符合特定的條件或表達(dá)式。
  7. 觸發(fā)器約束:用于在特定情況下自動(dòng)執(zhí)行操作,如插入或刪除數(shù)據(jù)時(shí)執(zhí)行某項(xiàng)操作。

2.PRIMARY KEY:主鍵約束

概念:

主鍵約束是一種用于限制表中唯一標(biāo)識(shí)每行記錄的數(shù)據(jù)庫約束。主鍵約束可以確保表中每行的唯一性,并且可以作為其他表與該表之間關(guān)系的依據(jù)。每個(gè)表只能有一個(gè)主鍵約束,主鍵約束的值必須是唯一的且不為空。

主鍵約束可以在創(chuàng)建表時(shí)定義,也可以在已有表上添加。

舉例:

1.在創(chuàng)建一個(gè)名為"student"的表時(shí),可以給"id"列定義主鍵約束。

主鍵約束

這個(gè)時(shí)候,當(dāng)我們添加元素的時(shí)候,id的值就必須唯一并且不為空。

主鍵舉例

>2.當(dāng)表已經(jīng)創(chuàng)建好,表中并沒有任何一列進(jìn)行主鍵約束,我們還可以通過下面這種方式進(jìn)行主鍵約束。

約束

注意

這種約束方式并不如前者,而且當(dāng)想要約束的列,有null或者有重復(fù)元素的時(shí)候,會(huì)主鍵約束失敗。

失敗

上面用到的代碼:

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è)外鍵約束:

外鍵

外鍵約束通常用于將兩個(gè)表之間建立一對(duì)多關(guān)系,上面圖中,student表中的class_id列是一個(gè)外鍵,它關(guān)聯(lián)到了class表中的id列。這個(gè)外鍵約束確保student表中的class_id列的值只能從class表中的id列中的值中選擇,如果沒有,則報(bào)錯(cuò)。

約束

上面用到的代碼:

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列被定義為非空約束:

非空約束

這個(gè)時(shí)候如果插入空的元素就會(huì)報(bào)錯(cuò)。

非空?qǐng)?bào)錯(cuò)

上面用到的代碼:

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列被定義為唯一約束:

唯一

上述例子中,student表中的id列被定義為唯一約束,因此,任何向student表插入數(shù)據(jù)的操作,都必須確保id列中的值是唯一的。

唯一報(bào)錯(cuò)

上面用到的代碼:

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)值約束:

默認(rèn)

當(dāng)插入null.

默認(rèn)值

上面用到的代碼:

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ù)庫約束是數(shù)據(jù)庫設(shè)計(jì)中的重要概念,它可以有效地保障數(shù)據(jù)的完整性、一致性、準(zhǔn)確性和安全性,幫助開發(fā)人員更好地管理和維護(hù)數(shù)據(jù),所以掌握約束還是非常重要的。

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

相關(guān)文章

  • Redis與MySQL如何保證雙寫一致性詳解

    Redis與MySQL如何保證雙寫一致性詳解

    雙寫一致性指的是當(dāng)我們更新了數(shù)據(jù)庫的數(shù)據(jù)之后redis中的數(shù)據(jù)?也要同步去更新,本文主要給大家詳細(xì)介紹了Redis與MySQL雙寫一致性如何保證,需要的朋友可以參考下
    2023-09-09
  • MySQL DDL 引發(fā)的同步延遲該如何解決

    MySQL DDL 引發(fā)的同步延遲該如何解決

    這篇文章主要介紹了MySQL DDL 引發(fā)的同步延遲該如何解決,幫助大家更好的理解和學(xué)習(xí)使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-05-05
  • workerman寫mysql連接池的實(shí)例代碼

    workerman寫mysql連接池的實(shí)例代碼

    在本篇文章中小編給大家分享的是一篇關(guān)于workerman寫mysql連接池的實(shí)例代碼內(nèi)容,有需要的朋友們可以參考下。
    2020-01-01
  • MySQL開啟事務(wù)的方式

    MySQL開啟事務(wù)的方式

    本篇文章給大家分享MySQL 是如何開啟一個(gè)事務(wù)的,原文通過兩種方式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-06-06
  • SQL查詢表字段信息詳細(xì)圖文教程

    SQL查詢表字段信息詳細(xì)圖文教程

    最近工作用到SQL語句查詢表中所有字段的名稱,下面這篇文章主要給大家介紹了關(guān)于SQL查詢表字段信息的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • MySQL如何生成唯一的server-id

    MySQL如何生成唯一的server-id

    這篇文章主要給大家介紹了關(guān)于MySQL如何生成唯一的server-id的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Linux下二進(jìn)制方式安裝mysql5.7版本和系統(tǒng)優(yōu)化的步驟

    Linux下二進(jìn)制方式安裝mysql5.7版本和系統(tǒng)優(yōu)化的步驟

    這篇文章主要介紹了Linux下二進(jìn)制方式安裝mysql5.7版本和系統(tǒng)優(yōu)化的步驟,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • mysql 批處理文件出錯(cuò)后繼續(xù)執(zhí)行的實(shí)現(xiàn)方法

    mysql 批處理文件出錯(cuò)后繼續(xù)執(zhí)行的實(shí)現(xiàn)方法

    下面小編就為大家?guī)硪黄猰ysql 批處理文件出錯(cuò)后繼續(xù)執(zhí)行的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-10-10
  • 修改Mysql索引長(zhǎng)度限制解決767?byte限制問題

    修改Mysql索引長(zhǎng)度限制解決767?byte限制問題

    這篇文章主要介紹了修改Mysql索引長(zhǎng)度限制解決767?byte限制問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • mysql常用命令行操作語句

    mysql常用命令行操作語句

    MySQL很早以前只能采用DOS式界面,后來雖然硬件支持圖形界面(平常的軟件操作界面),但是命令行界面(就是DOS界面)以它 簡(jiǎn)單,高效,方便 的特色而被保留下來。這就是用DOS界面的原因。
    2016-05-05

最新評(píng)論