精华内容
下载资源
问答
  • mysql删除表的外键约束
    2020-12-08 16:44:48

    数据库的外键虽然能保证数据数据一致性和完整性,但是也一定程度地影响了数据更新的性能。在开发中,我们使用PowerDesigner建立物理数据模型时,为了结构的清晰,增加可读性,会创建表与表之间的关联关系。
     在实际开发中,数据库中一般不会存在外键,阿里的开发手册中也强制不使用外键与级联操作,一切外键概念必须在应用层解决。如果数据库中已存在外键了,怎么办呢?

    查询schema中所有外键名称然后拼接生成删除语句。
    再把结果中的删除语句拿出来执行,删除数据库中所有外键约束

    SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY ',CONSTRAINT_NAME,' ;') 
    FROM information_schema.TABLE_CONSTRAINTS c 
    WHERE c.TABLE_SCHEMA='库名' AND c.CONSTRAINT_TYPE='FOREIGN KEY';
    

    转载自:https://blog.csdn.net/junlovejava/article/details/78360253

    更多相关内容
  • MySQL删除一张或一条数据的时候,出现 [Err] 1451 -Cannot deleteorupdatea parent row: aforeignkeyconstraintfails (...) 这是因为MySQL中设置了foreign key关联,造成无法更新或删除数据。可以通过设置...
  • mysql删除外键约束

    2022-05-17 19:02:51
    1.通过数据库创建的语句查看外键约束名 SHOW CREATE TABLE movie -- 建表语句如下 CREATE TABLE `movie` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) DEFAULT NULL, `filename` VARCHAR(255...

    1.通过数据库创建表的语句查看外键约束名

    SHOW CREATE TABLE movie
    
    -- 建表语句如下
    CREATE TABLE `movie` (
      `id` INT(11) NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(255) DEFAULT NULL,
      `filename` VARCHAR(255) DEFAULT NULL,
      `videoname` VARCHAR(255) DEFAULT NULL,
      `categoryid` INT(11) DEFAULT NULL,
      `areaid` INT(11) DEFAULT NULL,
      `author` VARCHAR(255) DEFAULT NULL,
      `yeartime` VARCHAR(255) DEFAULT NULL,
      `playtime` VARCHAR(255) DEFAULT NULL,
      `content` TEXT,
      `cs` INT(11) DEFAULT NULL,
      `score` DECIMAL(10,2) DEFAULT NULL,
      `create_time` DATETIME DEFAULT NULL,
      `update_time` DATETIME DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `fk_movie_category` (`categoryid`),
      KEY `fk_movie_area` (`areaid`),
      CONSTRAINT `fk_movie_area` FOREIGN KEY (`areaid`) REFERENCES `area` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
      CONSTRAINT `fk_movie_category` FOREIGN KEY (`categoryid`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
    ) ENGINE=INNODB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8
    

    2.解除外键约束

    `fk_movie_category`
    `fk_movie_area`
    
    ALTER TABLE movie DROP FOREIGN KEY `fk_movie_category`
    ALTER TABLE movie DROP FOREIGN KEY `fk_movie_area`
    

    至此,外键约束就解除,可以进行删除外键等操作。

    展开全文
  • 删除表不是特别常用,特别是对于存在外键关联的删除更得小心。但是在开发过程中,发现Schema设计的有问题而且要删除现有的数据库中所有的来重新创建也是常有的事情;另外在测试的时候,也有需要重新创建数据库...
  • 由于外键约束的存在,使得后期的分库分表非常麻烦,对于没有用到外键约束限制操作,并且有外键结构的数据库,删除所有外键约束很有必要,使数据库可移植性强,可拆解性强 步骤: 执行查询所有外键命令,并且拼接...

    问题:

    由于外键约束的存在,使得后期的分库分表非常麻烦,对于没有用到外键约束限制操作,并且有外键结构的数据库,删除所有外键约束很有必要,使数据库可移植性强,可拆解性强

    步骤:

    1. 执行查询所有外键命令,并且拼接删除外键的sql
    2. 复制所有sql,并执行

    具体sql代码

    SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY ',CONSTRAINT_NAME,' ;') 
    FROM information_schema.TABLE_CONSTRAINTS c 
    WHERE c.TABLE_SCHEMA='库名' AND c.CONSTRAINT_TYPE='FOREIGN KEY';
    
    # 查询的结果复制到下方继续执行
    # 例如:
    ALTER TABLE tjaurjcompany.dsb DROP FOREIGN KEY FK_DSB_RELATIONS_YGB ;
    

    在这里插入图片描述
    复制如上命令执行即可

    展开全文
  • 如何在MySQL中设置外键约束

    千次阅读 2021-01-18 21:31:24
    因为数据库有时候会由于没有通过外键的检测而使得开发人员删除,插入操作失败.他们觉得这样很麻烦其实这正式外键在强制你保证数据的完整性和一致性.这是好事儿.例如:有一个基础数据,用来记录商品的所有信息。其他...

    (1) 外键的使用:

    外键的作用,主要有两个:

    一个是让数据库自己通过外键来保证数据的完整性和一致性

    一个就是能够增加ER图的可读性

    有些人认为外键的建立会给开发时操作数据库带来很大的麻烦.因为数据库有时候会由于没有通过外键的检测而使得开发人员删除,插入操作失败.他们觉得这样很麻烦

    其实这正式外键在强制你保证数据的完整性和一致性.这是好事儿.

    例如:

    有一个基础数据表,用来记录商品的所有信息。其他表都保存商品ID。查询时需要连表来查询商品的名称。单据1的商品表中有商品ID字段,单据2的商品表中也有商品ID字段。如果不使用外键的话,当单据1,2都使用了商品ID=3的商品时,如果删除商品表中ID=3的对应记录后,再查看单据1,2的时候就会查不到商品的名称。

    当表很少的时候,有人认为可以在程序实现的时候来通过写脚本来保证数据的完整性和一致性。也就是在删除商品的操作的时候去检测单据1,2中是否已经使用了商品ID为3的商品。但是当你写完脚本之后系统有增加了一个单据3 ,他也保存商品ID找个字段。如果不用外键,你还是会出现查不到商品名称的情况。你总不能每增加一个使用商品ID的字段的单据时就回去修改你检测商品是否被使用的脚本吧,同时,引入外键会使速度和性能下降。

    (2) 添加外键的格式:

    ALTER TABLE yourtablename

    ADD [CONSTRAINT 外键名] FOREIGN KEY [id] (index_col_name, ...)

    REFERENCES tbl_name (index_col_name, ...)

    [ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]

    [ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]

    说明:

    on delete/on update,用于定义delete,update操作.以下是update,delete操作的各种约束类型:

    CASCADE:

    外键表中外键字段值会被更新,或所在的列会被删除.

    RESTRICT:

    RESTRICT也相当于no action,即不进行任何操作.即,拒绝父表update外键关联列,delete记录.

    set null:

    被父面的外键关联字段被update ,delete时,子表的外键列被设置为null.

    而对于insert,子表的外键列输入的值,只能是父表外键关联列已有的值.否则出错.

    外键定义服从下列情况:(前提条件)

    1)

    所有tables必须是InnoDB型,它们不能是临时表.因为在MySQL中只有InnoDB类型的表才支持外键.

    2)

    所有要建立外键的字段必须建立索引.

    3)

    对于非InnoDB表,FOREIGN KEY子句会被忽略掉。

    注意:

    创建外键时,定义外键名时,不能加引号.

    如: constraint 'fk_1' 或 constraint "fk_1"是错误的

    (3) 查看外键:

    SHOW CREATE TABLE ***;可以查看到新建的表的代码以及其存储引擎.也就可以看到外键的设置.

    删除外键:

    alter table drop foreign key '外键名'.

    注意:

    只有在定义外键时,用constraint 外键名 foreign key .... 方便进行外键的删除.

    若不定义,则可以:

    先输入:alter table drop foreign key -->会提示出错.此时出错信息中,会显示foreign key的系统默认外键名.--->

    用它去删除外键.

    (4) 举例

    实例一:

    4.1

    CREATE TABLE parent(id INT NOT NULL,

    PRIMARY KEY (id)

    ) TYPE=INNODB;                      -- type=innodb 相当于 engine=innodb

    CREATE TABLE child(id INT, parent_id INT,

    INDEX par_ind (parent_id),

    FOREIGN KEY (parent_id) REFERENCES parent(id)

    ON DELETE CASCADE

    ) TYPE=INNODB;

    向parent插入数据后,向child插入数据,插入时,child中的parent_id的值只能是parent中有的数据,否则插入不成功;

    删除parent记录时,child中的相应记录也会被删除;-->因为: on delete cascade

    更新parent记录时,不给更新;-->因为没定义,默认采用restrict.

    4.2

    若child如下:

    mysql>

    create table child(id int not null primary key auto_increment,parent_id int,

    index par_ind (parent_id),

    constraint fk_1 foreign key (parent_id) references

    parent(id) on update cascade on delete restrict)

    type=innodb;

    用上面的:

    1).

    则可以更新parent记录时,child中的相应记录也会被更新;-->因为: on update cascade

    2).

    不能是子表操作,影响父表.只能是父表影响子表.

    3).

    删除外键:

    alter table child drop foreign key fk_1;

    添加外键:

    alter table child add constraint fk_1 foreign key (parent_id) references

    parent(id) on update restrict on delete set null;

    (5) 多个外键存在:

    product_order表对其它两个表有外键。

    一个外键引用一个product表中的双列索引。另一个引用在customer表中的单行索引:

    CREATE TABLE product (category INT NOT NULL, id INT NOT NULL,

    price DECIMAL,

    PRIMARY KEY(category, id)) TYPE=INNODB;

    CREATE TABLE customer (id INT NOT NULL,

    PRIMARY KEY (id)) TYPE=INNODB;

    CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT,

    product_category INT NOT NULL,

    product_id INT NOT NULL,

    customer_id INT NOT NULL,

    PRIMARY KEY(no),

    -- 双外键

    INDEX (product_category, product_id),

    FOREIGN KEY (product_category, product_id)

    REFERENCES product(category, id)

    ON UPDATE CASCADE ON DELETE RESTRICT,

    -- 单外键

    INDEX (customer_id),

    FOREIGN KEY (customer_id)

    REFERENCES customer(id)) TYPE=INNODB;

    (6) 说明:

    1.若不声明on update/delete,则默认是采用restrict方式.

    2.对于外键约束,最好是采用: ON UPDATE CASCADE ON DELETE RESTRICT 的方式.

    展开全文
  • 删除表不是特别常用,特别是对于存在外键关联的删除更得小心。但是在开发过程中,发现Schema设计的有问题而且要删除现有的数据库中所有的来重新创建也是常有的事情;另外在测试的时候,也有需要重新创建数据库...
  • 数据库的外键虽然能保证数据数据一致性和完整性,但是也一定程度地影响了数据更新的性能。在开发中,我们使用PowerDesigner建立物理数据模型时,为了结构的清晰,增加...删除所有外键查询schema中所有外键名称...
  • 使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的进行创建、检索、更新和删除等操作都...MySQL外键约束条件  MySQL外键约束条件有以下几种:  · CASCADE : 从父表删除或更新行时自动删除
  • mysql 添加外键约束

    千次阅读 2022-07-28 17:46:23
    mysql添加常用约束
  • Mysql中的外键约束

    2021-11-24 20:02:17
    Mysql外键约束(FOREIGN KEY)是的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的而言,相关联字段中主键所在的就是主(父),外键所在的就是从(子) 假设我们有2个,分别是A...
  • 新建老师生,演练外键的相关操作 主创建 # 建库 CREATE DATABASE dbSchool0523 CHARACTER SET utf8 # 用库 USE dbSchool0523 # 建主 CREATE TABLE teacher( id INT PRIMARY KEY AUTO_INCREMENT, NAME ...
  • Mysql外键约束怎么删除

    千次阅读 2021-05-03 17:01:42
    记录一下碰到的问题。由于我是使用PowerDesigner来建mysql物理...它不让我删除,说存在外键约束删除会破坏他们的结构。 外键约束:让数据库自己通过外键来保证数据的完整性和一致性,让他们的关联性更强。 虽然它是有
  • SELECT @@FOREIGN_KEY_CHECKS; 查询当前外键约束是否打开 SET FOREIGN_KEY_CHECKS=1; 设置为1的时候外键约束是打开的,设置为0的时候外键约束是关闭的;
  • MySQL外键约束详解

    千次阅读 2021-12-19 08:02:01
    今天继续给大家介绍MySQL相关知识,本文主要内容是MySQL外键约束详解。 一、MySQL外键约束作用 二、外键约束创建 (一)创建外键约束的条件 (二)在创建数据时创建外键约束 (三)在创建数据后添加外键约束 三...
  • MySQL常用数据类型 int 整 型 float 单精度浮点,4字节32位 double 双精度浮点,8字节64位 char 固定长度的字符类型 varchar 可变长度的字符类型 text 文本 image 图片 decimal(5,2) 5个有效...
  • 内包含外键约束模式,数据库的视图基本操作
  • 一、利用外键约束更新并删除MySQL中的数据我们知道,开发能够维护多个的完整性的数据库驱动的应用程序是一件非常复杂的事情——即使应用程序所面对的是当前最流行的开源关系型数据库管理系统MySQL服务器时也不...
  • 是否有可能暂时禁用MySQL中的约束?我有两个Django模型,每个模型都有一个ForeignKey到另一个。 由于ForeignKey约束删除模型的实例会返回错误:cursor.execute("DELETE FROM myapp_item WHERE n = %s", n)...
  • MySQL修改外键约束关系

    千次阅读 2022-03-21 11:32:03
    2.删除外键约束:alter table 表名 drop foreign key 外键名; (主键字段和外键字段都会自动创建索引,因此我们还要将这个外键的索引删除) 3.删除索引:alter table 表名 drop index 索引名; 或 drop index ...
  • MySQL删除表时忽略外键约束如何实现方法例子分享给大家,本文是告诉大家关于MySQL删除表的时候忽略外键约束的简单实现,有兴趣的朋友赶紧来了解一下吧。删除并不常见,特别是对于具有外键关联的。但是,在开发...
  • MySql 外键约束

    2022-05-19 01:46:11
    外键约束
  • Mysql外键约束的创建与删除

    千次阅读 2022-02-20 17:45:28
    Mysql中使用外键,可以有效地将多个表格的数据“联动”起来,打破独立状态,互相影响。本文简要介绍Mysql外键约束的创建与删除
  • 【问题记录】 使用truncate 表名语句删除表中记录时报如下错误: Cannot truncate a table ...这是因为我们的中的某些字段受到了外键约束的影响,如下: CREATE TABLE `reserve_tables` ( `reserve_id` int(11) NO
  • 外键的配置1)先创建一个主,代码如下:#创建student,并添加各种约束create table student(id int primary key , #主键约束name varchar(20) , #唯一约束age int NOT NULL, #非空约束sex va...
  • MySQL的约束——外键约束

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 62,695
精华内容 25,078
热门标签
关键字:

mysql删除表的外键约束

mysql 订阅