/*
mysql中的约束
约束类型
1.非空约束(not null)
2.唯一约束(unique)
3.主键约束(primary key)
4.外键约束(foreign key)
5.检查约束(mysql不支持,oracle支持)
*/
/*
创建表时添加约束
语法:
create table(
列名 类型 约束类型,
..... .... ......
);
主键自动增长关键字 auto_increment
*/
-- 示列创建departments表包含department_id该列为主键且自动增长,department_name列不允许重复,location_id不允许为空
use xpx;
create table departments(
department_id int primary key auto_increment,
department_name varchar(30) unique,
location_id int not null
);
/*
查询表中的约束信息
语法:
show keys from 表名
*/
show keys from departments;
-- 示列创建employees表包含employee_id该列为主键且自动增长,last_name列不允许含有空值,email列不允许有重复不允许含有空值,dept_id为外键参照departments表主键
/*
注意添加外键不能直接在列名后添加需要在创建表的最后添加
语法:
constraint 约束名 foreign key(需要设置外键的列名) references 参照表名(参照列名)
*/
create table employees(
employee_id int primary key auto_increment,
last_name varchar(30) not null,
email varchar(40) not null unique,
dept_id int,
constraint emp_fk foreign key (dept_id) references departments(department_id)
);
show keys from employees;
-- --------------------------------------------------------------------------------------
/*
修改表实现约束的添加与删除
添加主键约束
语法:
alter table 表名 add primary key(列名)
*/
-- 示列将emp表中employee_id修改为主键且自动增长
alter table emp add primary key(employee_id);
alter table emp modify employee_id int auto_increment;
/*
删除主键约束
语法:
alter table 表名 drop primary key;
注意:删除主键时,如果主键列具备自动增长的能力,需要先删除自动增长,然后再去删除主键
*/
-- 示列删除emp表中的主键约束
alter table emp modify employee_id int;
alter table emp drop primary key;
/*
添加非空约束
语法:
alter table 表名 modify 列名 类型 not null;
*/
-- 示列向emp表中的salary添加非空约束。
alter table emp modify salary float(8,2) not null;
/*
删除非空约束
语法:
alter table 表名 modify 列名 类型 null;
*/
-- 示列删除emp表中的salary的非空约束
alter table emp modify salary float(8,2) null;
/*
添加唯一约束
语法:
alter table 表名 add constraint 约束名 unique(列名);(也可用于主键约束)
*/
-- 示列向emp表中的name添加唯一约束
alter table emp add constraint emp_uq unique(name);
/*
删除唯一约束
语法:
alter table 表名 drop key 约束名;
*/
-- 示列删除name的唯一约束
alter table emp drop key emp_uq;
/*
添加外键约束
语法:
alter table 表名 add constraint 约束名 foreign key(列名) references 参照表名(参照列名)
*/
-- 示列向emp中dept_id添加外键约束
alter table emp add constraint emp_fk1 foreign key(dept_id) references departments(department_id);
/*
报错问题:
[Err] 1022 - Can't write; duplicate key in table '#sql-2ac4_f'
这类错误,主要是外键名称重复导致,改为不同名字就可以了
*/
/*
删除外键约束
alter table 表名 drop foreign key 约束名
注意:mysql在存储外键时同时会把外键放到一个索引中,所以在删除外键时必须把索引也删除
删除索引语法:
alter table 表名 drop index 索引名;(索引名和约束名相同)
*/
-- 删除dept_id的外键约束
alter table emp drop foreign key emp_fk1;
alter table emp drop index emp_fk1;
MYSQL的创建修改删除约束笔记
最新推荐文章于 2022-02-21 00:11:09 发布