2013-05-01 73 views
1

我有以下表格:更改外键表名称没有更新数据正确

CREATE TABLE publishers 
(
    name  VARCHAR(50)       NOT NULL, 
    status  TINYINT   DEFAULT 1   NOT NULL, 
    CONSTRAINT publishers_pk PRIMARY KEY (name) 
); 

CREATE TABLE titles 
(
    id   INT     NOT NULL AUTO_INCREMENT, 
    publisher VARCHAR(50), 
    title  VARCHAR(50)   NOT NULL, 
    status  ENUM('active', 'announced', 'inactive'), 
    discount TINYINT    NOT NULL, 
    CONSTRAINT title_pk PRIMARY KEY (id), 
    CONSTRAINT title_fk FOREIGN KEY (publisher) 
     REFERENCES publishers (name) 
     ON DELETE SET NULL 
     ON UPDATE CASCADE 
); 

当我在出版商改变“名”,它不是在titles表改变“发行人” 。为什么这种行为是这样工作的?

回答

1

你知道你在用什么引擎吗?我读到MySQL与默认引擎将解析外键约束,但实际上没有做任何事情。是否有可能使用MyISAM引擎?

http://dev.mysql.com/doc/refman/5.5/en/ansi-diff-foreign-keys.html

+0

我的主机确实实现了MyISAM引擎。有没有办法改变引擎而不会搞乱我的数据? – JimRomeFan 2013-05-01 00:32:14

+0

这个链接实际上有一些很好的例子,按引擎划分,看起来你可以完成你想要做的事情,只是略微不同于你如何做它:http://dev.mysql.com/tech-resources/ articles/mysql-enforcing-foreign-keys.html - 触发器。 – mikey 2013-05-01 00:34:32

+0

至于从一个引擎更改为另一个引擎,我不知道它是什么,因为我从来没有做过,你可以搜索它我可以找到这个链接:http://dev.mysql.com/doc/ refman/5.6/en /转换表到innodb.html – mikey 2013-05-01 00:39:57