-
2021-01-18 18:38:49
查看创建数据库语句
show create table table_name;
查询schema中所有外键名称然后拼接生成删除语句,再执行。
SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY ',CONSTRAINT_NAME,' ;')
FROM information_schema.TABLE_CONSTRAINTS c
WHERE c.TABLE_SCHEMA='db_name' AND c.CONSTRAINT_TYPE='FOREIGN KEY';
删除表约束
alter table table_name drop foreign key FKstne13dqw7l76ib6cr6ytwl7v;
commit;
参数配置
SET FOREIGN_KEY_CHECKS = 0;
SET GLOBAL FOREIGN_KEY_CHECKS = 0;
查看结果
SELECT @@FOREIGN_KEY_CHECKS;
更多相关内容 -
MySQL删除表的时候忽略外键约束的简单实现
2020-12-16 14:16:18删除表不是特别常用,特别是对于存在外键关联的表,删除更得小心。但是在开发过程中,发现Schema设计的有问题而且要删除现有的数据库中所有的表来重新创建也是常有的事情;另外在测试的时候,也有需要重新创建数据库... -
【MySQL】外键约束
2021-12-17 10:08:11外键约束可以使两张表紧密结合起来,特别是对于删除/修改级联操作时,会保证数据的完整性。 子表/从表:使用外键约束的表 (学生表:学号,姓名,性别,年龄,班级号) 父表/主表:含有被依赖的字段的表(班级表...文章目录
(一)外键约束
-
外键:是指表中某个字段的值依赖于另一个表中的某个字段的值(
被依赖的字段必须要有主键约束或者唯一约束
) -
外键约束:用户实现数据库表的参照完整性。外键约束可以使两张表紧密结合起来,特别是对于删除/修改级联操作时,会保证数据的完整性。
-
子表/从表:使用外键约束的表 (学生表:学号,姓名,性别,年龄,班级号)
-
父表/主表:含有被依赖的字段的表(班级表:班级号,班级名)
注意:学生表中含有班级号
(二)外键约束的功能
- 同一个字段有着大量重复数据,使用外键约束后,修改只修改一次父表中的数据即可,节省时间;
注意:外键约束只有表级约束
(三)学生表和班级表
(1)练习
-- 创建主表(班级表) create table class_table( c_id int(4) primary key auto_increment, c_name varchar(10) ); -- 创建从表(学生表) create table stu_table( s_id int PRIMARY key auto_increment, s_name varchar(10) not null, s_sex char(1) check(s_sex = '男' or s_sex = '女'), s_age int(3) check(s_age > 0 and s_age < 100), c_id int(4) ); -- 班级表添加数据 insert into class_table values(NULL, 'xg1901'), (NULL, 'xg1902'); -- 查看班级表数据 select * from class_table; -- 学生表中插入数据 insert into stu_table values (NULL, '香菱', '女', 18, 1); insert into stu_table values (NULL, '行秋', '男', 18, 2); insert into stu_table values (NULL, '胡桃', '女', 16, 2); insert into stu_table values (NULL, '班尼特', '男', 18, 1); -- 查看学生表数据 select * from stu_table;
(2)两个问题
- 问题一:班级表中只有1, 2 ,那我们在学生表中插入3班学生呢?
insert into stu_table values (NULL, '测试名', '女', 18, 3 );
结果很明显添加成功,但这种做法就是错误的,因为根本没有c_id = 3的班
- 问题二:那我们删除班级表中的一条记录呢,那2班的人怎么办?
比如:删除xg1902
delete from class_table where c_id = 2;
那么学生表中c_id = 2的学生有没有被删除呢??很显然并没有
(3)解决方案
-
产生原因:未将外键约束语法添加进去
-
添加外键约束(
只有表级约束
):
1.创建表时添加表级外键约束
语法:constraint 约束名 foreign key 子表名 (子表字段名) references 父表名 (父表唯一字段名)
-- 创建从表(学生表) create table stu_table( s_id int PRIMARY key auto_increment, s_name varchar(10) not null, s_sex char(1) check(s_sex = '男' or s_sex = '女'), s_age int(3) check(s_age > 0 and s_age < 100), c_id int(4), -- 创建时添加表级外键约束 constraint fk_c_id foreign key (c_id) references class_table (c_id) );
2.对已创建的表添加表级外键约束
alter table 子表名 add constraint 约束名 foreign key 子表名 (子表字段名) references 父表名 (父表唯一字段名);
-- 已存在的表添加表级外键约束 alter table stu_table add constraint fk_c_id foreign key (c_id) references class_table (c_id);
(4)结果展示
(四)外键策略
(1)策略一:手动置空
(2)策略二:级联操作 on update on delete
创建约束 外键策略;
什么是级联呢?
开启级联后,更新/删除一个主表的主键值(唯一字段),系统会相应的更新/删除所有从表匹配的外键值。
先删除旧的外键约束,在添加含有外键策略(级联操作)的外键约束
- 语法格式:
-- 1.先删除旧的外键约束 alter table 从表名 drop foreign key 外键约束名; -- 2.重新添加带有级联操作(更新/删除)的外键约束 alter table 从表名 add constraint 外键约束名 foreign key (从表字段名) references 主表名 (主表字段名) on update cascade on delete cascade;
- 示例:
-- 1.先删除旧的外键约束 alter table stu_table drop foreign key fk_c_id; -- 2.重新添加带有级联操作(更新/删除)的外键约束 alter table stu_table add constraint fk_c_id foreign key (c_id) references class_table (c_id) on update cascade on delete cascade; -- 级联更新 update class_table set c_id = 1 where c_id = 3; -- 级联删除 delete from class_table where c_id = 2;
(3)级联置空 set null
举个例子,学生表中有4个2班的学生, 班级表有1班和2班,假设删除班级表中的2班,出现的情况如下:
- 外键约束的外键策略set null:学生表中的所有2班学生的班级号为null
-
-
mysql删除外键约束
2018-01-20 08:11:101.查看数据库表创建的sql语句 ...2.查看外键的约束名 CREATE TABLE `vip` ( `id` int(11) NOT NULL AUTO_INCREMENT, `address` varchar(255) DEFAULT NULL, `code` varchar(255) DEFAULT NULL,1.查看数据库表创建的sql语句show create table vip
2.查看外键的约束名CREATE TABLE `vip` ( `id` int(11) NOT NULL AUTO_INCREMENT, `address` varchar(255) DEFAULT NULL, `code` varchar(255) DEFAULT NULL, `mobile` varchar(255) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, `score` int(11) DEFAULT NULL, `id_code` varchar(255) DEFAULT NULL, `user_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `FK1C81D1738DA76` (`user_id`), CONSTRAINT `FK1C81D1738DA76` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
3.解除外键约束alter table vip drop foreign key FK1C81D1738DA76
4.删除外键alter table vip drop user_id
感谢您的支持,写的文章如对您有所帮助,开源不易,请您打赏,谢谢啦~
-
sql 删除带外键约束的表的语句是什么
2021-01-18 19:23:38展开全部 1、创建主键表,... 5、删除主表TEST_CLASS中class_id=1001的记录,会发现从表TEST_STU中class_id中的记录也被删除; delete test_class where class_id = 1001; commit; select t.*, t.rowid from TEST_STU t展开全部
1、创建主键表,test_class,并建立class_id字段为主键;
create table test_class(class_id number, class_name varchar2(20));
-- Create/Recreate indexes
alter table TEST_CLASS
add constraint P_CLASS_ID primary key (CLASS_ID)
using index
tablespace USERS
pctfree 10
initrans 2
maxtrans 255;
2、创建外键表,test_stu,其中字段class_id为test_class表的class_id字段;
create table test_stu(id number, class_id number);
-- Create/Recreate primary, unique and foreign key constraints
alter table TEST_STU
add constraint f_class_id foreign key (CLASS_ID)
references test_class (CLASS_ID) on delete cascade;
3、两张表分别e69da5e887aa3231313335323631343130323136353331333431376532插入记录;
insert into TEST_CLASS values(1001,'语文');
insert into TEST_CLASS values(1002,'数学');
insert into TEST_CLASS values(1003,'英语');
insert into TEST_STU values(1,1001);
insert into TEST_STU values(2,1001);
insert into TEST_STU values(3,1002);
insert into TEST_STU values(4,1003);
4、查询TEST_STU表中的记录;select t.*, rowid from test_stu;
5、删除主表TEST_CLASS中class_id=1001的记录,会发现从表TEST_STU中class_id中的记录也被删除;
delete test_class where class_id = 1001;
commit;
select t.*, t.rowid from TEST_STU t
-
mysql外键约束
2021-01-28 01:37:07外键约束自带的引擎只有innoDB引擎支持外键,外键要求父表必须有对应列的索引,子表会自动创建索引下面是两个表country国家,字表city创建国家表last_update语句的意思是时间戳不为空,默认插入(第三条插入表明以... -
MySQL外键约束常见操作方法示例【查看、添加、修改、删除】
2021-02-02 07:15:51本文实例讲述了MySQL外键约束常见操作方法。分享给大家供大家参考,具体如下:1. 查看数据库表创建的sql语句 show create table vip2. 查看外键的约束名 CREATE TABLE `vip` (`id` int(11) NOT NULL AUTO_INCREMENT,... -
MySQL删除外键约束问题。
2019-05-26 10:20:54当我们在一个表中添加字段约束的时候: ALTER TABLE product ADD CONSTRAINT product_fk FOREIGN ...会认为我的外键约束名称为product_fk, 然后当我们想删除时: ALTER TABLE product DROP FOREIGN KEY product_... -
Mysql外键约束怎么删除
2021-05-03 17:01:42记录一下碰到的问题。由于我是使用PowerDesigner来建mysql物理...它不让我删除,说存在外键约束,删除会破坏他们的结构。 外键约束:让数据库自己通过外键来保证数据的完整性和一致性,让他们的关联性更强。 虽然它是有 -
【数据库面试必备】MySQL条件查询(九):删除外键约束的SQL语句、外键SQL语句的编写
2020-03-12 21:32:02能够写出删除外键约束的SQL语句 1. 外键约束作用 外键约束:对外键字段的值进行更新和插入时会和引用表中字段的数据进行验证,数据如果不合法则更新和插入会失败,保证数据的有效性 2. 对于已经存在的字段添加外键... -
MySQL修改外键约束关系
2022-03-21 11:32:032.删除外键约束:alter table 表名 drop foreign key 外键名; (主键字段和外键字段都会自动创建索引,因此我们还要将这个外键的索引删除) 3.删除索引:alter table 表名 drop index 索引名; 或 drop index ... -
总结mysql的三种外键约束方式
2021-01-19 00:35:22外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。这里以MySQL为例,总结一下3种外键约束方式的区别和联系。这里以用户表... -
MySQL外键约束详解
2021-12-19 08:02:01今天继续给大家介绍MySQL相关知识,本文主要内容是MySQL外键约束详解。 一、MySQL外键约束作用 二、外键约束创建 (一)创建外键约束的条件 (二)在创建数据表时创建外键约束 (三)在创建数据表后添加外键约束 三... -
Mysql删除所有外键约束
2021-01-29 14:00:03由于外键约束的存在,使得后期的分库分表非常麻烦,对于没有用到外键约束限制操作,并且有外键结构的数据库,删除所有外键约束很有必要,使数据库可移植性强,可拆解性强 步骤: 执行查询所有外键命令,并且拼接... -
mysql中如何设置外键约束?
2021-02-01 14:23:15mysql中设置外键约束的方法:可以通过FOREIGN KEY关键字来指定外键,语法“ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(列名) REFERENCES 主表名 (列名);”。(1) 外键的使用:外键的作用,主要有两个:一个是... -
MySQl取消外键约束
2019-10-31 17:19:18Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构。 解决方法是在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导出到sql语句,重新创建此表后,再把数据使用sql导入, ... -
MySQL去除外键索引约束
2021-05-24 17:22:06在使用srping data JPA时候,配置了很多类似 一对多的配置,导致在生成数据库在mt_sys_file生成了多个外键约束,最后在保存数据的时候可能出现“违反数据库约束”,例如: ... -
详解MySQL中的外键约束问题
2021-01-19 22:29:23使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建、检索、更新和删除等操作都...MySQL外键约束条件 MySQL的外键约束条件有以下几种: · CASCADE : 从父表删除或更新行时自动删除 -
玩转MySQL的外键约束之级联删除篇
2020-12-24 09:56:39本文将演示如何在MySQL中利用外键约束以级联方式删除数据。对于PHP开发人员来说,在MySQL中使用InnoDB表时可以利用外键约束提供的许多的便利之处,尽管MySQL宣布将来的版本支持MyISAM表。本文将... -
如何在MySQL中设置外键约束
2021-01-18 21:31:24因为数据库有时候会由于没有通过外键的检测而使得开发人员删除,插入操作失败.他们觉得这样很麻烦其实这正式外键在强制你保证数据的完整性和一致性.这是好事儿.例如:有一个基础数据表,用来记录商品的所有信息。其他... -
MySQL外键约束(FOREIGN KEY)案例讲解
2022-04-28 23:46:13MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。 外键用来建立主表与从表的... -
深入解析MySQL外键约束的使用
2021-02-02 07:16:00深入解析MySQL外键约束的使用:本文将向读者介绍MySQL中的外键约束。通过本文的介绍,您会发现当更新父表中的数据行的时候触发对子表数据的级联更新是件轻而易举的事情。本文将向读者介绍MySQL中的外键约束。通过... -
MySQL外键约束,级联删除
2020-12-24 09:56:03但是该语句不会产生错误。而是生成警告。这些情况包括:在具有PRIMARY KEY或UNIQUE约束的列中插入重复的键。 将NULL插入具有NOT NULL约束的列中。 在分区表中插入一行,但是您插入的值不会映射到分区。 如果使用... -
mysql添加外键约束变为索引
2021-01-18 20:09:11今天有位自己填上一坑:mysql储存引擎原因就是数据库表引擎为:MyISAM,建立主外键关系需要是InnoDB;解决方案:alter table table_name1 engine=innodb;改变两个表的引擎;如果还是不行:删除外键表数据,建立外键... -
mysql oracle 删除外键约束
2021-05-08 01:59:12oracle 删除外键约束 禁用约束 启用约束oracle 删除外键约束 禁用约束 启用约束 执行以下sql生成的语句即可 删除所有外键约束 Sql代码 select 'alter table '||table_name||' drop con ...备忘:MySQL中修改表中某列... -
Mysql的外键约束、内外连接查询以及锁
2021-09-18 17:58:00在修改表时添加外键约束-删除外键约束二、内外连接查询(1)inner join内连接查询(2)left\right join外连接查询(左连接和右连接)三、Mysql的锁(1)锁的概述(2)MyISAM的锁调度(4)表锁语句(3)innoDB锁的... -
mysql建表外键约束的问题
2021-01-19 03:58:12先来看两个建表语句:CREATE TABLE `categories` (`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '分类id',`cname` VARCHAR(32) NOT NULL COMMENT '分类名称',PRIMARY KEY (`id`)) ENGINE=INNODB DEFAULT ... -
玩转MySQL中的外键约束之更新和删除
2021-01-19 12:22:00一、利用外键约束更新并删除MySQL中的数据我们知道,开发能够维护多个表的完整性的数据库驱动的应用程序是一件非常复杂的事情——即使应用程序所面对的是当前最流行的开源关系型数据库管理系统MySQL服务器时也不... -
MySQL删除所有表的外键约束
2020-12-08 16:44:48数据库的外键虽然能保证数据数据一致性和完整性,但是也一定程度地影响了数据更新的性能。在开发中,我们使用PowerDesigner建立物理...再把结果中的删除语句拿出来执行,删除数据库中所有外键约束 SELECT CONCAT('ALTER