我的论坛中有一个类别表:
CREATE TABLE categories (
category_id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(60) NOT NULL,
PRIMARY KEY (category_id),
UNIQUE (name)
) ENGINE = MYISAM;
正如您所看到的,我将name
列设置为UNIQUE,因为我打算允许用户在创建新帖子时按照自己的意愿自由创建新类别。
现在,我正在创建edit.php page
以允许用户编辑自己的帖子,我允许他们根据需要更改帖子的类别。
假设edit.php
页面的更新查询一切顺利。
然而,这里出现的问题是,当用户访问edit.php页面以更新他自己的帖子类别时,他立即改变主意,他不想改变它了。他点击了提交按钮。发生错误Duplicate entry 'x' for key y
。我猜测根本原因在于表中的unique(name)
。
那么,我应该remove
name
列的 UNIQUE 类型并牺牲允许用户自由创建新类别的功能吗?
或者,如果我能保留它,您对一段代码的帮助将不胜感激!
由于
答案 0 :(得分:1)
这不是您可以使用SQL解决的数据库问题。这是一个应用程序问题。如果不必更改或添加任何类别,则应用程序不应尝试更改或添加类别。删除UNIQUE属性可能会允许应用程序进行不必要的更改,这对我来说似乎不是一个很好的解决方案。
无论如何,我建议你使用InnoDB。 MyISAM不为这种表提供任何好处。
答案 1 :(得分:0)
在更新类别之前添加重复验证这是必需的
对于这种情况,在更新查询中附加另一个条件name != '$_POST["name"]'
。
UPDATE categories SET name = '$_POST["name"]'
WHERE category_id = '$_POST["category_id"]'
AND name != '$_POST["name"]'