私は現在、自分自身をmySQLで教えているので、私の営業データベースに新しい行を挿入する際に問題が発生しています。MySQLの外部キー検証に関する問題
商品の販売が行われるたびに、購入者のID(ユーザーテーブルからの外部キー)と購入者の名前(ユーザーテーブルからの外部キー)を含む新しい行が販売データベースに追加されます)。
しかし、私の問題は次のとおりです。 id=10
のユーザーの販売テーブルに新しいレコードを挿入し、name='Roger Smith'
の代わりにname='Peter Smith'
を間違って入力した場合は、'Peter Smith'
がユーザーテーブルのid=10
の名前ではなくても正常に処理されます。
誰かが私が間違っている方向に私を指摘できますか?どうもありがとう。
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) DEFAULT NULL,
`dob` date DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=InnoDB
CREATE TABLE `sales` (
`salesid` int(11) NOT NULL AUTO_INCREMENT,
`productname` varchar(30) DEFAULT NULL,
`productprice` decimal(10,0) DEFAULT NULL,
`quantity` int(11) DEFAULT NULL,
`userid` int(11) NOT NULL,
`user_name` varchar(30) DEFAULT NULL,
PRIMARY KEY (`salesid`),
KEY `FK_sales` (`userid`),
KEY `FK_name` (`user_name`),
CONSTRAINT `FK_name` FOREIGN KEY (`user_name`) REFERENCES `users` (`name`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `FK_sales` FOREIGN KEY (`userid`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB
実際にはsalesテーブルとuserテーブルは1NFにもありません。いずれのテーブルにもナチュラルキーがないからです。 – nicomp