我正在尝试在我的数据库中创建一些独特的东西。
首先我检查所有需要的行SELECT * FROM table WHERE x='y'
这给了我10行(作为一个例子)。现在我要做的是UPDATE
,它只是10行中的一行,并且在执行更新后禁止任何进一步的更新。
例如,假设这10行是照片,WHERE
子句是日期。所以在某一天只拍了10张照片。我创建了一个名为fave
的字段,我只想选择其中一个图像。基本上,这是当天最好的照片选择。
如何禁用将来的所有更新?为了防止我在任何给定的日期选择多个最喜欢的?
唯一的索引会有所帮助
看看一个简单的例子
假设我们有一张这样的桌子:
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"。
表中的每个项都应该有区别于其他项的东西。。。。就像身份证一样。
当您找到要更新的。。。只需更新一个唯一列,或使其唯一的一系列列。