我正在尝试在我的数据库中创建一些独特的东西。
首先,我检查所有必需的行SELECT * FROM table WHERE x='y'
这给了我10行(作为例子)。现在我要做的是UPDATE
一个10行中只有一行的字段,并且在执行更新后不允许任何进一步的更新。
例如,假设10行是照片,WHERE
子句是日期。因此,在某个特定日期,只拍摄了10张照片。我创建了一个名为fave
的字段,我想只选择其中一个图像。基本上这是该日期最好的照片选择。
如何禁用此处的所有未来更新?为了防止我在任何指定日期选择多个收藏夹?
答案 0 :(得分:1)
独特的索引可以提供帮助。
看一个简单的例子
假设我们有这样一个表:
CREATE TABLE photos(
photo_id int primary key ,
dat date not null,
fave enum ('y')
);
其中fave enum ('y')
声明,列fave
可以具有'y'值或NULL。
然后在dat + fave列上定义唯一索引:
CREATE UNIQUE INDEX only_one_fav ON photos( dat, fave );
索引只允许给定dat + fav组合的一行,禁止两个同意行 - 但这不适用于null。
看一下这个演示:http://www.sqlfiddle.com/#!2/2f28a8/3
CREATE TABLE photos(
photo_id int primary key ,
dat date not null,
fave enum ('y')
);
insert into photos( photo_id, dat ) values
(1,'2013-11-02'),(2,'2013-11-02'),(3,'2013-11-02'),(4,'2013-11-02'),(5,'2013-11-02'),
(11,'2013-11-05'),(12,'2013-11-05'),(13,'2013-11-05'),(14,'2013-11-05'),(15,'2013-11-05');
CREATE UNIQUE INDEX only_one_fav ON photos( dat, fave );
UPDATE photos SET fave = 'y' WHERE photo_id = 2;
UPDATE photos SET fave = 'y' WHERE photo_id =14;
-- UPDATE photos SET fave = 'y' WHERE photo_id = 4;
有两个日期,每个日期拍摄5张照片
尝试在此演示中取消推荐最后一个UPDATE命令并点击Build schema
按钮 - 您将收到一条错误消息 - MySql不会允许两个最喜欢的照片ID:同一日期的2 + 4:'2013-11-02 ”。
答案 1 :(得分:-2)
表格中的每个项目都应该有一些区别于其他项目....就像一个ID。
当您找到要更新的那个时...只需更新一个唯一列或一系列使其唯一的列。