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

MySQL中約束的實(shí)現(xiàn)示例

 更新時(shí)間:2024年03月28日 10:26:47   作者:嶼小夏  
本文主要介紹了MySQL中約束的實(shí)現(xiàn)示例,包括非空約束、唯一約束、主鍵約束、默認(rèn)約束、檢查約束和外鍵約束,具有一定的參考價(jià)值,感興趣的可以了解一下

前言

數(shù)據(jù)庫(kù)中的約束是確保數(shù)據(jù)完整性和準(zhǔn)確性的重要手段。通過(guò)對(duì)數(shù)據(jù)表字段的約束設(shè)置,可以限制數(shù)據(jù)的取值范圍、確保數(shù)據(jù)的唯一性以及建立表與表之間的關(guān)聯(lián)關(guān)系。本文將深入介紹MySQL中的各種約束類型及其使用方法,包括非空約束、唯一約束、主鍵約束、默認(rèn)約束、檢查約束和外鍵約束,以及如何在創(chuàng)建表和修改表時(shí)添加約束,以及外鍵約束的相關(guān)知識(shí)。

一. 約束概述

概念:約束是作用于表中字段上的規(guī)則,用于限制存儲(chǔ)在表中的數(shù)據(jù)。

目的:保證數(shù)據(jù)庫(kù)中數(shù)據(jù)的正確、有效性和完整性。

分類:

約束描述關(guān)鍵字
非空約束限制該字段的數(shù)據(jù)不能為nullNOT NULL
唯一約束保證該字段的所有數(shù)據(jù)都是唯一、不重復(fù)的UNIQUE
主鍵約束主鍵是一行數(shù)據(jù)的唯一標(biāo)識(shí),要求非空且唯一PRIMARY KEY
默認(rèn)約束保存數(shù)據(jù)時(shí),如果未指定該字段的值,則采用默認(rèn)值DEFAULT
檢查約束(8.0.16版本 之后)保證字段值滿足某一個(gè)條件CHECK
外鍵約束用來(lái)讓兩張表的數(shù)據(jù)之間建立連接,保證數(shù)據(jù)的一致 性和完整性FOREIGN KEY

注意:約束是作用于表中字段上的,可以在創(chuàng)建表/修改表的時(shí)候添加約束 。

二. 約束演示

如何在創(chuàng)建表、修改表的時(shí)候來(lái)指定約束呢,接下來(lái)我們就通過(guò)一個(gè)案例,來(lái)演示一下。

字段名字段含 義字段類型約束條件約束關(guān)鍵字
idID唯一 標(biāo)識(shí)int主鍵,并且自動(dòng)增長(zhǎng)PRIMARY KEY, AUTO_INCREMENT
name姓名varchar(10)不為空,并且唯一NOT NULL , UNIQUE
age年齡int大于0,并且小于等 于120CHECK
status狀態(tài)char(1)如果沒有指定該值, 默認(rèn)為1DEFAULT
gender性別char(1)無(wú)

對(duì)應(yīng)的建表語(yǔ)句為:

CREATE TABLE tb_user(
	id int AUTO_INCREMENT PRIMARY KEY COMMENT 'ID唯一標(biāo)識(shí)',
	name varchar(10) NOT NULL UNIQUE COMMENT '姓名' ,
	age int check (age > 0 && age <= 120) COMMENT '年齡' ,
	status char(1) default '1' COMMENT '狀態(tài)',
	gender char(1) COMMENT '性別'
);	

在為字段添加約束時(shí),我們只需要在字段之后加上約束的關(guān)鍵字即可,需要關(guān)注其語(yǔ)法。我們執(zhí)行上面的SQL把表結(jié)構(gòu)創(chuàng)建完成,然后接下來(lái),就可以通過(guò)一組數(shù)據(jù)進(jìn)行測(cè)試,從而驗(yàn)證一下,約束是否可以生效。

insert into tb_user(name,age,status,gender) values ('Tom1',19,'1','男'),
('Tom2',25,'0','男');
insert into tb_user(name,age,status,gender) values ('Tom3',19,'1','男');
insert into tb_user(name,age,status,gender) values (null,19,'1','男');
insert into tb_user(name,age,status,gender) values ('Tom3',19,'1','男');
insert into tb_user(name,age,status,gender) values ('Tom4',80,'1','男');
insert into tb_user(name,age,status,gender) values ('Tom5',-1,'1','男');
insert into tb_user(name,age,status,gender) values ('Tom5',121,'1','男');
insert into tb_user(name,age,gender) values ('Tom5',120,'男');

三. 外鍵約束

3.1 介紹

外鍵:用來(lái)讓兩張表的數(shù)據(jù)之間建立連接,從而保證數(shù)據(jù)的一致性和完整性。

我們來(lái)看一個(gè)例子:

image-20231220104217784

左側(cè)的emp表是員工表,里面存儲(chǔ)員工的基本信息,包含員工的ID、姓名、年齡、職位、薪資、入職日期、上級(jí)主管ID、部門ID,在員工的信息中存儲(chǔ)的是部門的ID dept_id,而這個(gè)部門的ID是關(guān)聯(lián)的部門表dept的主鍵id,那emp表的dept_id就是外鍵,關(guān)聯(lián)的是另一張表的主鍵。

注意

目前上述兩張表,只是在邏輯上存在這樣一層關(guān)系;在數(shù)據(jù)庫(kù)層面,并未建立外鍵關(guān)聯(lián),所以是無(wú)法保證數(shù)據(jù)的一致性和完整性的。

3.2 語(yǔ)法

添加外鍵

CREATE TABLE 表名(
	字段名 數(shù)據(jù)類型,
	...
	[CONSTRAINT] [外鍵名稱] FOREIGN KEY (外鍵字段名) REFERENCES 主表 (主表列名)
);
ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段名)REFERENCES 主表 (主表列名) ;

刪除外鍵

ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱;

3.3 刪除/更新行為

添加了外鍵之后,再刪除父表數(shù)據(jù)時(shí)產(chǎn)生的約束行為,我們就稱為刪除/更新行為。具體的刪除/更新行為有以下幾種:

行為說(shuō)明
NO ACTION當(dāng)在父表中刪除/更新對(duì)應(yīng)記錄時(shí),首先檢查該記錄是否有對(duì)應(yīng)外鍵,如果有則不 允許刪除/更新。 (與 RESTRICT 一致) 默認(rèn)行為
RESTRICT當(dāng)在父表中刪除/更新對(duì)應(yīng)記錄時(shí),首先檢查該記錄是否有對(duì)應(yīng)外鍵,如果有則不 允許刪除/更新。 (與 NO ACTION 一致) 默認(rèn)行為
CASCADE當(dāng)在父表中刪除/更新對(duì)應(yīng)記錄時(shí),首先檢查該記錄是否有對(duì)應(yīng)外鍵,如果有,則 也刪除/更新外鍵在子表中的記錄。
SET NULL當(dāng)在父表中刪除對(duì)應(yīng)記錄時(shí),首先檢查該記錄是否有對(duì)應(yīng)外鍵,如果有則設(shè)置子表 中該外鍵值為null(這就要求該外鍵允許取null)。
SET DEFAULT父表有變更時(shí),子表將外鍵列設(shè)置成一個(gè)默認(rèn)的值 (Innodb不支持)

具體語(yǔ)法為:

ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段) REFERENCES 主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;

???全篇總結(jié)

本文詳細(xì)介紹了MySQL中的各種約束類型及其語(yǔ)法,包括約束的概念、分類、使用方法和外鍵約束的相關(guān)知識(shí)。通過(guò)學(xué)習(xí)本文,讀者可以掌握如何在數(shù)據(jù)庫(kù)設(shè)計(jì)和管理中靈活運(yùn)用約束,從而保證數(shù)據(jù)的完整性和準(zhǔn)確性,提高數(shù)據(jù)庫(kù)的穩(wěn)定性和安全性。

到此這篇關(guān)于MySQL中約束的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)MySQL 約束內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(二)--顯示寬度

    與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(二)--顯示寬度

    MYSQL中的整數(shù)型數(shù)據(jù)類型都可以指定顯示寬度,而SQLSERVER不行
    2014-06-06
  • MySQL 5.5的max_allowed_packet屬性的修改方法

    MySQL 5.5的max_allowed_packet屬性的修改方法

    今天在部署一個(gè)實(shí)驗(yàn)系統(tǒng)的時(shí)候,報(bào)錯(cuò)提示需要修改一下MySQL的配置文件,在修改的時(shí)候是有技巧的,大家可以參考下本文嘗試操作下
    2013-08-08
  • Windows 10系統(tǒng)下徹底刪除卸載MySQL的方法教程

    Windows 10系統(tǒng)下徹底刪除卸載MySQL的方法教程

    mysql數(shù)據(jù)庫(kù)的重新安裝是一個(gè)麻煩的問(wèn)題,很難卸除干凈,下面這篇文章主要給大家介紹了關(guān)于在Windows 10系統(tǒng)下徹底刪除卸載MySQL的方法教程,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-07-07
  • C#編寫方法實(shí)例

    C#編寫方法實(shí)例

    在下面的練習(xí)中,將創(chuàng)建一個(gè)應(yīng)用程序,它包含的一個(gè)方法能夠計(jì)算一名顧問(wèn)的收費(fèi)金額——假定該顧問(wèn)每天收取固定的費(fèi)用,將根據(jù)工作了多少天來(lái)收費(fèi)。首先要開發(fā)應(yīng)用程序的邏輯,然后利用“生成方法存根向?qū)А眮?lái)寫出這個(gè)邏輯使用的方法。接著,我們將在一個(gè)控制臺(tái)應(yīng)用程序中運(yùn)行方法,以獲得對(duì)該程序的最終印象。最后,我們將使用Visual Studio 2005調(diào)試器來(lái)檢查方法調(diào)用。
    2008-04-04
  • MySQL數(shù)據(jù)庫(kù)如何開啟遠(yuǎn)程連接(多備份)

    MySQL數(shù)據(jù)庫(kù)如何開啟遠(yuǎn)程連接(多備份)

    多備份服務(wù)器在備份你的數(shù)據(jù)庫(kù)時(shí),必須能夠遠(yuǎn)程連接上你的數(shù)據(jù)庫(kù)。但是一般來(lái)說(shuō)mysql安裝時(shí)都是關(guān)閉遠(yuǎn)程連接的,因此,需要你開通mysql數(shù)據(jù)庫(kù)的遠(yuǎn)程訪問(wèn)權(quán)限。那么如何開啟呢
    2015-01-01
  • 詳細(xì)分析mysql MDL元數(shù)據(jù)鎖

    詳細(xì)分析mysql MDL元數(shù)據(jù)鎖

    這篇文章主要介紹了mysql MDL元數(shù)據(jù)鎖的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-08-08
  • 解決mysql的int型主鍵自增問(wèn)題

    解決mysql的int型主鍵自增問(wèn)題

    這篇文章主要介紹了解決mysql的int型主鍵自增問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 解析mysql中的auto_increment的問(wèn)題

    解析mysql中的auto_increment的問(wèn)題

    本篇文章是對(duì)mysql中的auto_increment的問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • CentOS安裝mysql5.7 及簡(jiǎn)單配置教程詳解

    CentOS安裝mysql5.7 及簡(jiǎn)單配置教程詳解

    這篇文章主要介紹了CentOS安裝mysql5.7 及簡(jiǎn)單配置教程詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-02-02
  • 聊一聊MyISAM和InnoDB的區(qū)別

    聊一聊MyISAM和InnoDB的區(qū)別

    這篇文章主要介紹了聊一聊MyISAM和InnoDB的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08

最新評(píng)論