2010-01-24 214 views
0

我已经在表中设置了外键完整性。但我能够删除主表中的数据,这是子表中的参考。 会出现什么问题 实际上,它应该说删除错误就像所有引用的表数据必须被删除。mysql外键约束

+2

? “对于除InnoDB以外的存储引擎,MySQL服务器会分析CREATE TABLE语句中的FOREIGN KEY语法,但不会使用或存储它。” (MySQL参考手册http://dev.mysql.com/doc/refman/5.1/en/ansi-diff-foreign-keys.html) – 2010-01-24 15:57:52

+0

storge引擎是ENGINE = MyISAM – ASD 2010-01-24 16:01:37

回答

1

你指定ON DELETE CASCADE?当你创建你的FK?不知道您正在使用的发动机无论是

例如

CREATE TABLE parent (id INT NOT NULL, 
        PRIMARY KEY (id) 
) ENGINE=INNODB; 
CREATE TABLE child (id INT, parent_id INT, 
        INDEX par_ind (parent_id), 
        FOREIGN KEY (parent_id) REFERENCES parent(id) 
         ON DELETE CASCADE 
) ENGINE=INNODB; 

这里更多http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html您正在使用哪个存储引擎

+0

这两个表必须是InnoDB表,并且innodb的性能不及myisam – 2010-01-24 16:02:06

+0

其实我已经创建了表格,现在我有数据了。 您是否意味着我需要重新创建所有设置外键的表。 – ASD 2010-01-24 16:02:44

+0

外键约束在那里。除非存储引擎设置为InnoDB,否则MySQL不会强制执行它们。您可以执行“ALTER TABLE [table name] ENGINE = InnoDB”(http://dev.mysql.com/doc/refman/5.1/en/alter-table.html),而不是重新创建表。 – 2010-01-24 16:12:47