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...