2012-04-30 16 views
1

私は外部キーを使用して2つのテーブルをリンクしようとしています。 1つのテーブルはユーザであり、もう1つはuserInfoです。ユーザーを削除すると、その情報も削除する必要があります。ユーザーテーブルからユーザーを削除すると、usersInfoのエントリはそのまま残ります。私は何が間違っているのかわからない。SQLの外部キーと他のテーブルの参照

CREATE TABLE users (
userid INT AUTO_INCREMENT PRIMARY KEY, 
username VARCHAR(30) NOT NULL, 
email VARCHAR(50) NOT NULL, 
password VARCHAR(32) NOT NULL, 
userlevel INT UNSIGNED NOT NULL, 
rating int, 
organization int(1), 
timestamp varchar(20) NOT NULL, 
); 

ここは私のuserinfoのテーブルです。はい、私はそれが同じテーブルにある可能性があることを知っています。私は簡単な例のためにこれをやっています。

CREATE TABLE usersInfo(
userid int auto_increment NOT NULL, 
userlocation varchar(50), 
about varchar(300), 
userkeywords varchar(150), 
FOREIGN KEY(userid) REFERENCES users(userid) ON DELETE CASCADE ON UPDATE CASCADE 
); 

編集 - 問題が解決しました。助けてくれた皆様に感謝します。

CREATE TABLEステートメントの最後にTYPE = InnoDBが追加されました。

+1

最初のクエリで 'timestamp varchar(20)NOT NULL'の後にコンマを削除しても、うまく動作します。これはMySQL版ですか?これらは外部キー関係をしないMyISAMテーブルですが、外部キー関係を宣言してもエラーを投げないでしょうか? – Daan

+0

わかりません。私はそれがデフォルトでInnodbだと仮定しました。どうすれば確認できますか? – user1104854

+1

あなたのMySQLバージョンは何ですか?デフォルトはMyISAMでMySQL 5.5.5(http://dev.mysql.com/doc/refman/5.5/en/innodb-default-se.html)までで、あなたは 'CREATE TABLE'でエンジンを指定していません5.5.5より下のものを使用している場合、これらはMyISAMテーブルです。これを確認するには、 'SHOW TABLES'クエリを使用して既存のテーブルに使用されているエンジンを確認することもできます。 – Daan

答えて

3

CREATE TABLEステートメントに​​を追加して、InnoDBテーブルであることを確認してください。 5.5.5より下のバージョンのMySQLは、デフォルトでMyISAMになります。MyISAMは外部キー関係をサポートしていませんが、外部キー関係を定義してもエラーは発生しません。

関連する問題