-4

次のSQLを検討してください。別のテーブルを参照するテーブルを作成しようとしています。外部キーは強制されておらず、理由はわかりません。

--drop database test;
create database test;
use test;

create table person (
    id         int         auto_increment,
    name         varchar(30),
    primary key (id)
);

create table message (
    id         int         auto_increment,
    senderid    int,
    receiverid    int,
    primary key (id),
    foreign key (senderid) references person(id),
    foreign key (receiverid) references person(id)
);

を実行するSHOW CREATE TABLE messageと、次のようになります。

CREATE TABLE `message` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `senderid` int(11) DEFAULT NULL,
 `receiverid` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `senderid` (`senderid`),
  KEY `receiverid` (`receiverid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

外部キーsenderid/receiveridはそれ自体であることに注意してください。人に行を追加せずに:

mysql> insert into message (senderid, receiverid) values (1,2);
Query OK, 1 row affected (0.00 sec)

mysql> select * from person;
Empty set (0.00 sec)

mysql> select * from message;
+----+----------+------------+
| id | senderid | receiverid |
+----+----------+------------+
|  1 |        1 |          2 |
+----+----------+------------+
1 row in set (0.00 sec)

なぜ私の外部キーが機能しないのですか?

4

1 に答える 1

1

あなたは使用していますが、外部キーの違いMyISAMで文書化されているように:

以外のストレージエンジンの場合InnoDB、MySQLサーバーはステートメントのFOREIGN KEY構文を解析しますがCREATE TABLE、それを使用または保存しません。

代わりに使用することをお勧めしますInnoDB

于 2012-10-22T23:46:52.883 に答える