mysql阻止删除正在使用的记录

时间:2010-10-10 06:07:50

标签: mysql

我有两张桌子。 product和order_items包含所有已购买的产品。

那么如何在mysql中创建一个关系,如果产品存在于order_items中,限制用户将其从产品表中删除?

感谢

3 个答案:

答案 0 :(得分:2)

您可以使用InnoDB Engine的外键执行此操作。

ALTER TABLE order_items ADD FOREIGN KEY (`p_id`) REFERENCES `products` (`p_id`);

产品上的ID必须是密钥(它可能已经是主键)。

如果您不使用InnoDB,则不能使用MySQL强制执行此操作,但必须使用您的应用程序强制执行(例如,首先检查订单中是否存在记录)。

所以对于你的表,你运行:

ALTER TABLE `order_item` ADD FOREIGN KEY (`bookid`) REFERENCES `book` (`id`);

答案 1 :(得分:0)

您正在寻找外键。具体来看“限制”选项。

http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

答案 2 :(得分:0)

我的表结构:

CREATE TABLE `book` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `userid` int(11) NOT NULL,
  `title` varchar(100) NOT NULL,
  `description` text NOT NULL,
  `author` varchar(100) NOT NULL,
  `publisher` varchar(100) NOT NULL,
  `edition` int(11) NOT NULL,
  `isbn` varchar(13) NOT NULL,
  `category` varchar(11) NOT NULL,
  `datesubmitted` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8;

CREATE TABLE `order_item` (
  `orderid` int(11) NOT NULL,
  `bookid` int(11) NOT NULL,
  KEY `Foreign` (`bookid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;