資料庫表之間的鏈

2021-09-23 15:21:21 字數 2947 閱讀 1081

cannot add or update a child row,表之間互相引用外來鍵造成「死鎖」。

cannot add or update a child row,cannot delete or update a parent row:

先建兩張表:user和card,為了簡單,都只有乙個字段:id,讓他們彼此成為對方的外來鍵:

mysql> create table user(id int primary key) character set utf8;

mysql> create table card(id int primary key, constraint fk_user_id foreign key (id) references user(id))character set utf8;

mysql> alter table user add constraint fk_card_id foreign key(id) references card(id);

此時,任何一張表都無法插入資料,也不能刪除表。

mysql> drop table user;

error 1217 (23000): cannot delete or update a parent row: a foreign key constraint fails

解決方法還是要刪除外來鍵約束,先通過:show create table user;找到外來鍵約束的名字,再把約束刪除:

mysql> alter table user drop foreign key fk_card_id;

此時就可以向user插入資料了,card表也就可以刪除了。

這個例子比較無聊,只是列出來,希望對遇到此問題的朋友有幫助。

create database employee;

use employee;

create table dept(

deptid char(13) not null primary key,

depname varchar(14) not null)

engine=innodb default charset=latin1;

insert into dept values(「12」,「開發部」);

insert into dept values(「13」,「測試部」);

insert into dept values(「11」,「財務部」);

create table empinfo(

emp_id int not null primary key,

ename char(13) not null,

deptid char(13) not null,

address varchar(20),

foreign key(deptid) references dept(deptid))

engine=innodb default charset=latin1;

insert into empinfo values(1,「wangtao」,『12』,『beijing』);

insert into empinfo values(2,「zhangsan」,『13』,『上海』);

insert into empinfo values(3,「zhangsan」,『11』,『上海』);

insert into empinfo values(4,「zhangsan」,『14』,『sz』);

create table stumyinfo(

stuid char(13) not null primary key,

name varchar(14) not null,

*** char,

address varchar(40))

engine=innodb default charset=latin1;

insert into stumyinfo values(「12」,「sz」,『female』,『beijing』);

insert into stumyinfo values(「13」,「cd」,『man』,『shanghai』);

insert into stumyinfo values(「11」,「ce」,『femal』,『shenzhen』);

create table stuban(

ban_id char(13) not null primary key,

ban_name char(13) not null,

stuid char(13) not null,

foreign key(stuid) references stumyinfo(stuid))

engine=innodb default charset=latin1;

insert into stuban values(「1003」,「001」, 「13」);

insert into stuban values(「1002」,「002」, 「12」);

insert into stuban values(「1004」,「gx」, 「11」); //報錯,不存在這個11

foreign key:將從表中的字段1作為外來鍵的字段。

references:對映到主表的字段2。

外來鍵的使用需要滿足下列的條件:(這裡涉及到了innodb的概念)

兩張表必須都是innodb表,並且它們沒有臨時表。

注:innodb是資料庫的引擎。mysql常見引擎有兩種:innodb和myisam,後者不支援外來鍵。

建立外來鍵關係的對應列必須具有相似的innodb內部資料型別。

建立外來鍵關係的對應列必須建立了索引。

面試題:你的資料庫用什麼儲存引擎?區別是?

答案:常見的有myisam和innodb。

myisam:不支援外來鍵約束。不支援事務。對資料大批量匯入時,它會邊插入資料邊建索引,所以為了提高執行效率,

應該先禁用索引,在完全匯入後再開啟索引。

innodb:支援外來鍵約束,支援事務。對索引都是單獨處理的,無需引用索引。

資料庫表與表之間的關係

表與表之間的關係有三種 一對 一 一對多 多對多 1.一對一 一張表的一條記錄一定只能與另外一張表的一條記錄進行對應 反之亦然。乙個常用表中的一條記錄,永遠只能在一張不常用表中匹配一條記錄 反過來,乙個不常用表中的一條記錄在常用表中也只能匹配一條記錄 一對一關係。在實際的開發中應用不多,因為一對一可...

關聯式資料庫 定義資料庫表之間的關係

關係型別 你和家人有很多關係。例如,你和你母親是親戚。你只有乙個母親,但她可能有幾個孩子。你和你的兄弟姐妹是親戚 你可能有很多兄弟姐妹,當然,他們也會有很多兄弟姐妹。如果你結婚了,你和你的配偶都有配偶 彼此 但一次只有乙個。資料庫關係非常相似,因為它們是表之間的關聯。關係有三種型別 建立關係 當您開...

SQLserver不同資料庫不同表之間的複製

1.將eems庫中的dec towninfo表中的資料 複製到oem庫的c towninfo中 c towninfo表事先存在 先要將表的主鍵設為自增長型別,且列出列名 set identity insert oem dbo c towninfo oninsert into oem dbo c to...