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

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

 更新時間: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ā)高頻考點到配易錯,看完直接能用在項目里

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

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

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

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

MySQL 常用約束一共 8 個:NULL / NOT NULLDEFAULT、COMMENTZEROFILL、PRIMARY KEY、AUTO_INCREMENT、UNIQUE KEY、FOREIGN KEY。

二、空屬性:NULL / NOT NULL

作用

控制字段是否允許為空。

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

關鍵點

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

示例

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

插入時缺了 class_room 直接報錯:

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

三、默認值:DEFAULT

作用

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

示例

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

只插 name,age=0、sex = 男 自動填充:

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

四、列描述:COMMENT

作用

給字段加注釋說明,方便團隊維護。

示例

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

查看注釋

SHOW CREATE TABLE tt12\G

五、零填充:ZEROFILL

作用

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

示例

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

插入 1 → 顯示 00001,實際存儲還是 1。

六、主鍵:PRIMARY KEY

作用

唯一標識一行數(shù)據(jù),約束最強:

  • 不能重復
  • 不能為空
  • 一張表最多一個主鍵

示例

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

復合主鍵

多個字段一起做主鍵,組合唯一:

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

追加 / 刪除主鍵

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

七、自增長:AUTO_INCREMENT

作用

字段不賦值時自動 + 1,通常配合主鍵使用。

特點

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

示例

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

獲取剛插入的自增 ID

SELECT LAST_INSERT_ID();

八、唯一鍵:UNIQUE KEY

作用

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

主鍵 vs 唯一鍵

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

示例

CREATE TABLE student (
    id CHAR(10) UNIQUE COMMENT '學號',
    name VARCHAR(10)
);

九、外鍵:FOREIGN KEY

作用

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

規(guī)則:

  • 從表外鍵的值 必須在主表主鍵里存在
  • 或為 NULL

示例

先建主表(班級):

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

再建從表(學生):

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

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

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

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

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 '單價(分)',
    category VARCHAR(12) COMMENT '類別',
    provider VARCHAR(64) NOT NULL COMMENT '供應商'
);

-- 客戶表
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)
);

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

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

十二、MySQL 約束|表結構修改|數(shù)據(jù)修改 終極對比表

(一眼不混,直接背)

分類作用關鍵字 / 語句示例
1. 字段約束(建表用)給字段定規(guī)則(不能為空、唯一、默認值等)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. 修改表結構(ALTER)改表:加字段、刪字段、改約束、加主鍵ALTER TABLE 表ADD(添加)DROP(刪除)MODIFY(改類型 / 約束)CHANGE(改名 + 改類型)ALTER TABLE t ADD PRIMARY KEY(id);ALTER TABLE t MODIFY name NOT NULL;
3. 修改表中數(shù)據(jù)改表里的內容:增 / 刪 / 改記錄INSERT(插入)UPDATE(修改)DELETE(刪除)INSERT INTO t VALUES (1,' 張三 ');UPDATE t SET name=' 李四 ' WHERE id=1;DELETE FROM t WHERE id=1;

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

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

十三、結束語

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

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

相關文章

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

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

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

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

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

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

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

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

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

    MySQL Cluster集群的初級部署教程

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

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

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

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

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

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

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

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

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

    詳解mysql的limit經典用法及優(yōu)化實例

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

最新評論

柘荣县| 秀山| 惠州市| 儋州市| 长兴县| 连山| 丽水市| 宜宾市| 乌什县| 新绛县| 全州县| 西丰县| 酒泉市| 湛江市| 庆阳市| 铜陵市| 昌乐县| 察雅县| 隆子县| 徐水县| 泰安市| 静安区| 东阿县| 留坝县| 朝阳市| 沙河市| 隆昌县| 会泽县| 钟祥市| 那坡县| 黎川县| 牙克石市| 彰化市| 阳信县| 锦州市| 深州市| 安康市| 连山| 额敏县| 木兰县| 迭部县|