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

一文系統(tǒng)梳理MySQL數(shù)據(jù)庫(kù)中表的約束

 更新時(shí)間:2026年05月12日 09:11:20   作者:重生之小比特  
本文系統(tǒng)梳理了MySQL表的8種約束,即NULL/NOT NULL,DEFAULT,COMMENT,ZEROFILL,PRIMARY KEY,AUTO_INCREMENT,UNIQUE KEY和FOREIGN KEY,從開發(fā)高頻考點(diǎn)到配易錯(cuò),看完直接能用在項(xiàng)目里

今天這篇博客,我把 MySQL 里表的約束從頭到尾梳理一遍,全部是面試、開發(fā)高頻考點(diǎn),配案例、配語(yǔ)法、配易錯(cuò)點(diǎn),看完直接能用在項(xiàng)目里。

一、什么是表約束?為什么要用?

數(shù)據(jù)類型只能做最基礎(chǔ)的限制,但業(yè)務(wù)里要求更嚴(yán)格:比如郵箱不能重復(fù)、姓名不能為空、學(xué)號(hào)必須唯一、成績(jī)不能為負(fù)……

約束 = 給字段加 “規(guī)則”,從業(yè)務(wù)層面保證數(shù)據(jù)合法、正確、不混亂。

MySQL 常用約束一共 8 個(gè):NULL / NOT NULL、DEFAULT、COMMENT、ZEROFILLPRIMARY KEY、AUTO_INCREMENT、UNIQUE KEYFOREIGN KEY。

二、空屬性:NULL / NOT NULL

作用

控制字段是否允許為空。

  • NULL:允許為空(默認(rèn))
  • NOT NULL:不允許為空

關(guān)鍵點(diǎn)

  • 空值無(wú)法參與運(yùn)算:1 + NULL = NULL
  • 實(shí)際開發(fā)盡量用 NOT NULL,數(shù)據(jù)更可靠

示例

CREATE TABLE myclass(
    class_name VARCHAR(20) NOT NULL,
    class_room VARCHAR(10) NOT NULL
);

插入時(shí)缺了 class_room 直接報(bào)錯(cuò):

ERROR 1364 : Field 'class_room' doesn't have a default value

三、默認(rèn)值:DEFAULT

作用

插入數(shù)據(jù)時(shí)不指定該字段,自動(dòng)使用預(yù)設(shè)值。

示例

CREATE TABLE tt10 (
    name VARCHAR(20) NOT NULL,
    age TINYINT UNSIGNED DEFAULT 0,
    sex CHAR(2) DEFAULT '男'
);

只插 name,age=0、sex = 男 自動(dòng)填充:

INSERT INTO tt10(name) VALUES('zhangsan');

四、列描述:COMMENT

作用

給字段加注釋說(shuō)明,方便團(tuán)隊(duì)維護(hù)。

示例

CREATE TABLE tt12 (
    name VARCHAR(20) NOT NULL COMMENT '姓名',
    age TINYINT UNSIGNED DEFAULT 0 COMMENT '年齡'
);

查看注釋

SHOW CREATE TABLE tt12\G

五、零填充:ZEROFILL

作用

數(shù)字不足指定位數(shù)時(shí),前面補(bǔ) 0,只影響顯示,不影響存儲(chǔ)。

示例

ALTER TABLE tt3 CHANGE a a INT(5) UNSIGNED ZEROFILL;

插入 1 → 顯示 00001,實(shí)際存儲(chǔ)還是 1

六、主鍵:PRIMARY KEY

作用

唯一標(biāo)識(shí)一行數(shù)據(jù),約束最強(qiáng):

  • 不能重復(fù)
  • 不能為空
  • 一張表最多一個(gè)主鍵

示例

CREATE TABLE tt13 (
    id INT UNSIGNED PRIMARY KEY COMMENT '學(xué)號(hào)',
    name VARCHAR(20) NOT NULL
);

復(fù)合主鍵

多個(gè)字段一起做主鍵,組合唯一:

CREATE TABLE tt14(
    id INT UNSIGNED,
    course CHAR(10),
    PRIMARY KEY(id, course)
);

追加 / 刪除主鍵

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

七、自增長(zhǎng):AUTO_INCREMENT

作用

字段不賦值時(shí)自動(dòng) + 1,通常配合主鍵使用。

特點(diǎn)

  • 必須是索引列
  • 必須是整數(shù)
  • 一張表最多一個(gè)自增

示例

CREATE TABLE tt21(
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(10) NOT NULL DEFAULT ''
);

獲取剛插入的自增 ID

SELECT LAST_INSERT_ID();

八、唯一鍵:UNIQUE KEY

作用

保證字段業(yè)務(wù)不重復(fù),但允許為 NULL。

主鍵 vs 唯一鍵

  • 主鍵:不能為空,一張表一個(gè)
  • 唯一鍵:可以為空,一張表多個(gè)

示例

CREATE TABLE student (
    id CHAR(10) UNIQUE COMMENT '學(xué)號(hào)',
    name VARCHAR(10)
);

九、外鍵:FOREIGN KEY

作用

約束表與表之間的關(guān)系,保證數(shù)據(jù)邏輯一致。

規(guī)則:

  • 從表外鍵的值 必須在主表主鍵里存在
  • 或?yàn)?NULL

示例

先建主表(班級(jí)):

CREATE TABLE myclass (
    id INT PRIMARY KEY,
    name VARCHAR(30) NOT NULL
);

再建從表(學(xué)生):

CREATE TABLE stu (
    id INT PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    class_id INT,
    FOREIGN KEY (class_id) REFERENCES myclass(id)
);

插入不存在的班級(jí) ID 直接報(bào)錯(cuò),保證數(shù)據(jù)不亂。

十、綜合實(shí)戰(zhàn):商城三表設(shè)計(jì)(高頻面試題)

商品表、客戶表、訂單表,一次寫完主外鍵 + 所有約束:

CREATE DATABASE IF NOT EXISTS mall DEFAULT CHARSET utf8;
USE mall;

-- 商品表
CREATE TABLE goods(
    goods_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '商品ID',
    goods_name VARCHAR(32) NOT NULL COMMENT '商品名',
    unitprice INT NOT NULL DEFAULT 0 COMMENT '單價(jià)(分)',
    category VARCHAR(12) COMMENT '類別',
    provider VARCHAR(64) NOT NULL COMMENT '供應(yīng)商'
);

-- 客戶表
CREATE TABLE customer(
    customer_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '客戶ID',
    name VARCHAR(32) NOT NULL COMMENT '姓名',
    address VARCHAR(256) COMMENT '地址',
    email VARCHAR(64) UNIQUE COMMENT '郵箱',
    sex ENUM('男','女') NOT NULL COMMENT '性別',
    card_id CHAR(18) UNIQUE COMMENT '身份證'
);

-- 訂單表
CREATE TABLE purchase(
    order_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '訂單ID',
    customer_id INT COMMENT '客戶ID',
    goods_id INT COMMENT '商品ID',
    nums INT DEFAULT 0 COMMENT '數(shù)量',
    FOREIGN KEY (customer_id) REFERENCES customer(customer_id),
    FOREIGN KEY (goods_id) REFERENCES goods(goods_id)
);

十一、高頻考點(diǎn)速記(面試必背)

  1. NOT NULL 不能為空,DEFAULT 提供默認(rèn)值
  2. COMMENT 是注釋,ZEROFILL 只補(bǔ) 0 不改變存儲(chǔ)
  3. 主鍵唯一且非空,一張表一個(gè)
  4. 自增長(zhǎng)必須是整數(shù)、索引列
  5. 唯一鍵允許 NULL,可建多個(gè)
  6. 外鍵保證表關(guān)系合法,主表必須有主鍵 / 唯一鍵

十二、MySQL 約束|表結(jié)構(gòu)修改|數(shù)據(jù)修改 終極對(duì)比表

(一眼不混,直接背)

分類作用關(guān)鍵字 / 語(yǔ)句示例
1. 字段約束(建表用)給字段定規(guī)則(不能為空、唯一、默認(rèn)值等)NOT  NULL   DEFAULT  COMMENT  ZERO  FILL   PRIMARY KEY  AUTO_INCREMENT    UNIQUE  KEY  FOREIGN  KEYname VARCHAR(20) NOT NULLage INT DEFAULT 0id INT PRIMARY KEY AUTO_INCREMENT
2. 修改表結(jié)構(gòu)(ALTER)改表:加字段、刪字段、改約束、加主鍵ALTER TABLE 表ADD(添加)DROP(刪除)MODIFY(改類型 / 約束)CHANGE(改名 + 改類型)ALTER TABLE t ADD PRIMARY KEY(id);ALTER TABLE t MODIFY name NOT NULL;
3. 修改表中數(shù)據(jù)改表里的內(nèi)容:增 / 刪 / 改記錄INSERT(插入)UPDATE(修改)DELETE(刪除)INSERT INTO t VALUES (1,' 張三 ');UPDATE t SET name=' 李四 ' WHERE id=1;DELETE FROM t WHERE id=1;

最核心記憶口訣(背會(huì)永不混)

  • 約束:管字段規(guī)則(NOT NULL / PRIMARY KEY 等)
  • ALTER:管表結(jié)構(gòu)(加字段、改約束、加主鍵)
  • INSERT / UPDATE / DELETE:管表里的數(shù)據(jù)

十三、結(jié)束語(yǔ)

MySQL 約束看似多,其實(shí)邏輯非常統(tǒng)一:都是為了管住數(shù)據(jù),不讓臟數(shù)據(jù)進(jìn)庫(kù)。開發(fā)時(shí)先想清楚字段規(guī)則,再建表,后面少填無(wú)數(shù)坑。

以上就是一文系統(tǒng)梳理MySQL數(shù)據(jù)庫(kù)中表的約束的詳細(xì)內(nèi)容,更多關(guān)于MySQL表約束的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Django創(chuàng)建項(xiàng)目+連通mysql的操作方法

    Django創(chuàng)建項(xiàng)目+連通mysql的操作方法

    這篇文章主要介紹了Django創(chuàng)建項(xiàng)目+連通mysql的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • MySQL定時(shí)刪除XX天數(shù)據(jù)示例代碼

    MySQL定時(shí)刪除XX天數(shù)據(jù)示例代碼

    通過(guò)使用MySQL的事件調(diào)度器,我們可以方便地創(chuàng)建定時(shí)任務(wù)來(lái)定期清理數(shù)據(jù)庫(kù)中的過(guò)期數(shù)據(jù),本文介紹了如何創(chuàng)建定時(shí)任務(wù)以及如何刪除3個(gè)月前的數(shù)據(jù)作為示例,感興趣的朋友跟隨小編一起看看吧
    2023-09-09
  • MySQL數(shù)據(jù)庫(kù)被鎖定的問題解決

    MySQL數(shù)據(jù)庫(kù)被鎖定的問題解決

    本文主要介紹了MySQL數(shù)據(jù)庫(kù)被鎖定的問題解決方法,包括通過(guò)刷新錯(cuò)誤連接、修改max_connection_errors的數(shù)量、執(zhí)行flush?host或者?mysqladmin?flush-hosts等方式進(jìn)行解決,感興趣的可以了解一下
    2024-10-10
  • Mysql大表修改字段兩種解決方式

    Mysql大表修改字段兩種解決方式

    這篇文章主要給大家介紹了關(guān)于Mysql大表修改字段的兩種解決方式,文中介紹了在處理平臺(tái)幣訂單表字段類型修改時(shí)遇到的問題及解決方案,需要的朋友可以參考下
    2024-11-11
  • MySQL Cluster集群的初級(jí)部署教程

    MySQL Cluster集群的初級(jí)部署教程

    這篇文章主要介紹了MySQL Cluster集群的初級(jí)部署教程, MySql Cluster可以利用充分利用節(jié)點(diǎn)服務(wù)器的多進(jìn)程做到高可用,需要的朋友可以參考下
    2016-02-02
  • 如何使用mysql查詢24小時(shí)數(shù)據(jù)

    如何使用mysql查詢24小時(shí)數(shù)據(jù)

    在進(jìn)行實(shí)時(shí)數(shù)據(jù)處理時(shí),我們常常需要查詢最近24小時(shí)的數(shù)據(jù)來(lái)進(jìn)行分析和處理,下面我們將介紹如何使用MySQL查詢最近24小時(shí)的數(shù)據(jù),需要的朋友可以參考下
    2023-07-07
  • mysql8.0忘記密碼修改與net命令服務(wù)名無(wú)效問題

    mysql8.0忘記密碼修改與net命令服務(wù)名無(wú)效問題

    這篇文章主要介紹了mysql8.0忘記密碼修改與net命令服務(wù)名無(wú)效的問題與解決方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • MySQL數(shù)據(jù)庫(kù)定時(shí)備份的實(shí)現(xiàn)方法

    MySQL數(shù)據(jù)庫(kù)定時(shí)備份的實(shí)現(xiàn)方法

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)的定時(shí)備份的相關(guān)知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • mysql ifnull不起作用原因分析以及解決

    mysql ifnull不起作用原因分析以及解決

    這篇文章主要介紹了mysql ifnull不起作用原因分析以及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 詳解mysql的limit經(jīng)典用法及優(yōu)化實(shí)例

    詳解mysql的limit經(jīng)典用法及優(yōu)化實(shí)例

    這篇文章詳細(xì)介紹了mysql的limit經(jīng)典用法及優(yōu)化實(shí)例,有需要的朋友可以參考一下
    2013-09-09

最新評(píng)論

南城县| 林州市| 兴宁市| 桂平市| 衡阳县| 澜沧| 石楼县| 揭西县| 正镶白旗| 迁西县| 满城县| 仙居县| 商都县| 卓尼县| 新宾| 德令哈市| 万州区| 右玉县| 日土县| 淅川县| 沛县| 沛县| 青海省| 揭西县| 金川县| 突泉县| 郓城县| 九寨沟县| 深圳市| 舒城县| 元朗区| 北安市| 谷城县| 上思县| 泾川县| 广饶县| 沙洋县| 定陶县| 苍梧县| 甘孜县| 萨嘎县|