MYSQL外键增删改查
2015-12-11 13:33
615 查看
下面亲自演示整个过程。
1.首先创建一个test表格
2. 查看test表字段属性
3. 创建fk_test表格, 其中FK_1是该外键的名称,后面再进行删除、修改等操作的时候会用到
4. 查看fk_test表格字段属性
可以看到 course_id 的KEY属性为PRI,id的MUL属性为MUL
PRI代表主键的意思,不可以重复。MUL表示可以重复。此外还有UNI,也是不可以重复。
5. 向fk_test中插入数据
出现错误,原因在于id有外键约束,保证了fk_test和test数据的一致性,也就是说fk_test中每条记录的id的值必须是在test中出现的
6. 再次向fk_test中插入数据
先在test中插入了一条记录,该记录的id值为1,再向fk_test中插入了id值为1的记录,成功。
7. 删除fk_test id的外键属性
如果忘记了外键名可以通过
删除操作语法
执行完后查看列表属性,发现id的key属性仍然是MUL,但是此时往里面进行数据插入时约束已经取消了。
8. 给已经存在的字段增加外键属性
添加外键的操作
执行操作,报错,为什么呢?因为刚才插入了李四这条记录的操作,李四的id为2,而test里面是没有id为1的记录的,
这里要么删除fk_test里面李四这条记录要么在test里面增加id为2的记录
为了避免这种情况,一般我们会在外键设置时候加上级联属性
删除了李四这条记录后,给id添加外键属性
查看外键
可以看到外键FK_2已经成功插入了
1.首先创建一个test表格
2. 查看test表字段属性
3. 创建fk_test表格, 其中FK_1是该外键的名称,后面再进行删除、修改等操作的时候会用到
4. 查看fk_test表格字段属性
可以看到 course_id 的KEY属性为PRI,id的MUL属性为MUL
PRI代表主键的意思,不可以重复。MUL表示可以重复。此外还有UNI,也是不可以重复。
5. 向fk_test中插入数据
出现错误,原因在于id有外键约束,保证了fk_test和test数据的一致性,也就是说fk_test中每条记录的id的值必须是在test中出现的
6. 再次向fk_test中插入数据
先在test中插入了一条记录,该记录的id值为1,再向fk_test中插入了id值为1的记录,成功。
7. 删除fk_test id的外键属性
如果忘记了外键名可以通过
select * from information_schema.TABLE_CONSTRAINTS t where t.TABLE_NAME='fk_test' and CONSTRAINT_TYPE='FOREIGN KEY';进行查询,如下 constraint_name 为FK_1
删除操作语法
ALTER TABLE table-name DROP FOREIGN KEY key-name;执行删除操作
执行完后查看列表属性,发现id的key属性仍然是MUL,但是此时往里面进行数据插入时约束已经取消了。
8. 给已经存在的字段增加外键属性
添加外键的操作
alter table table-name add constraint 外键名 foreign key(字段名) references 引用表明(字段名)
执行操作,报错,为什么呢?因为刚才插入了李四这条记录的操作,李四的id为2,而test里面是没有id为1的记录的,
这里要么删除fk_test里面李四这条记录要么在test里面增加id为2的记录
为了避免这种情况,一般我们会在外键设置时候加上级联属性
alter table table-name add constraint 外键名 foreign key(字段名) references 引用表明(字段名) on delete cascade on update cascade;
删除了李四这条记录后,给id添加外键属性
查看外键
可以看到外键FK_2已经成功插入了
相关文章推荐
- mysql 存储过程 汉字取拼音或者首字母
- mysql的unix_timestamp
- MYSQL查看表格字段属性
- MySQL5.6.26升级到MySQL5.7.9实战方案
- MySQL5.6.26升级到MySQL5.7.9实战方案
- MySql中把一个表的数据插入到另一个表中的实现
- Mysql视图
- 简单谈谈MySQL的loose index scan
- 记录-MySQL中的事件调度Event Scheduler
- MySQL-5.6.13免安装版配置方法
- MySQL中有关TIMESTAMP和DATETIME的总结
- Mysql卸载安装
- 性能调优:mysql之left join
- 10015---MySQL--innodb_flush_log_at_trx_commit参数
- Mysql连接出错问题
- 上Mysql com.mysql.jdbc.StatementImpl$CancelTask内存泄漏问题和解决方法
- Mysql日志
- mysql中导入txt文件
- Navicat for mysql建立连接
- 不停止MySQL服务增加从库的两种方式