MySql 约束
1.主键约束 primary key
特点:
- 不允许重复
- 不允许为null
- 一个表只能有一个主键约束
语法:
-- 添加约束
-- 在创建表时:
-- 方式一:
create table [表名] (
id int PRIMARY KEY,
name varchar(10)
);
-- 方式二:
create table [表名] (
id int ,
name varchar(10),
PRIMARY KEY(id)
);
-- 方式三:
-- 通过为主键列指定约束名称,可以在以后引用该约束名称进行约束的删除、修改等操作。
create table [表名] (
id INT ,
name varchar(10),
constraint pk_name primary key(id)
);
-- 修改列为主键
-- 方法一:
alter table [表名] modify id int primary key;
-- 方法二:
alter table [表名] add primary key(id);
-- 方式三:
alter table [表名] add contraint pk_name primary key(id);
-- 删除主键约束
-- 方法一:较为推荐
alter table [表名] drop primary key;
-- 方法二:
alter table [表名] modify id int;
自增长列
特点:
- 必须和一个key搭配使用
- 一个表最多只能有一个标识列
- 只能是数值型
- 可以自定义步长
- 可以设置自增长列初始值
语法:
-- 添加自增长列
-- 在创建表时
create table [表名] (
id int primary key auto_increment,
name varchar(10),
);
-- 修改列属性
alter table [表名] modify id int primary key auto_increment;
-- 删除自增长列
alter table [表名] modify id int primary key;
-- 设置自增长列步长
set auto_increment_increment = 2
-- 设置自增长列初始值
-- 在创建表时设置
create table [表名] (
id int primary key auto_increment,
name varchar(10),
) auto_increment 8;
alter table [表名] set auto_increment = 10;
2.唯一约束 unique
唯一约束:当要求列名中的字段不能重复时,使用唯一约束
特点:
- 可以设置多个
- 设置唯一约束的列名,值不能重复
- 可以为null
注意:在添加唯一约束时,请确保要添加的列中没有重复的数据
语法:
-- 添加唯一约束
-- 在创建表时添加
-- 方法一
create table [表名](
id int primary key ,
name varchar(10) unique
);
-- 方法2
-- constraint给约束命名,下次使用时可以直接用约束名
-- 如果不起约束名,那么唯一约束的约束名为列名
create table [表名](
id int primary key ,
name varchar(10) ,
constraint un_name unique (name);
);
-- 修改列属性
alter table [表名] add unique(name);
alter table [表名] add constraint uq_name unique(name);
alter table [表名] modify name varchar(10) unique;
-- 删除列的唯一索引
alter table [表名] modify name varchar(10);
alter table [表名] drop index 唯一约束的名称,没有设置就是列名
3.默认约束 default
默认约束,为列设置默认值,在添加数据时如果没有给设置默认约束的列添加数据,则此列的值为默认值
- 默认约束能和主键约束可以同时存在
- 默认约束不能和 AUTO_INCREMENT 同时使用
语法:
-- 创建表时
create table [表名](
id int default 1,
name varchar(10)
);
-- 修改列属性
alter table 表名称 modify column 列名 列类型 default 默认值;
-- 删除
alter table 表名称 modify column 列名 列类型;
4.非空约束 not null
设置该约束,代表此列的值不能为空
语法:
-- 创建表时
create table [表名](
id int not null default 1,
name varchar(10)
);
-- 修改列属性
alter table 表名称 modify column 列名 列类型 not null;
-- 删除
alter table 表名称 modify column 列名 列类型;
5.外键约束 foreign key
A表中的列值来自另一张表B的主键或者唯一键,将被引用值的表称为
主表
、从表
,引用值得表称为从表
、子表
语法:
-- 首先创建主表
create table dept(
dept_no int primary key,
dept_name varchar(10)
);
-- 再去创建从表
create table emp(
emp_no int primary key,
emp_name varchar(10),
dept_id int,
constraint fk_dept_no foreign key(dept_id) references dept(dept_no)
);
-- 添加外键约束
alter table dept add constraint fk_dept_no foreign key(dept_id) references dept(dept_no);
dept
表是主表,emp
是从表
在emp表中,要给dept_id添加数据时,必须是dept表中存在的数据或者是null
从表中的数据可以直接删除
主表中的删除dept_no列的数据时,应该先检查是否在从表中被引用,如果被引用则不能直接删除
如果要删除,可以使用级联删除,当删除主表中的数据时,从表中引用主表数据的行也会被删除
只需在创建表时加上
ON DELETE CASCADE
或者修改列属性时
级联删除代码:
CONSTRAINT `fk_dept_no` FOREIGN KEY (`dept_id`) REFERENCES `dept` (`dept_no`) ON DELETE CASCADE
级联更新:
当主表中的数据被修改时,那么从表中与之相关联的数据也会被修改
代码
ON DELETE CASCADE
如果级联删除和更新同时使用,将它们两依次写上
6.细节补充
如果只想要让一个列是唯一的使用unique(列名)
在MySQL中,使用唯一约束时,如果要在多个列上创建唯一约束,可以使用
UNIQUE
关键字CREATE TABLE table_name ( column1 VARCHAR(50) NOT NULL, column2 VARCHAR(50) NOT NULL, UNIQUE (column1, column2) );
这将确保
column1
和column2
两列的组合在表中是唯一的。如果您已经创建了一个表,并想在已有的列上添加唯一约束,可以使用
ALTER TABLE
语句,例如:ALTER TABLE table_name ADD UNIQUE (column1, column2);
这将向
table_name
表中添加一个唯一约束,确保column1
和column2
两列的组合是唯一的。在查看表结构时,如果约束被正确添加,您应该能在
key
列中看到MUL
(表示多个列的唯一约束)而不是UNI
(表示单列的唯一约束)。