其中x=y mysql查询的唯一状态


Unique status where x=y mysql query

我正在尝试在我的数据库中创建一些独特的东西。

首先我检查所有需要的行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"。

表中的每个项都应该有区别于其他项的东西。。。。就像身份证一样。

当您找到要更新的。。。只需更新一个唯一列,或使其唯一的一系列列。