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

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

這篇具有很好參考價值的文章主要介紹了MySQL數(shù)據(jù)庫,數(shù)據(jù)的約束。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

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

目錄

1.數(shù)據(jù)的約束

1.1約束的類型

1.2NULL約束

1.3UNIQUE約束

1.4DEFAULT約束

1.5PRIMARY KEY約束

1.6FOREIGN KEY約束

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

1.數(shù)據(jù)的約束

首先,創(chuàng)建一個名為test的數(shù)據(jù)庫:

mysql> create database test charset utf8;
Query OK, 1 row affected (0.00 sec)

mysql> use test;
Database changed

下方的所有測試表,都是在這個test數(shù)據(jù)庫中進行創(chuàng)建的。


1.1約束的類型

  • NOT NULL - 指定某列不得為NULL(空)
  • UNIQUE - 唯一值,每一列的值都是不同的
  • DEFAULT - 默認值,當這列沒有內容時會給定一個默認值
  • PRIMARY KEY - 主鍵,是NOT NULL和UNIQUE的結合意為不為空的且唯一的,方便我們快速的查找某一信息
  • FOREIGN KEY - 外鍵,保證一個表中的數(shù)據(jù)匹配另一個表中的值的參照完整性

1.2NULL約束

null也就是為空的情況,當我們創(chuàng)建一個表后,表中的數(shù)據(jù)的結構默認都是為null也就是可以什么都不填。當我們把這個表中的某個字段進行not null約束時,這時這個字段就不得為空了。

創(chuàng)建一個測試表mytest1:


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

此時mytest1表的結構為:

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


當我進行插入數(shù)據(jù)時程序是可以正常的進行通過的:

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

此時mytest1表內容為:

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

當我們進行指定列插入,只指定name這一列進行插入時:

mysql> insert into mytest1(name) values('李四');
ERROR 1364 (HY000): Field 'id' doesn't have a default value

出現(xiàn)錯誤ERROR 1364 (HY000): Field 'id' doesn't have a default value,錯誤意為:錯誤1364 (HY000):字段“id”沒有默認值 。因此,當我在創(chuàng)建表的時候把id約束為了not null 那么這個字段就為必填項。通過上述講解,詳細大家已經知道了not null約束的作用了。


1.3UNIQUE約束

unique這個約束意為唯一值,當表中的某個字段被unique約束時。這個字段的任何一行的數(shù)據(jù)都是獨立的,也就是這個表中的每一行數(shù)據(jù)之間都不得相同。

創(chuàng)建一個測試表mytest2:

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

此時mytest2表的結構為:

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

?多行插入,插入兩行數(shù)據(jù):

mysql> insert into mytest2(id,name) values
    -> (1,'張三'),
    -> (2,'李四');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

此時,mytest2表的內容為:

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

?當我們插入這樣一條記錄時:

mysql> insert into mytest2(id,name) values(1,'王五');
ERROR 1062 (23000): Duplicate entry '1' for key 'id'

出現(xiàn)錯誤ERROR 1062 (23000): Duplicate entry '1' for key 'id',錯誤意為:錯誤1062(23000):密鑰“id”的重復條目“1” 。因此,當我們的字段加上unique約束時只得插入唯一的數(shù)據(jù)。


1.4DEFAULT約束

default約束意為默認值,當表中某個字段被default約束時,如果該字段在插入時沒有填入相應的數(shù)據(jù)時,此時該列內顯示的就是被default約束的默認值。

創(chuàng)建一個測試表mytest3:

mysql> create table mytest3(
    -> id int,
    -> name varchar(20) default '阿三');
Query OK, 0 rows affected (0.02 sec)

此時mytest3的表結構為:MySQL數(shù)據(jù)庫,數(shù)據(jù)的約束

插入指定列id:

mysql> insert into mytest3(id) values(1);
Query OK, 1 row affected (0.01 sec)
mysql> select * from mytest3;
+------+------+
| id   | name |
+------+------+
|    1 | 阿三 |
+------+------+
1 row in set (0.00 sec)

通過上述代碼我們可以發(fā)現(xiàn)name默認顯示了阿三這條信息,這就是default的用處,設置某字段的默認值。


1.5PRIMARY KEY約束

primary key約束意為主鍵,這個約束是not null和unique的結合體,也就是當表中某個字段被primary key約束時,這個字段不得為空且不能重復。

創(chuàng)建一個測試表mytest4:

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

MySQL數(shù)據(jù)庫,數(shù)據(jù)的約束?插入三行數(shù)據(jù):

mysql> insert into mytest4(id,name) values
    -> (1,'張三'),
    -> (2,'李四'),
    -> (1,'王五');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

在上述代碼中,第一條數(shù)據(jù)和第三條數(shù)據(jù)的id都相同了。從而提示ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY',意為:錯誤1062(23000):密鑰“主”的重復條目“1” 。因此,當我們把一個字段設置為主鍵primary key時,不得插入相同的數(shù)據(jù)。


此外,當我們想要主鍵以自增的形式存在時,我們可以在primary key 后面上述auto_increment這個語句。創(chuàng)建一個測試表,mytest5:

mysql> create table mytest5(
    -> id int primary key auto_increment,
    -> name varchar(20));
Query OK, 0 rows affected (0.03 sec)

此時mytest5的表結構為:

MySQL數(shù)據(jù)庫,數(shù)據(jù)的約束?指定列插入數(shù)據(jù),插入兩行name:

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

mysql> insert into mytest5(name) values('李四');
Query OK, 1 row affected (0.00 sec)

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

通過上述代碼展示,我們可以看到我們沒有插入id值時,默認插入了兩行主鍵值,并且是以1開始往后自增的。這就是?auto_increment的用處。當然,還有一個特殊的情況,如果插入了一條較大的主鍵時,則自增會以較大的主鍵進行自增。如以下代碼:

mysql> insert into mytest5 values(100,'王五');
Query OK, 1 row affected (0.00 sec)

mysql> insert into mytest5(name) values('趙六');
Query OK, 1 row affected (0.00 sec)

mysql> select * from mytest5;
+-----+------+
| id  | name |
+-----+------+
|   1 | 張三 |
|   2 | 李四 |
| 100 | 王五 |
| 101 | 趙六 |
+-----+------+
4 rows in set (0.00 sec)

我們可以看到,在插入了一條id為100的值后,我再進行指定列name插入數(shù)據(jù),此時的id會默認從100往后自增。因此通過上述展示,我們可以很好了解到表中的某字段主鍵設置為auto_increment后如果按照默認值自增的話,是按照最大值來往后自增的。?


1.6FOREIGN KEY約束

foreign key約束是關聯(lián)兩個或多個表之間結構的約束,我們可以根據(jù)需求設計相應的表結構。語法格式為:foreign key (字段名) references 主表(列)

因此發(fā)出關聯(lián)的表我們稱為子表,被關聯(lián)的表我們稱為父表。關聯(lián)哪些字段也是根據(jù)你的需求來設定的,舉兩個例子:

創(chuàng)建一個班級表classes:

mysql> create table classes(
    -> id int primary key auto_increment
    -> );
Query OK, 0 rows affected (0.05 sec)

classes表的結構為:

mysql> desc classes;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO   | PRI | NULL    | auto_increment |
+-------+---------+------+-----+---------+----------------+
1 row in set (0.00 sec)

創(chuàng)建一個學生表student:

mysql> create table student(
    -> id int primary key auto_increment,
    -> name varchar(20) default '未填寫',
    -> age int,
    -> sex varchar(10),
    -> classes_id int,
    -> foreign key (classes_id) references classes(id)
    -> );
Query OK, 0 rows affected (0.02 sec)

student表的結構為:?

mysql> desc student;
+------------+-------------+------+-----+---------+----------------+
| Field      | Type        | Null | Key | Default | Extra          |
+------------+-------------+------+-----+---------+----------------+
| id         | int(11)     | NO   | PRI | NULL    | auto_increment |
| name       | varchar(20) | YES  |     | 未填寫  |                |
| age        | int(11)     | YES  |     | NULL    |                |
| sex        | varchar(10) | YES  |     | NULL    |                |
| classes_id | int(11)     | YES  | MUL | NULL    |                |
+------------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

經過上述兩個表的創(chuàng)建,此時兩表之間的關系為:student為子表,classes為父表。這樣的關系有什么作用呢?當我們想要對子表student進行增添數(shù)據(jù)或操作時,必須滿足父表classes中的id存在。且student表在增添數(shù)據(jù)時,student中的classes_id必須與classes中的id完全相同??赡苡行╇y理解,我們來看下方的例子與講解。


當我往student這個空表里面增添一行數(shù)據(jù)時:

mysql> insert into student values(1,'張三',20,'男',101);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`classes_id`) REFERENCES `classes` (`id`))

出現(xiàn)了ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`classes_id`) REFERENCES `classes` (`id`))這條錯誤,這條錯誤的意思為:?錯誤1452(23000):不能添加或更新子行:外鍵約束失敗(' test ')。?' student ',約束' student_ibfk_1 '外鍵(' classes_id ')引用' classes ' (' id '))?

因為student表中的classes_id連接了外鍵為classes表中的id,因此我們得保證classes表中的id存在的同時,才能增添數(shù)據(jù)到student表中。因此,我們應該這樣寫代碼:

mysql> insert into classes(id) values
    -> (101),
    -> (102),
    -> (103);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into student values(1,'張三',20,'男',101);
Query OK, 1 row affected (0.00 sec)

上述代碼我們先對classes表插入數(shù)據(jù)后,再才能對student表中插入相應的數(shù)據(jù)。因此一個表通過外鍵連接其他表時候,那么這個表(前者)就是那個表(后者)的子表。在上述兩表中,student作為子表,classes作為父表,所以student表要插入數(shù)據(jù)必需先滿足父表中的相應數(shù)據(jù)。這就是FOREIGN KEY的作用!

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


當然,我們刪除這個兩個表中的數(shù)據(jù)時候也是有先后順序的,我們必須得先刪子表再刪父表。

先刪除父表中數(shù)據(jù):

mysql> delete from classes;
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`test`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`classes_id`) REFERENCES `classes` (`id`))

提示了錯誤:ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`test`. `student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`classes_id`) REFERENCES `classes` (`id`)) 意為:錯誤1451(23000):不能刪除或更新父行:外鍵約束失敗(' test ')。?' student ',約束' student_ibfk_1 '外鍵(' classes_id ')引用' classes ' (' id '))?RAIN

當我們先刪除子表中數(shù)據(jù)保證子表中沒有數(shù)據(jù)關聯(lián)父表時,這個時候就能刪除父表中的數(shù)據(jù)了:

mysql> delete from student;
Query OK, 1 row affected (0.00 sec)

mysql> delete from classes;
Query OK, 3 rows affected (0.00 sec)

可以看到上述代碼正常的運行了,因此當我們想要設計復雜表結構時可以使用FOREIGN KEY這個外鍵約束。


注意,MySQL中的sql語句或者任何字段大小寫不敏感,也就是你可以大寫也可以小寫,因此博主在舉例的時一時是小寫一時是大寫這個不必在意。其次在MySQL實際的開發(fā)中不建議輕易的刪除數(shù)據(jù)庫或者全列查詢數(shù)據(jù)庫這樣的操作是很危險的,我們可以在日常的學習或練習過程中可以安心使用這些指令,到了開發(fā)的時候可不敢輕易刪庫查庫。

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

本期博文到這里就結束了,感謝你的耐心閱讀。碼文不易,如有收獲還請給博主點個小小的關注。文章來源地址http://www.zghlxwxcb.cn/news/detail-419333.html

到了這里,關于MySQL數(shù)據(jù)庫,數(shù)據(jù)的約束的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【SQL Server】數(shù)據(jù)庫開發(fā)指南(二)MSSQL數(shù)據(jù)庫開發(fā)對于庫、表、數(shù)據(jù)類型、約束等相關操作

    本系列博文還在更新中,收錄在專欄:#MS-SQL Server 專欄中。 本系列文章列表如下: 【SQL Server】 Linux 運維下對 SQL Server 進行安裝、升級、回滾、卸載操作 【SQL Server】數(shù)據(jù)庫開發(fā)指南(一)數(shù)據(jù)庫設計的核心概念和基本步驟 【SQL Server】數(shù)據(jù)庫開發(fā)指南(二)MSSQL數(shù)據(jù)庫開發(fā)對

    2023年04月09日
    瀏覽(1749)
  • MySQL數(shù)據(jù)庫 12:約束

    MySQL數(shù)據(jù)庫 12:約束

    在MySQL中, 約束是一種限制數(shù)據(jù)表中列值的規(guī)定 。保證數(shù)據(jù)庫中的數(shù)據(jù)正確,有效性和完整性。MySQL中的約束有以下幾種: 1. 主鍵約束(Primary Key Constraint) :主鍵是用于唯一標識表中每行記錄的列。主鍵約束要求 每個主鍵列的值都是唯一的,且不能為NULL 。一個表只能有一

    2024年02月08日
    瀏覽(23)
  • 【MySQL】數(shù)據(jù)庫的約束

    【MySQL】數(shù)據(jù)庫的約束

    哈嘍,大家好!我是保護小周?,本期為大家?guī)淼氖?MySQL 數(shù)據(jù)庫中對表的約束, 主要有null (空約束),unique(唯一約束),primary key(主鍵約束),default(默認值約束), forelgn key(外鍵約束),check(檢查約束),超多實例講解,通俗易懂。 更多相關知識敬請期待:保護小周? *★,°*:

    2023年04月09日
    瀏覽(22)
  • MySQL:數(shù)據(jù)庫的約束

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

    目錄 1.數(shù)據(jù)庫約束 1.1 非空:not null 1.2 唯一:unique ????????????????1.3 默認值:default 1.4 列描述:comment 1.5?主鍵約束:primary key 1.6?外鍵約束 1.7 綜合案例 2.插入查詢結果 3.聚合函數(shù) 4.group by(分組查詢) 關系型數(shù)據(jù)庫的一個重要功能,就是需要保證數(shù)據(jù)的完整性

    2024年02月05日
    瀏覽(18)
  • MySQL數(shù)據(jù)庫:數(shù)據(jù)庫的約束以及數(shù)據(jù)的聚合、聯(lián)合查詢

    MySQL數(shù)據(jù)庫:數(shù)據(jù)庫的約束以及數(shù)據(jù)的聚合、聯(lián)合查詢

    目錄 一.關系模型的簡要概述 二.數(shù)據(jù)庫的約束? 2.1約束類型 ? ? ? ??2.2NULL約束 2.3?UNIQUE:唯一約束 2.4 默認約束 2.5 PRIMARY KEY:主鍵約束 2.6 FOREIGN KEY:外鍵約束 2.7 CHECK約束 三.高效率查詢 3.1高效率查詢的分類 3.2聚合查詢 3.2.1聚合函數(shù) 3.2.2 GROUP BY子句 3.2.3HAVING 3.3.聯(lián)合查詢

    2024年02月10日
    瀏覽(50)
  • 【MySQL數(shù)據(jù)庫 | 第十二篇】:約束

    【MySQL數(shù)據(jù)庫 | 第十二篇】:約束

    在MySQL中, 約束是一種限制數(shù)據(jù)表中列值的規(guī)定 。保證數(shù)據(jù)庫中的數(shù)據(jù)正確,有效性和完整性。MySQL中的約束有以下幾種: 1. 主鍵約束(Primary Key Constraint) :主鍵是用于唯一標識表中每行記錄的列。主鍵約束要求 每個主鍵列的值都是唯一的,且不能為NULL 。一個表只能有一

    2024年02月08日
    瀏覽(18)
  • 【數(shù)據(jù)庫】MySQL數(shù)據(jù)約束和表關系詳解

    【數(shù)據(jù)庫】MySQL數(shù)據(jù)約束和表關系詳解

    目錄 1.數(shù)據(jù)庫約束 1.1約束類型 1.2NULL約束 1.3UNIQUE:唯一約束 1.4DEFAULT:默認值約束 1.5PRIMARY:主鍵約束 1.6FOREIGH KEY:外鍵約束 2.表的關系 2.1一對一 2.2一對多 2.3多對多 數(shù)據(jù)庫中的數(shù)據(jù)保存在數(shù)據(jù)表中,在表中為了更加準確的存儲數(shù)據(jù),保證數(shù)據(jù)的正確有效,可以在創(chuàng)建表的時候

    2024年02月04日
    瀏覽(21)
  • MySQL數(shù)據(jù)庫基礎(九):SQL約束

    MySQL數(shù)據(jù)庫基礎(九):SQL約束

    文章目錄 SQL約束 一、主鍵約束 二、非空約束 三、唯一約束 四、默認值約束 五、外鍵約束(了解) 六、總結 PRIMARY KEY 約束唯一標識數(shù)據(jù)庫表中的每條記錄。 主鍵必須包含唯一的值。 主鍵列不能包含 NULL 值。 每個表都應該有一個主鍵,并且每個表只能有一個主鍵。 遵循原

    2024年02月19日
    瀏覽(25)
  • 【MySQL】一文帶你了解數(shù)據(jù)庫約束

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

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

    2024年02月08日
    瀏覽(92)
  • {MySQL} 數(shù)據(jù)庫約束& 表的關系& 新增&&刪除& 修改& 查詢

    {MySQL} 數(shù)據(jù)庫約束& 表的關系& 新增&&刪除& 修改& 查詢

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 提示:這里可以添加本文要記錄的大概內容: 承接上文,繼續(xù)講一下MySQL 提示:以下是本篇文章正文內容,下面案例可供參考 NOT NULL - 指示某列不能存儲 NULL 值。 UNIQUE - 保證某列的每行必須有唯一的值

    2024年02月03日
    瀏覽(90)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包