精华内容
下载资源
问答
  • mysql 删除外键约束
    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;

    更多相关内容
  • 删除表不是特别常用,特别是对于存在外键关联的表,删除更得小心。但是在开发过程中,发现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. 问题一:班级表中只有1, 2 ,那我们在学生表中插入3班学生呢?
      insert into stu_table values (NULL, '测试名', '女', 18, 3 );

    在这里插入图片描述
    结果很明显添加成功,但这种做法就是错误的,因为根本没有c_id = 3的班

    1. 问题二:那我们删除班级表中的一条记录呢,那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:10
    1.查看数据库表创建的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

    感谢您的支持,写的文章如对您有所帮助,开源不易,请您打赏,谢谢啦~

    展开全文
  • 展开全部 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;

    349560336d66993af514378a0303bccc.png

    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;

    e9b8f73eb8915eebb1f19e34ee55f33e.png

    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);

    2240815041d73044552b553f9720525d.png

    4、查询TEST_STU表中的记录;select t.*, rowid from test_stu;

    4ed437d984bf24f6b23fbe3beaf98f3a.png

    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

    f28717f7e64fb3a69e1351b952903d46.png

    展开全文
  • mysql外键约束

    2021-01-28 01:37:07
    外键约束自带的引擎只有innoDB引擎支持外键,外键要求父表必须有对应列的索引,子表会自动创建索引下面是两个表country国家,字表city创建国家表last_update语句的意思是时间戳不为空,默认插入(第三条插入表明以...
  • 本文实例讲述了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物理...它不让我删除,说存在外键约束删除会破坏他们的结构。 外键约束:让数据库自己通过外键来保证数据的完整性和一致性,让他们的关联性更强。 虽然它是有
  • 能够写出删除外键约束的SQL语句 1. 外键约束作用 外键约束:对外键字段的值进行更新和插入时会和引用表中字段的数据进行验证,数据如果不合法则更新和插入会失败,保证数据的有效性 2. 对于已经存在的字段添加外键...
  • MySQL修改外键约束关系

    千次阅读 2022-03-21 11:32:03
    2.删除外键约束:alter table 表名 drop foreign key 外键名; (主键字段和外键字段都会自动创建索引,因此我们还要将这个外键的索引删除) 3.删除索引:alter table 表名 drop index 索引名; 或 drop index ...
  • 外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常的维护工作更加轻松。这里以MySQL为例,总结一下3种外键约束方式的区别和联系。这里以用户表...
  • MySQL外键约束详解

    千次阅读 2021-12-19 08:02:01
    今天继续给大家介绍MySQL相关知识,本文主要内容是MySQL外键约束详解。 一、MySQL外键约束作用 二、外键约束创建 (一)创建外键约束的条件 (二)在创建数据表时创建外键约束 (三)在创建数据表后添加外键约束 三...
  • 由于外键约束的存在,使得后期的分库分表非常麻烦,对于没有用到外键约束限制操作,并且有外键结构的数据库,删除所有外键约束很有必要,使数据库可移植性强,可拆解性强 步骤: 执行查询所有外键命令,并且拼接...
  • mysql中设置外键约束的方法:可以通过FOREIGN KEY关键字来指定外键,语法“ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(列名) REFERENCES 主表名 (列名);”。(1) 外键的使用:外键的作用,主要有两个:一个是...
  • MySQl取消外键约束

    2019-10-31 17:19:18
    Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构。 解决方法是在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0; 然后将原来表的数据导出到sql语句,重新创建此表后,再把数据使用sql导入, ...
  • 在使用srping data JPA时候,配置了很多类似 一对多的配置,导致在生成数据库在mt_sys_file生成了多个外键约束,最后在保存数据的时候可能出现“违反数据库约束”,例如: ...
  • 使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建、检索、更新和删除等操作都...MySQL外键约束条件  MySQL外键约束条件有以下几种:  · CASCADE : 从父表删除或更新行时自动删除
  • 本文将演示如何在MySQL中利用外键约束以级联方式删除数据。对于PHP开发人员来说,在MySQL中使用InnoDB表时可以利用外键约束提供的许多的便利之处,尽管MySQL宣布将来的版本支持MyISAM表。本文将...
  • 如何在MySQL中设置外键约束

    千次阅读 2021-01-18 21:31:24
    因为数据库有时候会由于没有通过外键的检测而使得开发人员删除,插入操作失败.他们觉得这样很麻烦其实这正式外键在强制你保证数据的完整性和一致性.这是好事儿.例如:有一个基础数据表,用来记录商品的所有信息。其他...
  • MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。 外键用来建立主表与从表的...
  • 深入解析MySQL外键约束的使用:本文将向读者介绍MySQL中的外键约束。通过本文的介绍,您会发现当更新父表中的数据行的时候触发对子表数据的级联更新是件轻而易举的事情。本文将向读者介绍MySQL中的外键约束。通过...
  • 但是该语句不会产生错误。而是生成警告。这些情况包括:在具有PRIMARY KEY或UNIQUE约束的列中插入重复的键。 将NULL插入具有NOT NULL约束的列中。 在分区表中插入一行,但是您插入的值不会映射到分区。 如果使用...
  • 今天有位自己填上一坑:mysql储存引擎原因就是数据库表引擎为:MyISAM,建立主外键关系需要是InnoDB;解决方案:alter table table_name1 engine=innodb;改变两个表的引擎;如果还是不行:删除外键表数据,建立外键...
  • oracle 删除外键约束 禁用约束 启用约束oracle 删除外键约束 禁用约束 启用约束 执行以下sql生成的语句即可 删除所有外键约束 Sql代码 select 'alter table '||table_name||' drop con ...备忘:MySQL中修改表中某列...
  • 在修改表时添加外键约束-删除外键约束二、内外连接查询(1)inner join内连接查询(2)left\right join外连接查询(左连接和右连接)三、Mysql的锁(1)锁的概述(2)MyISAM的锁调度(4)表锁语句(3)innoDB锁的...
  • 先来看两个建表语句: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中的数据我们知道,开发能够维护多个表的完整性的数据库驱动的应用程序是一件非常复杂的事情——即使应用程序所面对的是当前最流行的开源关系型数据库管理系统MySQL服务器时也不...
  • 数据库的外键虽然能保证数据数据一致性和完整性,但是也一定程度地影响了数据更新的性能。在开发中,我们使用PowerDesigner建立物理...再把结果中的删除语句拿出来执行,删除数据库中所有外键约束 SELECT CONCAT('ALTER

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,930
精华内容 18,372
关键字:

mysql删除外键约束语句

mysql 订阅