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

MySQL數(shù)據(jù)表的常見約束小結(jié)

 更新時間:2024年12月03日 09:34:28   作者:白話Learning  
在數(shù)據(jù)庫設(shè)計中,約束(Constraints)是用于確保數(shù)據(jù)的完整性、準確性和一致性的規(guī)則,MySQL?提供了多種約束類型,幫助我們規(guī)范數(shù)據(jù)存儲,本文給大家介紹了MySQL數(shù)據(jù)表的常見約束,需要的朋友可以參考下

在數(shù)據(jù)庫設(shè)計中,約束(Constraints)是用于確保數(shù)據(jù)的完整性、準確性和一致性的規(guī)則。MySQL 提供了多種約束類型,幫助我們規(guī)范數(shù)據(jù)存儲,并確保其符合預(yù)期的規(guī)則。常見的約束包括 主鍵(Primary Key)、外鍵(Foreign Key)、唯一約束(Unique)、非空約束(Not Null)、默認值(Default) 和 檢查約束(Check)。

1. 主鍵約束(Primary Key)

作用:主鍵是用于唯一標識表中每一行數(shù)據(jù)的列。它不僅要求該列的值是唯一的,而且不能為空(即不允許 NULL)。每個表只能有一個主鍵。

特點:

  • 唯一性:主鍵列中的每個值必須是唯一的。
  • 不允許空值:主鍵列不能包含 NULL 值。
  • 自動索引:MySQL 會自動為主鍵列創(chuàng)建索引,優(yōu)化查詢性能。

示例:

CREATE TABLE employees (
    employee_id INT NOT NULL,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    PRIMARY KEY (employee_id)
);

在上述示例中,employee_id 是主鍵,它唯一標識每個員工記錄,并且不能為 NULL。

2. 外鍵約束(Foreign Key)

作用:外鍵約束用于在兩張表之間建立連接關(guān)系,確保一個表中的某列數(shù)據(jù)必須與另一表中的主鍵或唯一鍵數(shù)據(jù)相匹配。外鍵用于維護數(shù)據(jù)的參照完整性。

特點:

  • 外鍵列的值必須與參照表中的主鍵或唯一列值一致。
  • 外鍵約束可以定義更新或刪除時的級聯(lián)操作,例如:ON DELETE CASCADE 或 ON UPDATE CASCADE。

示例:

CREATE TABLE departments (
    department_id INT NOT NULL,
    department_name VARCHAR(50),
    PRIMARY KEY (department_id)
);

CREATE TABLE employees (
    employee_id INT NOT NULL,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    department_id INT,
    PRIMARY KEY (employee_id),
    FOREIGN KEY (department_id) REFERENCES departments(department_id)
);

在這個例子中,employees 表中的 department_id 列是外鍵,指向 departments 表中的 department_id 列。這確保了每個員工必須隸屬于某個部門。

3. 唯一約束(Unique)

作用:唯一約束確保某一列中的所有值都是唯一的,不允許重復(fù)。與主鍵不同的是,唯一約束允許列中存在 NULL 值,但多個 NULL 值可以存在。

特點:

  • 保證列中所有非 NULL 的值是唯一的。
  • 允許多個 NULL 值(在不同數(shù)據(jù)庫系統(tǒng)中可能有所不同)。

示例:

CREATE TABLE users (
    user_id INT NOT NULL,
    username VARCHAR(50) UNIQUE,
    email VARCHAR(100) UNIQUE,
    PRIMARY KEY (user_id)
);

在上面的表中,username 和 email 列具有唯一約束,確保沒有兩個用戶使用相同的用戶名或郵箱。

4. 非空約束(Not Null)

作用:非空約束確保列中的數(shù)據(jù)不能為 NULL。當定義了 NOT NULL 約束時,插入數(shù)據(jù)時必須為該列提供一個有效的值。

特點:

  • 強制要求列必須有值。
  • 常用于對業(yè)務(wù)邏輯有特殊要求的字段。

示例

CREATE TABLE products (
    product_id INT NOT NULL,
    product_name VARCHAR(100) NOT NULL,
    price DECIMAL(10, 2),
    PRIMARY KEY (product_id)
);

在該示例中,product_name 列不能為 NULL,每個產(chǎn)品必須有名稱。

5. 默認值約束(Default)

作用:默認值約束用于在插入數(shù)據(jù)時為列指定一個默認值。當插入數(shù)據(jù)時沒有提供該列的值時,MySQL 會使用默認值。

特點:

  • 提供一個列的默認值。
  • 如果未指定列的值,數(shù)據(jù)庫將使用默認值。

示例

CREATE TABLE orders (
    order_id INT NOT NULL,
    order_date DATE DEFAULT CURRENT_DATE,
    status VARCHAR(20) DEFAULT 'Pending',
    PRIMARY KEY (order_id)
);

在這個例子中,order_date 列的默認值是當前日期,而 status 列的默認值是 ‘Pending’。

6. 檢查約束(Check)

作用:檢查約束用于限制列中的數(shù)據(jù)必須滿足某個條件。它可以確保插入的數(shù)據(jù)符合特定規(guī)則。此約束在 MySQL 8.0.16 及之后版本中得到了支持。

特點:

  • 強制列中的數(shù)據(jù)符合指定的條件。
  • 可以使用邏輯表達式定義復(fù)雜的條件。

示例:

CREATE TABLE employees (
    employee_id INT NOT NULL,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    age INT,
    salary DECIMAL(10, 2),
    PRIMARY KEY (employee_id),
    CHECK (age >= 18),
    CHECK (salary >= 0)
);

在該表中,age 列的值必須大于等于 18,salary 列的值必須大于等于 0。

7. 邏輯與物理連接性

在數(shù)據(jù)庫中,邏輯連接性和物理連接性是數(shù)據(jù)庫設(shè)計中重要的概念:

邏輯連接性 指的是通過外鍵約束在表之間建立的關(guān)聯(lián)關(guān)系。這些關(guān)聯(lián)定義了數(shù)據(jù)如何在邏輯上被組織和約束。

物理連接性 側(cè)重于數(shù)據(jù)庫表在物理存儲上的關(guān)聯(lián)。例如,數(shù)據(jù)庫可以使用索引來提高查詢效率,尤其是在主鍵和唯一約束下,MySQL 會為這些列自動創(chuàng)建索引。

示例:

CREATE TABLE products (
    product_id INT NOT NULL,
    product_name VARCHAR(100),
    PRIMARY KEY (product_id)
);

CREATE TABLE order_items (
    order_item_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT,
    PRIMARY KEY (order_item_id),
    FOREIGN KEY (product_id) REFERENCES products(product_id)
);

在上述示例中,order_items 表通過 product_id 外鍵與 products 表建立了邏輯上的連接。物理上,MySQL 可能會為 product_id 列創(chuàng)建索引,以加速查詢。

8. 修改約束(ALTER TABLE)

如果在創(chuàng)建表后,需要修改表的約束,可以使用 ALTER TABLE 語句來添加、刪除或修改約束。

示例:添加約束

ALTER TABLE employees
ADD CONSTRAINT chk_age CHECK (age >= 18 AND age <= 65);

示例:刪除約束

ALTER TABLE employees
DROP CONSTRAINT chk_age;

9. 綜合示例:創(chuàng)建完整的訂單系統(tǒng)

結(jié)合前面的約束,以下是一個簡單的訂單系統(tǒng)設(shè)計示例,其中包含主鍵、外鍵、唯一約束、非空約束、默認值和檢查約束:

CREATE TABLE customers (
    customer_id INT NOT NULL,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE,
    phone VARCHAR(15),
    PRIMARY KEY (customer_id)
);

CREATE TABLE products (
    product_id INT NOT NULL,
    product_name VARCHAR(100) NOT NULL,
    price DECIMAL(10, 2) NOT NULL,
    PRIMARY KEY (product_id)
);

CREATE TABLE orders (
    order_id INT NOT NULL,
    customer_id INT NOT NULL,
    order_date DATE DEFAULT CURRENT_DATE,
    status VARCHAR(20) DEFAULT 'Pending',
    PRIMARY KEY (order_id),
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

CREATE TABLE order_items (
    order_item_id INT NOT NULL,
    order_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT CHECK (quantity > 0),
    PRIMARY KEY (order_item_id),
    FOREIGN KEY (order_id) REFERENCES orders(order_id),
    FOREIGN KEY (product_id) REFERENCES products(product_id)
);

在這個系統(tǒng)中:

  • customers 表存儲客戶信息,email 列具有唯一約束,確保每個客戶的郵箱地址唯一。
  • products 表存儲商品信息,每個商品有唯一的 product_id。
  • orders 表記錄客戶訂單,customer_id 是外鍵,指向 customers 表。
  • order_items 表記錄每個訂單的商品,包含外鍵 order_id 和 product_id,并對 quantity 列設(shè)置了檢查約束,確保每個訂單項的商品數(shù)量大于 0。

結(jié)語

通過合理使用 MySQL 中的約束,可以確保數(shù)據(jù)的完整性、正確性和一致性。在設(shè)計數(shù)據(jù)庫時,約束不僅能防止錯誤數(shù)據(jù)的插入,還能提高數(shù)據(jù)查詢和操作的效率。掌握這些約束的使用,將幫助我們在實際項目中構(gòu)建更高質(zhì)量的數(shù)據(jù)庫系統(tǒng)。

以上就是MySQL數(shù)據(jù)表的常見約束小結(jié)的詳細內(nèi)容,更多關(guān)于MySQL數(shù)據(jù)表約束的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mysql配置文件的使用教程

    mysql配置文件的使用教程

    這篇文章主要介紹了mysql配置文件的使用教程,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-10-10
  • MySQL借助DB實現(xiàn)分布式鎖思路詳解

    MySQL借助DB實現(xiàn)分布式鎖思路詳解

    這篇文章主要給大家介紹了關(guān)于MySQL借助DB實現(xiàn)分布式鎖思路的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • MySQL存儲過程未執(zhí)行的問題排查過程

    MySQL存儲過程未執(zhí)行的問題排查過程

    文章講述了對 MySQL 存儲過程未執(zhí)行的問題排查過程,先后排查了數(shù)據(jù)庫版本升級、用戶權(quán)限不足,最終發(fā)現(xiàn)是存儲過程創(chuàng)建時的 SQL 模式導(dǎo)致,即使之后去掉該模式,存儲過程內(nèi)部仍沿用舊模式,重新創(chuàng)建存儲過程后問題解決,需要的朋友可以參考下
    2025-02-02
  • 關(guān)于k8s環(huán)境部署mysql主從的問題

    關(guān)于k8s環(huán)境部署mysql主從的問題

    這篇文章主要介紹了k8s環(huán)境部署mysql主從的問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 關(guān)于skip_name_resolve參數(shù)的總結(jié)分享

    關(guān)于skip_name_resolve參數(shù)的總結(jié)分享

    下面小編就為大家?guī)硪黄P(guān)于skip_name_resolve參數(shù)的總結(jié)分享。小編覺得挺不錯的,現(xiàn)在分享給大家。給大家一個參考。一起跟隨小編過來看看吧
    2016-03-03
  • Mysql8.0密碼問題mysql_native_password和caching_sha2_password詳解

    Mysql8.0密碼問題mysql_native_password和caching_sha2_password詳解

    這篇文章主要介紹了Mysql8.0密碼問題mysql_native_password和caching_sha2_password,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 最全50個Mysql數(shù)據(jù)庫查詢練習(xí)題

    最全50個Mysql數(shù)據(jù)庫查詢練習(xí)題

    這篇文章主要介紹了最全50個數(shù)據(jù)庫查詢練習(xí)題,Mysql數(shù)據(jù)庫版本,全部都驗證過
    2020-12-12
  • MySQL實現(xiàn)批量插入測試數(shù)據(jù)的方式總結(jié)

    MySQL實現(xiàn)批量插入測試數(shù)據(jù)的方式總結(jié)

    在開發(fā)過程中經(jīng)常需要一些測試數(shù)據(jù),?這個時候如果手敲的話,?十行二十行還好,?多了就很死亡了,?接下來介紹兩種常用的MySQL測試數(shù)據(jù)批量生成方式,希望對大家有所幫助
    2023-05-05
  • MySQL添加索引及添加字段并建立索引方式

    MySQL添加索引及添加字段并建立索引方式

    這篇文章主要介紹了MySQL添加索引及添加字段并建立索引方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 淺析MySQL如何實現(xiàn)事務(wù)隔離

    淺析MySQL如何實現(xiàn)事務(wù)隔離

    使用過關(guān)系型數(shù)據(jù)庫的,應(yīng)該都事務(wù)的概念有所了解,知道事務(wù)有 ACID 四個基本屬性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability),今天我們主要來理解一下事務(wù)的隔離性
    2021-06-06

最新評論

英吉沙县| 闵行区| 合肥市| 桂林市| 青铜峡市| 三河市| 宜章县| 安多县| 邯郸县| 阿拉善右旗| 肃南| 霍邱县| 济源市| 喜德县| 嘉义市| 德钦县| 双桥区| 桐城市| 平罗县| 沙雅县| 盐亭县| 长乐市| 大丰市| 屯留县| 大竹县| 乾安县| 刚察县| 榕江县| 周口市| 抚远县| 射洪县| 湘西| 东乡族自治县| 拉孜县| 松滋市| 石泉县| 新建县| 呼图壁县| 类乌齐县| 临颍县| 水富县|