激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - 新手必學的mysql外鍵設置方式

新手必學的mysql外鍵設置方式

2022-02-15 21:04甜可兒 Mysql

MySQL外鍵約束(FOREIGN KEY)用來在兩個表的數據之間建立鏈接,它可以是一列或者多列,一個表可以有一個或多個外鍵,下面這篇文章主要給大家介紹了關于mysql外鍵設置的相關資料,需要的朋友可以參考下

外鍵的作用

保持數據一致性,完整性,主要目的是控制存儲在外鍵表中的數據。 使兩張表形成關聯,外鍵只能引用外表中的列的值!

例如:

a b 兩個表

a表中存有 客戶號,客戶名稱

b表中存有 每個客戶的訂單

有了外鍵后

你只能在確信b 表中沒有客戶x的訂單后,才可以在a表中刪除客戶x

建立外鍵的前提: 本表的列必須與外鍵類型相同(外鍵必須是外表主鍵)。

指定主鍵關鍵字: foreign key(列名)

引用外鍵關鍵字: references <外鍵表名>(外鍵列名)

事件觸發限制: on delete和on update , 可設參數cascade(跟隨外鍵改動), restrict(限制外表中的外鍵改動),set null(設空值),set default(設默認值),[默認]no action

例如:

outtable表 主鍵 id 類型 int

創建含有外鍵的表:

?
1
2
3
4
create table temp(
id int,
name char(20),
foreign key(id) references outtable(id) on delete cascade on update cascade);

說明:把id列 設為外鍵 參照外表outtable的id列 當外鍵的值刪除 本表中對應的列篩除 當外鍵的值改變 本表中對應的列值改變。

mysql外鍵設置方式

mysql外鍵設置方式/在創建索引時,可指定在delete/update父表時,對子表進行的相應操作,

包括: restrict, cascade,set null 和 no action ,set default.

  • restrict,no action:
    立即檢查外鍵約束,如果子表有匹配記錄,父表關聯記錄不能執行 delete/update 操作;
  • cascade:
    父表delete /update時,子表對應記錄隨之 delete/update ;
  • set null:
    父表在delete /update時,子表對應字段被set null,此時留意子表外鍵不能設置為not null ;
  • set default:
    父表有delete/update時,子表將外鍵設置成一個默認的值,但是 innodb不能識別,實際mysql5.5之后默認的存儲引擎都是innodb,所以不推薦設置該外鍵方式。如果你的環境mysql是5.5之前,默認存儲引擎是myisam,則可以考慮。

選擇set null ,setdefault,cascade 時要謹慎,可能因為錯誤操作導致數據丟失。

如果以上描述并不能理解透徹,可以參看下面例子。

country 表是父表,country_id是主鍵,city是子表,外鍵為country_id,和country表的主鍵country_id對應。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
create table country(
    country_id smallint unsigned not null auto_increment,
    country varchar(50) not null,
    last_update timestamp not null default current_timestamp on update current_timestamp,
    primary key(country_id)
)engine=innodb default charset=utf8;
 
create table `city` (
  `city_id` smallint(5) unsigned not null auto_increment,
  `city` varchar(50) not null,
  `country_id` smallint(5) unsigned not null,
  `last_update` timestamp not null default current_timestamp on update current_timestamp,
  primary key  (`city_id`),
  key `idx_fk_country_id` (`country_id`),
  constraint `fk_city_country` foreign key (`country_id`) references `country` (`country_id`)  on delete restrict   on update cascade
) engine=innodb default charset=utf8;

新手必學的mysql外鍵設置方式

新手必學的mysql外鍵設置方式

例如對上面新建的兩個表,子表外鍵指定為:on delete restrict on update cascade 方式,在主表刪除記錄的時候,若子表有對應記錄,則不允許刪除;主表更新記錄時,如果子表有匹配記錄,則子表對應記錄 隨之更新。

eg:

?
1
2
3
4
insert into country values(1,'wq',now());
select * from country;
insert into city values(222,'tom',1,now());
select * from city;

新手必學的mysql外鍵設置方式

?
1
2
3
4
delete from country where country_id=1;
update country set country_id=100 where country_id=1;
select * from country where country='wq';
select * from city where city='tom';

新手必學的mysql外鍵設置方式

總結

到此這篇關于mysql外鍵設置方式的文章就介紹到這了,更多相關mysql外鍵設置方式內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/qq_17033579/article/details/82107733

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 密室逃脱第一季免费观看完整在线 | 久久久中文 | 日本一区二区免费在线播放 | 亚洲最大av网站 | 国产精品99久久久久久久vr | av在线直播观看 | 中文字幕亚洲一区二区三区 | 久久国产免费视频 | 亚洲3p激情在线观看 | 国产 日韩 亚洲 欧美 | 国产精品视频海角社区88 | 国产午夜精品一区二区三区免费 | 黄色片一区二区 | 99精品视频99 | 日本在线不卡免费 | 欧洲黄视频| 好吊色欧美一区二区三区四区 | 国产chinesehd精品91 | 日韩精品久久久久久久电影99爱 | 欧美成人免费看 | 久久99精品国产自在现线 | 日本黄色片免费播放 | 国产一级在线观看视频 | 成人aaaaa片毛片按摩 | 日韩精品一区二区免费视频 | 亚洲综合色视频在线观看 | 黄色av免费电影 | 亚欧在线免费观看 | 国内精品免费一区二区2001 | 欧美视频在线一区二区三区 | 久久艳片 | 久草在线观看首页 | 精品国产乱码久久久久久预案 | 91看片淫黄大片欧美看国产片 | 精品午夜久久 | 欧美成人免费一区二区三区 | 蜜桃精品视频 | 国产乱一区二区三区视频 | 久久在线精品视频 | 国产免费激情视频 | 欧美a级在线免费观看 |