x = y mysql查询的唯一状态

时间:2013-12-06 19:57:42

标签: php mysql sql select

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

首先,我检查所有必需的行SELECT * FROM table WHERE x='y'

这给了我10行(作为例子)。现在我要做的是UPDATE一个10行中只有一行的字段,并且在执行更新后不允许任何进一步的更新。

例如,假设10行是照片,WHERE子句是日期。因此,在某个特定日期,只拍摄了10张照片。我创建了一个名为fave的字段,我想只选择其中一个图像。基本上这是该日期最好的照片选择。

如何禁用此处的所有未来更新?为了防止我在任何指定日期选择多个收藏夹?

2 个答案:

答案 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。

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