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

一文帶你了解MySQL之約束

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

一文帶你了解MySQL之約束

在SQL標(biāo)準(zhǔn)中,一共規(guī)定了6種不同的約束,包括非空約束,唯一約束和檢查約束等,而在MySQL中是不支持檢查約束的,所以這篇文章先對其余5種約束做一個(gè)詳解和練習(xí)。


1. 約束的概念

約束是作用于表中列上的規(guī)則,用于限制加入表的數(shù)據(jù)。例如,作為主鍵的列一定是非空的唯一的,否則將無法對數(shù)據(jù)進(jìn)行區(qū)分。約束的存在保證了數(shù)據(jù)庫中數(shù)據(jù)的正確性、有效性和完整性。所以約束在數(shù)據(jù)庫設(shè)計(jì)中是非常重要的。

2. 約束的分類

前面說到SQL標(biāo)準(zhǔn)把約束分為了6大類,分別是非空約束,唯一約束,主鍵約束,檢查約束,默認(rèn)約束和外鍵約束,添加約束時(shí)我們只需要在SQL中添加關(guān)鍵詞,便可以限制表中的數(shù)據(jù)。

約束類型 功能
非空約束 NOT NULL 保證列中所有的數(shù)據(jù)不能有null值
唯一約束 UNIQUE 保證列中所有數(shù)據(jù)各不相同
主鍵約束 PRIMARY KEY 主鍵是一行數(shù)據(jù)的唯一標(biāo)識(shí),要求非空且唯一
檢查約束 CHECK 保證列中的值滿足某一條件
默認(rèn)約束 DEFAULT 保存數(shù)據(jù)時(shí),未指定值則采用默認(rèn)值
外鍵約束 FOREIGN KEY 外鍵用來讓兩個(gè)表的數(shù)據(jù)之間建立鏈接,保證數(shù)據(jù)的一致性和完整性

3. 非空約束

目的:保證列中所有的數(shù)據(jù)不能有null值

添加約束:

CREATE TABLE 表名(
	列名 數(shù)據(jù)類型 NOT NULL,);

建完表后添加非空約束:

ALTER TABLE 表名 MODIFY 字段名 數(shù)據(jù)類型 NOT NULL;

刪除約束:

ALTER TABLE 表名 MODIFY 字段名 數(shù)據(jù)類型;

4. 唯一約束

目的:保證列中所有數(shù)據(jù)各不相同

添加約束:

CREATE TABLE 表名(
	列名 數(shù)據(jù)類型 UNIQUE [AUTO_INCREMENT],
	-- AUTO_INCREMENT: 當(dāng)不指定值時(shí)自動(dòng)增長);

CREATE TABLE 表名(
	列名 數(shù)據(jù)類型,[CONSTRAINT] [約束名稱] UNIQUE(列名)
);

建完表后添加唯有約束:

ALTER TABLE 表名 MODIFY 字段名 數(shù)據(jù)類型 UNIQUE;

刪除約束:

ALTER TABLE 表名 DROP INDEX 字段名;

5. 主鍵約束

目的:主鍵是一行數(shù)據(jù)的唯一標(biāo)識(shí),要求非空且唯一

添加約束:

CREATE TABLE 表名(
	列名 數(shù)據(jù)類型 PRIMARY KEY [AUTO_INCREMENT],);

CREATE TABLE 表名(
	列名 數(shù)據(jù)類型,
	[CONSTRAINT] [約束名稱] PRIMARY KEY(列名)
);

建完表后添加主鍵約束:

ALTER TABLE 表名 ADD PRIMARY KEY(字段名);

刪除約束:

ALTER TABLE 表名 DROP PRIMARY KEY;

6. 默認(rèn)約束

目的:保存數(shù)據(jù)時(shí),未指定值則采用默認(rèn)值

添加約束:

CREATE TABLE 表名(
	列名 數(shù)據(jù)類型 DEFAULT 默認(rèn)值,);

建完表后添加默認(rèn)約束:

ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默認(rèn)值;

刪除約束:

ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;

7. 外鍵約束

當(dāng)我們添加了外鍵以后,就在數(shù)據(jù)庫層面建立了兩張表的關(guān)系。

目的:外鍵用來讓兩個(gè)表的數(shù)據(jù)之間建立鏈接,保證數(shù)據(jù)的一致性和完整性

添加約束:

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

建完表后添加外鍵約束:

ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段名稱) REFERENCES 主表名稱(主表列名稱);

刪除約束:

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

7. 約束的案例練習(xí)

首先,我們使用以下的案例來練習(xí)約束:

-- 刪除stu表
drop table if exists stu;
-- 創(chuàng)建stu表
CREATE TABLE stu (
id int primary key, -- 編號(hào) 主鍵
name varchar(10)  not null unique, -- 姓名 非空,唯一
age int not null, -- 年齡 非空
gender varchar(5) not null, -- 性別 非空
math double(5,2) not null, -- 數(shù)學(xué)成績  非空
english double(5,2) default 0 -- 英語成績 默認(rèn)為0
);

一文帶你了解MySQL之約束

驗(yàn)證主鍵約束,其特點(diǎn)是非空且唯一,先添加一條數(shù)據(jù):

insert into stu(id,name,age,gender,math,english) values(1,'小張',23,'男',66,78);

添加第二條數(shù)據(jù)時(shí),嘗試 id 添加為空值:

insert into stu(id,name,age,gender,math,english) values (null,'小李',20,'女',98,87);

一文帶你了解MySQL之約束

嘗試 id 添加為重復(fù)的值:

insert into stu(id,name,age,gender,math,english) values (1,'小陳',55,'男',56,77);

一文帶你了解MySQL之約束我們已經(jīng)驗(yàn)證了主鍵約束,當(dāng)我們添加不合法的數(shù)據(jù)時(shí),添加失敗。

驗(yàn)證非空約束:

當(dāng)我們添加以下的數(shù)據(jù)時(shí):

insert into stu(id,name,age,gender,math,english) values (2,NULL,20,'女',76,65);

一文帶你了解MySQL之約束
驗(yàn)證唯一約束:

當(dāng)我們添加以下的數(shù)據(jù)時(shí):

insert into stu(id,name,age,gender,math,english) values 
(5,'小張',20,'男',86,NULL);

一文帶你了解MySQL之約束驗(yàn)證默認(rèn)約束:

當(dāng)我們添加以下的數(shù)據(jù)時(shí):

insert into stu(id,name,age,gender,math) values (6,'小趙',23,'男',99);

一文帶你了解MySQL之約束

驗(yàn)證外鍵約束:

我們使用一下的案例來驗(yàn)證外鍵約束:

-- 刪除表
DROP TABLE IF EXISTS emp;
DROP TABLE IF EXISTS dept;
-- 部門表
CREATE TABLE dept(
id int primary key auto_increment,
dep_name varchar(20),
addr varchar(20)
);
-- 員工表
CREATE TABLE emp(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int,
-- 添加外鍵 dep_id,關(guān)聯(lián) dept 表的id主鍵
CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id)
);

此時(shí),我們在員工表中添加了外鍵,相當(dāng)于在數(shù)據(jù)庫層面上建立了兩張表的關(guān)系,此時(shí)如果員工表中有員工 a ,他屬于 1 號(hào)部門,那么我們想要?jiǎng)h除部門表中的 1 號(hào)部門就會(huì)刪除失敗,因?yàn)閱T工 a 是屬于 1 號(hào)部門的,此時(shí)兩張表建立了關(guān)系。

一文帶你了解MySQL之約束添加數(shù)據(jù):

-- 添加 2 個(gè)部門
insert into dept(dep_name,addr) values
('研發(fā)部','西安'),('銷售部', '成都');
-- 添加員工,dep_id 表示員工所在的部門
INSERT INTO emp (NAME, age, dep_id) VALUES
('張三', 20, 1),
('李四', 20, 2);

此時(shí)想要是刪除銷售部門時(shí),發(fā)現(xiàn)刪除失敗。

一文帶你了解MySQL之約束文章來源地址http://www.zghlxwxcb.cn/news/detail-469980.html

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    2024年02月09日
    瀏覽(25)
  • 一文帶你了解MySQL之連接原理

    一文帶你了解MySQL之連接原理

    前言 我們搞數(shù)據(jù)庫一個(gè)都避不開的概念就是 連接 ( join )。相信很多小伙伴初學(xué)連接的時(shí)候有些一臉懵,理解了連接的語義之后又可能搞不明白各個(gè)表中的記錄到底是怎么連起來的,以至于在后期使用數(shù)據(jù)庫的時(shí)候常常陷入下邊兩種誤區(qū): 誤區(qū)一 :業(yè)務(wù)至上,不管三七二

    2024年02月05日
    瀏覽(24)
  • 【MySQL】一文帶你徹底了解事務(wù)機(jī)制

    【MySQL】一文帶你徹底了解事務(wù)機(jī)制

    我們設(shè)想一個(gè)場景,這個(gè)場景中我們需要插入多條相關(guān)聯(lián)的數(shù)據(jù)到數(shù)據(jù)庫,不幸的是,這個(gè)過程可能會(huì)遇到下面這些問題: 數(shù)據(jù)庫中途突然因?yàn)槟承┰驋斓袅恕?客戶端突然因?yàn)榫W(wǎng)絡(luò)原因連接不上數(shù)據(jù)庫了。 并發(fā)訪問數(shù)據(jù)庫時(shí),多個(gè)線程同時(shí)寫入數(shù)據(jù)庫,覆蓋了彼此的更改

    2024年02月09日
    瀏覽(15)
  • 【MySQL】一文帶你了解MySQL中的子查詢

    【MySQL】一文帶你了解MySQL中的子查詢

    子查詢指一個(gè)查詢語句嵌套在另一個(gè)查詢語句內(nèi)部的查詢,這個(gè)特性從MySQL 4.1開始引入 。 SQL 中子查詢的使用大大增強(qiáng)了 SELECT 查詢的能力 ,因?yàn)楹芏鄷r(shí)候查詢需要從結(jié)果集中獲取數(shù)據(jù),或者需要從同一個(gè)表中先計(jì)算得出一個(gè)數(shù)據(jù)結(jié)果,然后與這個(gè)數(shù)據(jù)結(jié)果(可能是某個(gè)標(biāo)量

    2024年02月08日
    瀏覽(27)
  • 【MySQL】一文帶你了解MySQL的基礎(chǔ)知識(shí)

    【MySQL】一文帶你了解MySQL的基礎(chǔ)知識(shí)

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

    2024年02月08日
    瀏覽(23)
  • 一文帶你了解MySQL之redo日志

    一文帶你了解MySQL之redo日志

    前言 本文以及接下來的幾篇文章將會(huì)頻繁的使用到我們前邊嘮叨的 InnoDB記錄行格式 、 頁面格式 、 索引原理 、 表空間的組成 等各種基礎(chǔ)知識(shí),如果大家對這些東西理解的不透徹,那么閱讀下邊的文字可能會(huì)特別的些費(fèi)力,為保證您能正常的理解,請確保自己已經(jīng)掌握了我

    2024年02月08日
    瀏覽(20)
  • 一文帶你了解MySQL之undo日志

    一文帶你了解MySQL之undo日志

    我們在前邊學(xué)習(xí)事務(wù)的時(shí)候說過事務(wù)需要保證 原子性 ,也就是 事務(wù)中的操作要么全做,要么全不做 。但是有的時(shí)候事務(wù)會(huì)出現(xiàn)一些情況,比如: 情況一: 事務(wù)執(zhí)行過程中可能遇到各種錯(cuò)誤,比如服務(wù)器本身的錯(cuò)誤,操作系統(tǒng)錯(cuò)誤,甚至是突然斷電導(dǎo)致的錯(cuò)誤 情況二:程序

    2024年02月07日
    瀏覽(24)
  • 一文帶你了解MySQL之InnoDB表空間

    一文帶你了解MySQL之InnoDB表空間

    前言 通過前邊的內(nèi)容,相信大家都知道了表空間是一個(gè)抽象的概念,對于系統(tǒng)表空間來說,對應(yīng)著文件系統(tǒng)中 一個(gè)或多個(gè) 實(shí)際文件;對于每個(gè)獨(dú)立表空間來說,對應(yīng)著文件系統(tǒng)中 一個(gè) 名為表名 .ibd 的實(shí)際文件。 大家可以把表空間想象成被切分為許多個(gè)頁的池子,當(dāng)我們想

    2024年02月08日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包