2013-05-01 67 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