mysql添加約束之前不滿足_MySQL:添加約束(如果不存在)

小編典典

有趣的問題。您可能需要在調用CREATE TABLE語句之前禁用外鍵,然后再啟用它們。這將允許您直接在CREATE TABLEDDL中定義外鍵:

例:

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

2020-05-17

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539688.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539688.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539688.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

oracle函數trunc的使用

原文:http://blog.csdn.net/eleven204/article/details/6712538 -------------------------------------- 1、日期比較時精確到日,可以使用 TRUNC(sysdate,dd)函數。 函數支持格式有:yyyy MM dd hh Mi,沒有精確到 秒 可以用 se…

Mycat快速入門

1.Mycat介紹 Mycat 是一個開源的分布式數據庫系統,是一個實現了 MySQL 協議的的Server,前端用戶可以把它看作是一個數據庫代理,用 MySQL 客戶端工具和命令行訪問,而其后端可以用MySQL 原生(Native)協議與多…

python字符串常量有什么區別_Python經典面試題:is與==的區別

is用于判斷兩個對象是否為同一個對象,具體來說是兩個對象在內存中的位置是否相同。python為了提高效率,節省內存,在實現上大量使用了緩沖池技術和字符串intern技術。整數和字符串是不可變對象,也就意味著可以用來共享,…

left join、right join、inner join的區別

left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄 right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄 inner join(等值連接) 只返回兩個表中聯結字段相等的行 舉例如下: ----------------------------------------…

Javascript Proxy對象 簡介

Javascript Proxy對象 簡介 本文轉載自:眾成翻譯 譯者:eJayYoung 鏈接:http://www.zcfy.cc/article/4755 原文:https://blog.campvanilla.com/advanced-guide-javascript-proxy-objects-introduction-301c0fce9432 Javascript …

App架構經驗總結

原文地址:http://www.iteye.com/news/31472-------------------------------------------------------------架構因人而異,不同的架構師大多會有不同的看法;架構也因項目而異,不同的項目需求不同,相應的架構也會不同。…

python數字排序 循環_【python-leetcode448-循環排序】找到所有數組中消失的數字

問題描述:給定一個范圍在 1 ≤ a[i] ≤ n ( n 數組大小 ) 的 整型數組,數組中的元素一些出現了兩次,另一些只出現一次。找到所有在 [1, n] 范圍之間沒有出現在數組中的數字。您能在不使用額外空間且時間復雜度為O(n)的情況下完成這個任務嗎…

saiku+kettle整合(六)olap操作

title: saikukettle整合(六)olap操作 tags: categories: saiku date: 2016-08-25 18:18:54 使用saiku可以對應使用相關olap操作 OLAP的基本操作 我們已經知道OLAP的操作是以查詢——也就是數據庫的SELECT操作為主,但是查詢可以很復雜&#xf…

攜程Docker實踐

原文地址:http://www.iteye.com/news/31468 請點擊原文閱讀 ---------------------以下是原文---------------------- 從去年底開始,攜程開始計劃把Docker引入到攜程的云平臺,這是系統研發部一部分的工作任務,攜程系統研…

mysql全文索引thinkphp_ThinkPHP5 使用迅搜 (XunSearch) 實現全文檢索實例指導

前期準備入坑了一天,折騰的無語,個人觀點:【文檔太差,適合學習思路,不建議入坑】背景最近在整理全文檢索解決方案注意到 xunsearch 的評價很高,在此記錄一番場景描述此處作為對 xunsearch 的初次使用&#…

為何有些程序員總是想要“干掉”產品經理?

好了,我準備去和產品經理做斗爭去了,請祝我好運吧!小編花了大量時間收集了很多干貨編程學習資源,其中資源包括 算法,大數據,人工智能,Python,Android,iOS,Jav…

多個left join 產生多個結果

select a.*,to_char(To_date(20160403000000, yyyyMMddhh24miss),yyyy/mm/dd) as omc_start_time,to_char(To_date(20160404000000, yyyyMMddhh24miss),yyyy/mm/dd) as omc_end_time,ROUND(sc."切換成功率",2) AS "OMC-源小區切換成功率%",ROUND(sc."…

查看進程占用,并kill掉

今天發現8899端口被占,服務器啟動失敗,用了下面的命令解決。 [rootltesqm Toolbox]# netstat -tunlp |grep 8899 tcp 0 0 :::8899 :::* LISTEN 28279/java [rootltesqm Toolbox]…

Spark算子篇 --Spark算子之combineByKey詳解

一。概念 rdd.combineByKey(lambda x:"%d_" %x, lambda a,b:"%s%s" %(a,b), lambda a,b:"%s$%s" %(a,b))三個參數(都是函數)第一個參數:給定一個初始值,用函數生成初始值。第二個參數:c…

mysql proxy 主從_【MYSQL知識必知必會】MySQL主從復制讀寫分離(基于mysql-proxy實現)...

MySQL主從復制讀寫分離(基于mysql-proxy實現)http://mirror.bit.edu.cn/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-glibc2.3-x86-64bit.tar.gz解壓tar zxvf mysql-proxy-0.8.4-linux-glibc2.3-x86-64bit.tar.gz創建mysql-proxy帳號并授權分別在主從數據庫中創建mys…

SecureCRT防止自動斷開

今天在寧波連接上海的linux庫,是外網訪問內網,使用了nat123這個軟件映射的。 發現SecureCRT連接后,過幾分鐘就自動斷開,導致使用SecureCRT做跳轉機的其他應用使用起來很不方便。 于是設置了下SecureCRT。

mysql 主主結構_高性能mysql主主架構

(3)配置參數說明server-id:ID值唯一的標識了復制群集中的主從服務器,因此它們必須各不相同。master_id必須為1到232–1之間的一個正整數值,slave_id值必須為2到232–1之間的一個正整數值。log-bin:表示打開binlog,打開該選項才可以…

解決ios編譯swift報錯pcm was built: mtime changed

問題 編譯ios工程失敗時,其中的幾個swift文件報以下錯 /Users/tomes/code/project/xxx.swift File /Users/tomes/Library/Developer/Xcode/DerivedData/Spec-dgyhrnmgvfkjkqbboklnfgrudqip/Build/Products/Debug-iphoneos/xxxx.framework/Headers/xxxx.h has been…

AI工程師職業規劃和學習路線完整版

AI工程師職業規劃和學習路線完整版 如何成為一名機器學習算法工程師 成為一名合格的開發工程師不是一件簡單的事情,需要掌握從開發到調試到優化等一系列能 力,這些能力中的每一項掌握起來都需要足夠的努力和經驗。而要成為一名合格的機器學習算法工程師&…

oracle 多個with as

主要看多個with的格式 [sql] view plaincopy WITH T3 AS ( SELECT T1.ID, T1.CODE1, T2.DESCRIPTION FROM TB_DATA T1, TB_CODE T2 WHERE T1.CODE1 T2.CODE ), T4 AS ( SELECT T1.ID, T1.CODE2, T2.DESCRIPTION FROM TB_DATA T1, TB_CODE T2 WHERE T1.C…