MySQL数据表约束设置指南

沿途有光
沿途有光
发布时间:2026-10-16 | 3人浏览过
原创

在MySQL中,数据表约束用于限制填入表中的数据格式或范围,以保证数据的准确性及有效性。常见的约束包括主键、外键、唯一、非空、默认值和自增等。本文将依次解析这些约束的含义及其在CREATE TABLE建表语句和ALTER TABLE修改语句中的具体实现方式。

一、主键约束 (PRIMARY KEY)

第1步:了解主键概念

主键(Primary Key)是唯一标识表中每一行记录的字段,具备两个核心特征:非空且唯一。虽然一个表可以有多个具有唯一性的“关键字”(如身份证号、手机号),但只能指定其中一个作为主键。主键一旦设定,必须保持不重复且不能为空。
注意:关键字不一定是主键,但主键一定是关键字。每个表最多只能有一个主键。

第2步:在建表时设置主键

在创建新表时,可直接在列定义后使用PRIMARY KEY子句指定主键。

-- 方式A:在列名后直接指定
CREATE TABLE Users(
  User_id INT NOT NULL PRIMARY KEY,
  User_name VARCHAR(20),
  User_pwd VARCHAR(18)
);

-- 方式B:在列定义末尾统一声明主键
CREATE TABLE User(
  User_id INT NOT NULL,
  User_name VARCHAR(20),
  User_pwd VARCHAR(18),
  PRIMARY KEY (User_id)
);

上述两种写法效果一致,均成功建立主键。

第3步:在已存在表中添加主键

若建表初期未设置主键,可以通过ALTER TABLE语句事后补充。前提是目标字段目前的数据必须满足非空且唯一的要求,否则操作会报错。

-- 方式A:整体声明主键
ALTER TABLE user ADD PRIMARY KEY(User_id);

-- 方式B:针对特定字段修改为主键
ALTER TABLE users MODIFY User_id INT PRIMARY KEY;

二、外键约束 (FOREIGN KEY)

第4步:理解外键作用

外键用于建立并加强两个表数据之间的链接。拥有外键的表称为“从表”,被引用的表称为“主表”。从表中的外键字段值必须是主表主键中存在的值(或者为NULL)。一张表可以没有外键,也可以有多个外键。

第5步:在建表时设置外键

假设已有user表,现创建订单表dingdan,将用户ID设为外键:

CREATE TABLE dingdan (
  DDid INT PRIMARY KEY NOT NULL,
  User_id INT NOT NULL,
  DDname VARCHAR(20) NOT NULL,
  -- 设置外键约束,命名可选
  CONSTRAINT fk FOREIGN KEY (User_id) REFERENCES user (User_id)
);

第6步:在已存在表中添加外键

使用ALTER TABLE向已有表添加外键关系:

ALTER TABLE student 
ADD CONSTRAINT stfk 
FOREIGN KEY (stid) REFERENCES teacher (tid);

风险提醒:建立主外键关联后,主表数据的删除和从表数据的插入将受到严格限制。如果主表中有记录被从表引用,则该主记录不能被随意删除,否则会引发错误。

三、唯一约束 (UNIQUE)

第7步:配置唯一性检查

唯一约束确保指定列中的所有数据各不相同。允许字段值为空(取决于具体实现),但不能出现重复值。

例如,要求用户的电子邮箱不能重复:

CREATE TABLE User (
  User_id INT NOT NULL,
  User_name VARCHAR(20),
  User_pwd VARCHAR(18),
  User_Email VARCHAR(40) UNIQUE
);

四、非空约束 (NOT NULL)

第8步:强制字段必填

非空约束规定该字段在插入数据时必须提供值,系统不允许其为 NULL。在实际设计中,常结合唯一约束一起使用。

例如,不仅邮箱要唯一,而且必须填写:

CREATE TABLE User (
  User_id INT NOT NULL,
  User_name VARCHAR(20),
  User_pwd VARCHAR(18),
  User_Email VARCHAR(40) UNIQUE NOT NULL
);

五、默认值约束 (DEFAULT)

第9步:设置缺失值的替代内容

当插入记录未给某字段赋值时,系统将自动使用默认值填充。

例如,为用户性别设置默认为“男”:

CREATE TABLE User (
  User_id INT NOT NULL,
  User_name VARCHAR(20),
  User_pwd VARCHAR(18),
  User_gender ENUM('男','女') DEFAULT '男'
);

六、自增属性 (AUTO_INCREMENT)

第10步:启用数值自动递增

通常配合主键使用。每当有新记录插入且该字段留空时,数据库会自动在上一次最大值的基础上加1,常用于生成流水号或主键ID。

CREATE TABLE User (
  User_id INT AUTO_INCREMENT,
  User_name VARCHAR(20),
  User_pwd VARCHAR(18),
  User_gender ENUM('男','女') DEFAULT '男',
  PRIMARY KEY (User_id)
);

注:开启自增后,即使该字段设为主键,在插入数据时也可以省略该字段的值。

以上就是MySQL数据库如何给表设置约束的详细教程。掌握各类约束条件有助于提升数据表的健壮性与规范性,更多关于数据库优化与设计的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表