MYSQL的创建修改删除约束笔记

/*
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;



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值