MySQL——约束基础

一、概述

在数据库设计中,约束是用于确保数据的准确性和一致性的规则。MySQL支持多种约束,如主键约束、唯一约束、非空约束、检查约束和外键约束等。这些约束可以确保数据的完整性,防止无效或冗余数据的产生。

二、约束演示

主键约束(PRIMARY KEY)

  • 保证字段的唯一性,并且不允许为NULL。
  • 一个表只能有一个主键。

示例:

CREATE TABLE employees (  
  id INT PRIMARY KEY,  
  name VARCHAR(50),  
  age INT  
);

在上面的示例中,id列被指定为主键列。

唯一约束(UNIQUE)

唯一约束确保列中的每个值都是唯一的。与主键不同,一个表可以有多个唯一约束,但每个唯一约束作用于不同的列。唯一约束允许列中包含空值。

示例:

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

在上面的示例中,usernameemail列都被指定为唯一约束列。

非空约束(NOT NULL)

非空约束确保列中的值不能为NULL。它要求插入或更新数据时,必须为该列提供一个非空值。

示例:

CREATE TABLE orders (  
  order_id INT PRIMARY KEY,  
  customer_id INT NOT NULL,  
  order_date DATE NOT NULL  
);

在上面的示例中,customer_idorder_date列都被指定为非空约束

检查约束 (CHECK)(MySQL 8.0.16及更高版本开始支持)

保证证字段的值满足特定的条件

CREATE TABLE Users (  
    Age INT CHECK (Age >= 18),  
    Username VARCHAR(255) NOT NULL,  
    PASSWORD VARCHAR(255),  
    PRIMARY KEY (Username)  
);

三、外键约束

什么是外键约束?

外键约束是一个或多个字段的组合,其值依赖于在另一个表中的主键。外键约束用于确保数据在两个相关表之间的引用完整性。这意味着,你不能引用一个不存在的值。外键是防止破坏表之间连接的手段。它可以防止非法数据插入到外键列,因为它必须是它指向的那个表中的值之一。

添加外键的语法

假设我们有两个表,Users 和 Orders,我们想要在Orders表中为UserID字段添加一个外键约束,该字段引用Users表的ID字段:

ALTER TABLE Orders  
ADD FOREIGN KEY (UserID) REFERENCES Users(ID);

删除/更新行为 

  • 当在外键关联的表中更新或删除记录时,我们必须考虑如何处理关联的记录。MySQL提供了几种处理方式:
    • CASCADE: 当父表(参考表)中的记录被删除或更新时,子表中相应的记录也会被删除或更新。
    • SET NULL: 当父表中的记录被删除或更新时,子表中相应的外键字段的值会被设置为NULL。但前提是,该外键字段允许NULL值。
    • NO ACTION: 如果子表中存在与父表相关的记录,则不允许删除或更新父表中的记录。
    • RESTRICT: 同NO ACTION。
    • SET DEFAULT: 当父表中的记录被删除或更新时,子表中相应的外键字段的值会被设置为其默认值。但前提是,该外键字段已定义了默认值。例如,如果我们想在删除Users表的记录时,将Orders表中相关的记录的UserID设置为NULL,我们可以这样定义外键:
      ALTER TABLE Orders  
      ADD FOREIGN KEY (UserID) REFERENCES Users(ID) ON DELETE SET NULL;

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值