MySQL约束

数据完整性

为了确保数据的完整性和唯一性,关系型数据库通过约束机制来实现目的。

可靠性 + 准确性 = 数据完整性

数据完整性通常有三种形式:

  1. 实体完整性:即表中有一个主键。
  2. 域完整性:数据值满足指定的条件。
  3. 引用完整性:表示与引用表的关系和数据约束,即外键。
  • 数据存放在表中
  • “数据完整性的问题大多是由于设计引起的”
  • 创建表的时候,就应当保证以后数据输入是正确的
    错误的数据、不符合要求的数据不允许输入

创建表:保证数据的完整性=实施完整性约束

列值要求(约束)

  • 输入的类型是否正确?
    年龄字段的数据类型必须是数字
  • 输入的格式是否正确?
    身份证号码必须是18位
  • 是否在允许的范围内?
    性别只能是”男”或者”女”

整行要求(约束)

  • 是否存在重复输入?
    学员信息输入了两次
  • 是否符合其他特定要求?
    信誉值大于5的用户才能够加入会员列表

实体完整性

约束方法:唯一约束、主键约束、标识列

域完整性

约束方法:限制数据类型、检查约束、外键约束、默认值、非空约束

引用完整性

约束方法:外键约束

约束(Constraint)

常见的约束条件有6种
主键(Primary Key)约束
外键(Foreign Key)约束
唯一性(Unique)约束
默认值(Default)约束
非空(Not NULL)约束
检查(Check)约束
MySQL不支持check约束,写了没有作用,但不会报错

约束的详细介绍

非空约束:用not null约束的字段不能为null值,必须给定具体的数据

例如:创建表,给字段添加非空约束(创建用户表,用户名不能为空)
create table t_user(
id int(10),
name varchar(32) not null
); --如果没有插入name字段数据,则会报错

取消非空约束:

alter table t_user modify name varchar(32)

建表后添加非空约束

alter table t_user modify id int not null

唯一性(unique)约束:unique约束的字段,具有唯一性,不可重复,但可以为null

例如:创建表,保证邮箱地址唯一
create table test_unique(
id int(10),
name varchar(32) not null,
email varchar(128) unique
); #如果email字段重复插入,则会报错,但是该字段可以为null

删除唯一性约束:

语法:alter table 表名 drop index 字段名;
例:alter table test_unique drop index email;

建表后添加唯一性约束:

语法:alter table 表名 add unique(字段名)
例:alter table test_unique add unique(id)

主键约束:
主键约束相当于非空约束和唯一约束。
每个表只允许拥有一个主键,但是这个主键可以由多个数据列组成,这些列组合不能重复

例:创建表test_primary 设置id为主键;

create table test_primary(
id int not null primary key,
name varchar(50)
);

例:创建表test2_primary 设置id为主键;

create table test2_primary (
id int not null,
name varchar(50),
constraint test_pk primary key(id) 
# 指定主键约束为 test_pk ,对大部分数据库有效 但对于MySql无效,此主键约束名仍为PRIMARY
);

主键不仅可以是一列,也可以由表中的两列或多列来共同标识。——复合主键
例:创建表test3_primary 设置id和name为复合主键;

create table test3_primary(
id int not null,
name varchar(50) not null,
primary key(id,name)
)

删除主键约束:

语法:alter table 表名 drop primary key;
例:alter table test3_primary drop primary key;

建表后添加主键约束:

语法:alter table 表名 add primary key(字段名)
例:alter table test3_primary add primary key(id) ; --将字段设置为主键

默认值约束:
当插入时没有插入值时,会自动插入默认值

例:创建表test1_default设置name的默认值;

create table test1_default(
id int not null,
name varchar(50) DEFAULT 'abc'
)

插入数据的时候,如果不写入name的值,则默认显示填入abc

也可以使用自增长的方式来给字段填充值
例:创建表auto_test设置id的值为自增长;

create table auto_test(
id int not null auto_increment primary key,
name varchar(25)
);

删除默认值约束

语法:ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;
例:alter table test1_default alter name drop default;

建表后添加默认值约束:

语法:ALTER TABLE 表名 ALTER 列名 SET DEFAULT '默认值';
例:alter table test1_default alter name set default 'abc';
原文地址:https://www.cnblogs.com/TD1900/p/12121332.html