2011-08-17 5 views
2

大きなinnodbテーブルでいくつかの変更操作を実行する必要がありました。私は古いテーブルのようなテーブルを作成し、それを変更するのが最良だとわかりました。私は今、すべてのテーブルがまだ古いテーブルを参照していることがわかりました。完全に私の質問を理解するためにbook_idのInnodbリネームテーブル原因の関係の問題

CREATE table books2 LIKE books; 
ALTER TABLE `books2` DROP `not_needed_fields`; 
INSERT INTO books2 (fields) SELECT fields FROM books; 
RENAME TABLE books TO old_books; 
RENAME TABLE books2 TO books; 

すべての外部キーは、私が本表にそれを変更したいold_booksとの関係を示している次のクエリを考えてみてください。これどうやってするの?

答えて

1

FKを再作成する必要があります。 -

-- Drop FK that refers to old_books 
ALTER TABLE child_table 
    DROP FOREIGN KEY FK_books; 

-- Add new FK 
ALTER TABLE child_table 
    ADD CONSTRAINT FK_books FOREIGN KEY (book_id) 
    REFERENCES books(book_id);