最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

一. 約束概述

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

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

分類:

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

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

二. 約束演示

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

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

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

CREATE TABLE tb_user(
	id int AUTO_INCREMENT PRIMARY KEY COMMENT 'ID唯一標(biāo)識',
	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 '性別'
);	

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

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 介紹

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

我們來看一個例子:

image-20231220104217784

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

注意

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

3.2 語法

添加外鍵

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

刪除外鍵

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

3.3 刪除/更新行為

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

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

具體語法為:

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

???全篇總結(jié)

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

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

相關(guān)文章

  • mysql存儲過程之創(chuàng)建(CREATE PROCEDURE)和調(diào)用(CALL)及變量創(chuàng)建(DECLARE)和賦值(SET)操作方法

    mysql存儲過程之創(chuàng)建(CREATE PROCEDURE)和調(diào)用(CALL)及變量創(chuàng)建(DECLARE)和賦值(SET

    這篇文章主要介紹了mysql存儲過程之創(chuàng)建(CREATE PROCEDURE)和調(diào)用(CALL)及變量創(chuàng)建(DECLARE)和賦值(SET)操作方法,結(jié)合實例形式較為詳細的分析了mysql存儲過程創(chuàng)建、調(diào)用及變量創(chuàng)建、賦值具體原理、操作技巧與相關(guān)注意事項,需要的朋友可以參考下
    2019-12-12
  • 深入了解SQL注入

    深入了解SQL注入

    本篇文章通過SQL和MYSQL的對比,以及SQL注入的原理等方面詳細分析了SQL注入相關(guān)知識點,對此有興趣的朋友學(xué)習(xí)下。
    2018-02-02
  • InnoDB引擎中的事務(wù)詳解

    InnoDB引擎中的事務(wù)詳解

    這篇文章主要介紹了InnoDB引擎中的事務(wù)詳解,事務(wù)Transaction是訪問和更新數(shù)據(jù)庫的程序執(zhí)行單元;事務(wù)中可能包含一個或多個sql語句,這些語句要么都執(zhí)行,要么都不執(zhí)行,需要的朋友可以參考下
    2023-09-09
  • MySQL可重復(fù)讀級別能夠解決幻讀嗎

    MySQL可重復(fù)讀級別能夠解決幻讀嗎

    這篇文章主要給大家介紹了關(guān)于MySQL可重復(fù)讀級別能否解決幻讀的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • MySQL中數(shù)據(jù)視圖操作詳解

    MySQL中數(shù)據(jù)視圖操作詳解

    視圖是從一個或多個表(或視圖)導(dǎo)出的表。視圖一經(jīng)定義,就可以像表一樣被查詢、修改、刪除和更新。本文就來和大家講講MySQL數(shù)據(jù)視圖的一些基本操作,需要的可以參考一下
    2022-08-08
  • MySQL中INSERT INTO的具體使用

    MySQL中INSERT INTO的具體使用

    INSERT INTO 是 MySQL 數(shù)據(jù)庫中非常重要的一種 SQL 命令,用于將新行插入到表中,本文主要介紹了MySQL中INSERT INTO的具體使用,感興趣的可以了解一下
    2024-03-03
  • 數(shù)據(jù)庫類型轉(zhuǎn)換導(dǎo)致SQL不走索引的案例

    數(shù)據(jù)庫類型轉(zhuǎn)換導(dǎo)致SQL不走索引的案例

    在SQL中數(shù)據(jù)類型轉(zhuǎn)換是基礎(chǔ)且關(guān)鍵的操作,分為隱式和顯式轉(zhuǎn)換,隱式轉(zhuǎn)換由系統(tǒng)自動完成,雖便捷但可能帶來性能損耗、索引失效及數(shù)據(jù)準(zhǔn)確性風(fēng)險,這篇文章主要介紹了數(shù)據(jù)庫類型轉(zhuǎn)換導(dǎo)致SQL不走索引的案例,需要的朋友可以參考下
    2026-05-05
  • 使用Visual Studio Code連接MySql數(shù)據(jù)庫并進行查詢

    使用Visual Studio Code連接MySql數(shù)據(jù)庫并進行查詢

    這篇文章主要介紹了使用Visual Studio Code連接MySql數(shù)據(jù)庫并進行查詢,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • MySQL Workbench導(dǎo)入sql文件保姆級教程

    MySQL Workbench導(dǎo)入sql文件保姆級教程

    本文主要介紹了MySQL Workbench導(dǎo)入sql文件保姆級教程,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • Mysql中LAST_INSERT_ID()的函數(shù)使用詳解

    Mysql中LAST_INSERT_ID()的函數(shù)使用詳解

    從名字可以看出,LAST_INSERT_ID即為最后插入的ID值,有了這個實用的函數(shù),我們可以實現(xiàn)很多問題,下面我們就來深入探討下。
    2015-03-03

最新評論

华容县| 大足县| 涞源县| 平果县| 宁蒗| 禹城市| 滦平县| 沭阳县| 洛隆县| 揭阳市| 金乡县| 中西区| 武功县| 鸡泽县| 腾冲县| 凌云县| 理塘县| 镇宁| 清徐县| 忻城县| 德惠市| 巫溪县| 德保县| 仁布县| 永靖县| 天长市| 麻城市| 南丹县| 惠来县| 黑河市| 西丰县| 潮州市| 苍南县| 黄大仙区| 报价| 宁强县| 洪洞县| 集贤县| 调兵山市| 桃江县| 兰考县|