MySQL:如果不存在,则添加约束

编程入门 行业动态 更新时间:2024-10-23 23:24:53
本文介绍了MySQL:如果不存在,则添加约束的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

在我的数据库创建脚本创建脚本看起来像这样:

In my create script for my database create script looking something like this:

CREATE TABLE IF NOT EXISTS `rabbits` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `main_page_id` INT UNSIGNED COMMENT 'What page is the main one', PRIMARY KEY (`id`), KEY `main_page_id` (`main_page_id`) ) ENGINE=InnoDB; CREATE TABLE IF NOT EXISTS `rabbit_pages` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `rabbit_id` INT UNSIGNED NOT NULL, `title` VARCHAR(255) NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY (`id`), KEY `rabbit_id` (`rabbit_id`), CONSTRAINT `fk_rabbits_pages` FOREIGN KEY (`rabbit_id`) REFERENCES `rabbits` (`id`) ) ENGINE=InnoDB; ALTER TABLE `rabbits` ADD CONSTRAINT `fk_rabbits_main_page` FOREIGN KEY (`main_page_id`) REFERENCES `rabbit_pages` (`id`);

这是第一次运行,但如果我再次运行它在最后一行失败

This runs fine the first time, but if I run it again it fails on the last line there with "Duplicate key on write or update".

有一种方法我可以做一个 ADD CONSTRAINT如果不存在或类似的东西?就像我可以用 CREATE TABLE 查询?

Is there a way I can do sort of a ADD CONSTRAINT IF NOT EXISTS or something like that? Like I can do with the CREATE TABLE query?

推荐答案

。您可能需要在调用 CREATE TABLE 语句之前禁用外键,然后启用它们。这将允许您直接在 CREATE TABLE DDL中定义外键:

Interesting question. You may want to disable foreign keys before you call your CREATE TABLE statements and enable them afterwards. This will allow you to define the foreign keys directly in the CREATE TABLE DDL:

示例:

SET FOREIGN_KEY_CHECKS = 0; Query OK, 0 rows affected (0.00 sec) CREATE TABLE IF NOT EXISTS `rabbits` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `main_page_id` INT UNSIGNED COMMENT 'What page is the main one', PRIMARY KEY (`id`), KEY `main_page_id` (`main_page_id`), CONSTRAINT `fk_rabbits_main_page` FOREIGN KEY (`main_page_id`) REFERENCES `rabbit_pages` (`id`) ) ENGINE=InnoDB; Query OK, 0 rows affected (0.04 sec) CREATE TABLE IF NOT EXISTS `rabbit_pages` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `rabbit_id` INT UNSIGNED NOT NULL, `title` VARCHAR(255) NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY (`id`), KEY `rabbit_id` (`rabbit_id`), CONSTRAINT `fk_rabbits_pages` FOREIGN KEY (`rabbit_id`) REFERENCES `rabbits` (`id`) ) ENGINE=InnoDB; Query OK, 0 rows affected (0.16 sec) SET FOREIGN_KEY_CHECKS = 1; Query OK, 0 rows affected (0.00 sec)

测试用例:

INSERT INTO rabbits (name, main_page_id) VALUES ('bobby', NULL); Query OK, 1 row affected (0.02 sec) INSERT INTO rabbit_pages (rabbit_id, title, content) VALUES (1, 'My Main Page', 'Hello'); Query OK, 1 row affected (0.00 sec) SELECT * FROM rabbits; +----+-------+--------------+ | id | name | main_page_id | +----+-------+--------------+ | 1 | bobby | NULL | +----+-------+--------------+ 1 row in set (0.00 sec) SELECT * FROM rabbit_pages; +----+-----------+--------------+---------+ | id | rabbit_id | title | content | +----+-----------+--------------+---------+ | 1 | 1 | My Main Page | Hello | +----+-----------+--------------+---------+ 1 row in set (0.00 sec) UPDATE rabbits SET main_page_id = 2 WHERE id = 1; ERROR 1452 (23000): A foreign key constraint fails UPDATE rabbits SET main_page_id = 1 WHERE id = 1; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 UPDATE rabbit_pages SET rabbit_id = 2 WHERE id = 1; ERROR 1452 (23000): A foreign key constraint fails

更多推荐

MySQL:如果不存在,则添加约束

本文发布于:2023-10-16 00:19:46,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1495911.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:不存在   MySQL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!