mysql外鍵

效果

a,b,c??

如果c設置到a的外鍵,那么只能在刪除c的記錄后,才能刪除a的記錄。


https://stackoverflow.com/questions/1905470/cannot-delete-or-update-a-parent-row-a-foreign-key-constraint-fails


CREATE TABLE IF NOT EXISTS `advertisers` (

? `advertiser_id` int(11) unsigned NOT NULL AUTO_INCREMENT,

? `name` varchar(255) NOT NULL,

? `password` char(32) NOT NULL,

? `email` varchar(128) NOT NULL,

? `address` varchar(255) NOT NULL,

? `phone` varchar(255) NOT NULL,

? `fax` varchar(255) NOT NULL,

? `session_token` char(30) NOT NULL,

? PRIMARY KEY (`advertiser_id`),

? UNIQUE KEY `email` (`email`)

) ENGINE=InnoDB ?DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;



INSERT INTO `advertisers` (`advertiser_id`, `name`, `password`, `email`, `address`, `phone`, `fax`, `session_token`) VALUES

(1, 'TEST COMPANY', '', '', '', '', '', '');


CREATE TABLE IF NOT EXISTS `jobs` (

? `job_id` int(11) unsigned NOT NULL AUTO_INCREMENT,

? `advertiser_id` int(11) unsigned NOT NULL,

? `name` varchar(255) NOT NULL,

? `shortdesc` varchar(255) NOT NULL,

? `longdesc` text NOT NULL,

? `address` varchar(255) NOT NULL,

? `time_added` int(11) NOT NULL,

? `active` tinyint(1) NOT NULL,

? `moderated` tinyint(1) NOT NULL,

? PRIMARY KEY (`job_id`),

? KEY `advertiser_id` (`advertiser_id`,`active`,`moderated`)

) ENGINE=InnoDB ?DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;



INSERT INTO `jobs` (`job_id`, `advertiser_id`, `name`, `shortdesc`, `longdesc`, `address`, `active`, `moderated`) VALUES

(1, 1, 'TEST', 'TESTTEST', 'TESTTESTES', '', 0, 0);


ALTER TABLE `advertisers`

? ADD CONSTRAINT `advertisers_ibfk_1` FOREIGN KEY (`advertiser_id`) REFERENCES `jobs` (`advertiser_id`);


1.第一種情況

advertisers 設置外鍵

advertisers_ibfk_1advertiser_iddb03jobsadvertiser_idCASCADERESTRICT


那么

刪除的話,父和字表都可以刪除,如果RESTRICT,父表不能刪除


更新和插入的話,必須先插入字表,然后在插入父表,而且advertiser_id必須一致


比如

INSERT INTO `jobs` (`job_id`, `advertiser_id`, `name`, `shortdesc`, `longdesc`, `address`, `active`, `moderated`) VALUES

(1, 2, 'TEST', 'TESTTEST', 'TESTTESTES', '', 0, 0);


INSERT INTO `advertisers` (`advertiser_id`, `name`, `password`, `email`, `address`, `phone`, `fax`, `session_token`) VALUES

(2, 'TEST COMPANY', '', '', '', '', '', '');




2.第二種情況

如果兩個表都設置了外鍵

ALTER TABLE `jobs`

ADD FOREIGN KEY (`advertiser_id`) REFERENCES `advertisers` (`advertiser_id`);


advertiser

advertisers_ibfk_1advertiser_iddb03jobsadvertiser_idCASCADERESTRICT


jobs

jobs_ibfk_1advertiser_iddb03advertisersadvertiser_idRESTRICTRESTRICT



delete from advertisers where advertiser_id='2'; 無法刪除


INSERT INTO `advertisers` (`advertiser_id`, `name`, `password`, `email`, `address`, `phone`, `fax`, `session_token`) VALUES

(3, 'TEST COMPANY', '', '', '', '', '', '');


INSERT INTO `jobs` (`job_id`, `advertiser_id`, `name`, `shortdesc`, `longdesc`, `address`, `active`, `moderated`) VALUES

(2, 3, 'TEST', 'TESTTEST', 'TESTTESTES', '', 0, 0);


執行兩個insert全部報錯

[SQL]INSERT INTO `jobs` (`job_id`, `advertiser_id`, `name`, `shortdesc`, `longdesc`, `address`, `active`, `moderated`) VALUES

(2, 3, 'TEST', 'TESTTEST', 'TESTTESTES', '', 0, 0);

[Err] 1452 - Cannot add or update a child row: a foreign key constraint fails (`db03`.`jobs`, CONSTRAINT `jobs_ibfk_1` FOREIGN KEY (`advertiser_id`) REFERENCES `advertisers` (`advertiser_id`))




外鍵總結

1.CASCADERESTRICT的區別

2.如果是RESTRICT,insert必須先插入字表,就是沒有外鍵的表

3.如果是RESTRICT,delete必須先刪父表,然后再刪除子表

4.如果是整個drop 父表,還是會報錯的,只能先禁用外鍵




本文轉自 liqius 51CTO博客,原文鏈接:http://blog.51cto.com/szgb17/1971646,如需轉載請自行聯系原作者

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

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

相關文章

C++總結筆記(一)—— 基礎知識匯總

很長時間沒有再復習C的基礎知識&#xff0c;現在將一些容易遺忘的知識點做一個簡單的匯總。 1、注釋 ??分為單行注釋和多行注釋 //cout<<endl;/*int i1;cout<<i<<endl;*/2、常量 ??宏常量&#xff1a;#define &#xff0c;宏常量沒有類型&#xff0c;…

微軟自帶iscsi客戶端對iqn的要求

節點名稱&#xff1a;Microsoft iSCSI 發起程序嚴格遵守為 iSCSI 節點名稱指定的規則。這些規則也適用于 Microsoft iSCSI 發起程序節點名稱以及發現的任何目標節點名稱。構建 iSCSI 節點名稱的規則&#xff08;如 iSCSI 規范以及“iSCSI 名稱的字符串配置文件”Internet 草稿中…

【Python數據結構】——鏈表

僅僅為了記錄 # 定義一個類&#xff0c;用于創建鏈表的結點 class LNode():def __init__(self,elem,next_ None):# 類的初始化方法,在實例化類的時候會自動調用self.elem elemself.next next_list1 LNode(1)# 類的實例化&#xff0c;LNode(1)為第一個鏈表結點&#xff0c;…

天貓雙11憑什么達到1682億?這些支撐技術或許可以告訴你

歷年「雙 11」都會掀起一股買買買的購物熱潮 阿里巴巴將這個原本普通的日子賦予了非凡的意義 今年&#xff0c;天貓以 1682 億的成交額再破記錄 而在這一系列瘋狂“秒殺”動作的背后 有一個叫云化架構的技術體系支撐著十幾億人的消費狂歡 12 月 8 日 ArchSummit 阿里技術專場 來…

PageLayoutControl的基本操作

整理了下對PageLayoutControl的基本功能操作 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071…

C++總結筆記(二)——指針

一、概念 1.1 指針的原理 找到一個比較精練的概述指針原理的句子&#xff1a; 指針變量就是在內存中保存變量的地址&#xff0c;然后通過地址來訪問數據。 int a 1; int* p &a; cout << p << endl;009DFEB4可以知道變量p在內存中的值就是a的地址&#xff…

Content的startActivity方法需添加FLAG_ACTIVITY_NEW_TASK flag

Content的startActivity方法需添加FLAG_ACTIVITY_NEW_TASK flag轉載于:https://www.cnblogs.com/zhujiabin/p/5085688.html

【圖像處理】——圖像內插法

參考:https://blog.csdn.net/lovexlsforever/article/details/79508602 cv2.resize函數 當我們縮小影像時,使用CV_INTER_AREA會有比較好的效果,當我們放大影像,CV_INTER_CUBIC會有最好的效果 void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, dou…

while read line 用法詳細介紹

循環中的重定向 或許你應該在其他腳本中見過下面的這種寫法&#xff1a; while read line do … done < file 剛開始看到這種結構時&#xff0c;很難理解< file是如何與循環配合在一起工作的。因為循環內有很多條命令&#xff0c;而我們之前接觸的重定向都是為一條命令工…

C++總結筆記(三)—— 結構體

一、概念 結構體是一種可以自定義數據類型的類型格式&#xff0c;一般用struct關鍵字進行定義。 //創建食物的結構體 struct Food {//屬性名string name; //名字int Price; //價格 };結構體有三種定義變量的方法。 1.1 定義結構體后再聲明變量&#xff0c;然后在對變量的…

[輕微]WEB服務器啟用了OPTIONS方法/如何禁止DELETE,PUT,OPTIONS等協議訪問應用程序/tomcat下禁用不安全的http方法...

使用了360網站安全檢測 查到有OPTIONS方法 百度了下 https://my.oschina.net/maliang0130/blog/338725 找到這個方法奈何http.conf 找不到無論在tomcat目錄里還是linux路徑下的/usr/etc或者apache2 最后通過開源中國找到 第一步&#xff1a;修改應用程序的web.xml文件的協議 &l…

MVC 事物同時保存,更新數據庫

本人小白一枚&#xff0c;第一次寫博&#xff0c;主要用作筆記&#xff0c;怕以后忘記了&#xff0c;大神尙可路過&#xff0c;也可多多指教 事物用在同時保存更新數據時&#xff0c;及只要在事物塊的范圍內&#xff0c;有一個操作出錯則事物塊所有更新&#xff0c;保存等操作都…

【圖像處理】——正裝照換底色Python

import cv2 import numpy as np # 讀取照片 img=cv2.imread("personalPic.jpg")# 圖像縮放 img = cv2.resize(img,None,fx=0.3,fy=0.3) rows,cols,channels = img.shape print(rows,cols,channels)# img_medianBlur=cv2.medianBlur(img,3) # 中值濾波,必須是大于1的奇…

Halcon例程詳解(植物測量) —— measure_plant.hdev

文章目錄 前言一、過程1.1 篩選ROI區域1.2 分割1.3 三維建模與仿射變換1.4 確定葉子的角度分布和高度1.5 確定葉子的面積和樹干的直徑1.6 對葉子的角度進行分析二、例程詳解2.1 篩選ROI區域2.2 分割2.3 三維建模與仿射變換2.4 確定葉子的角度和高度2.5 確定葉子的面積和樹干的直…

keil5中文亂碼的解決

keil5 復制出來的中文顯示亂碼&#xff0c;該如何解決&#xff1f; 點擊Edit - Configuration &#xff0c;進入編輯器設置&#xff1a; 點擊ok &#xff0c;就可以了轉載于:https://www.cnblogs.com/alan666/p/8312100.html

spark RDD iterator中sparkEnv功能 -- (視頻筆記)

sparkEnv是spark環境變量 1、可以從其中get 緩存 2、為master workder driver 管理和保存運行時對象。 3、excutorid &#xff0c;excutor 一種為driver類型&#xff0c;一種具體處理task 內部有線程池的excutor 4、actorSystem &#xff0c;如果運行在driver 則為spark driver…

【圖像處理】——Python實現幾何變換(自定義+opencv庫)

理論知識:參考https://blog.csdn.net/on2way/article/details/40460675 Python調用opencv函數參考:https://blog.csdn.net/on2way/article/details/46801063 一、引自《數字圖像處理》的基礎知識匯總 這個很重要!!!這里需要注意的是反向映射和前向映射的區別,反…

Go語言學習資料整理

整理網上找到的Golang語言學習資料基礎基礎教程 書籍在線版Go 指南-A Tour of GoGo語言圣經&#xff08;中文版&#xff09;Effective Go中文版Go Web編程 build-web-application-with-golangGo入門指南 The Way to Go《The Way to Go》中文譯本&#xff0c;中文正式名《Go入門…

C++總結筆記(四)—— 堆棧區域劃分與引用實例解析

文章目錄前言&#x1f600;一、概念1.1. 內存分區1.1.1 堆區1.1.2 棧區1.1.3 程序代碼區1.1.4 全局/靜態存儲區1.1.5 常量存儲區1.2. 引用二、程序示例總結前言&#x1f600; 在C的內存管理中&#xff0c;堆區和棧區是一個非常重要的概念&#xff0c;理解堆棧的相關知識&#…

學習Android MediaPlayer

Android Media Playback 原文 The Android multimedia framework includes support for playing variety of common media types, so that you can easily integrate audio, video and images into your applications. You can play audio or video from media files stored in…