2010-12-22 6 views
3

Ich habe mysql Fehler mit Code 1451.mysql Fehler 1451

Kann nicht löschen oder eine übergeordnete Zeile aktualisieren: a. Fremdschlüssel fehlschlägt (online_store_adminosa_admin_logs, CONSTRAINT fk_admins_logs FOREIGN KEY (aid) LITERATUR osa_admins (aid)

)

hier sQL-Anweisung:

 

drop table if exists osa_admins; 
create table if not exists osa_admins(
aid int unsigned not null auto_increment, 
uid varchar(50) not null, 
pass char(41) not null, 
erp_id int unsigned not null, 
last_login int unsigned not null, 
is_block tinyint unsigned not null, 
menus varchar(50) not null, 
is_login tinyint unsigned not null, 
ip_login char(15) not null, 

constraint idx_osa_admins primary key using btree(aid) 
); 
insert into osa_admins value 
(NULL, 'root', password('6789'), '0', '0', '0', '*', '0', '127.000.000.001'), 
(NULL, 'ryu', password('6789'), '0', '0', '0', '*', '0', '127.000.000.001'); 

drop table if exists osa_admin_logs; 
create table if not exists osa_admin_logs(
lid bigint unsigned not null, 
aid int unsigned not null, 
dates int unsigned not null, 
logs text not null, 

constraint idx_osa_admin_logs primary key using btree(lid), 
constraint fk_admins_logs foreign key (aid) 
    references osa_admins(aid) 
    match full 
    on update cascade 
    on delete cascade 
); 
insert into osa_admin_logs values 
(NULL, '2', '0', 'some action here'), 
(NULL, '2', '0', 'again, some action here'); 

Problem kommen, wenn ich diese Anweisung verwenden:

aus osa_admins streichen aid = '2';

ich glaube, ich hatte "on delete cascade" eingestellt. Kann jemand Kaskade löschen? also muss ich manuell nicht die Daten von osa_admin_logs lesen. Oh, ich benutze Innodb als Db-Engine (Standard-MySQL, die ich habe).

Und tut mir leid, ich stelle die gleiche Frage, die Antwort hatte, lassen Sie mich wissen, wo ich meine Frage bekommen kann.

Vielen Dank.

Antwort

7

die match full vom

Verwendung einer expliziten MATCH-Klausel wird nicht über die UPDATE Klauseln werden ignoriert Einschränkung entfernen bestimmten Effekt, und auch bewirkt, dass ON DELETE und ON. Bei diesen Gründen sollte die Angabe von MATCH vermieden werden.

MySql docs http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

+0

Danke. Es funktioniert. Tut mir leid, ich habe nicht gut gelesen. – crazymob

8

Verwenden Sie die folgenden Befehle zur Verfügung:

SET foreign_key_checks = 0; 
DELETE FROM your_table_name WHERE your_condition; 
SET foreign_key_checks = 1; 
+0

Das ist sehr gefährlich; es teilt dem Computer lediglich mit, die Einschränkungen zu ignorieren. Die akzeptierte Antwort ist eine bessere Lösung. Ich denke, dass Sie auch den 'DELETE'-Teil der Abfrage zu einem' SELECT * FROM' ändern werden, es kann gültige Ergebnisse liefern. – Sablefoste