如何使表中的某个域的值唯一?

alphajin 2009-06-03 04:32:08
加精
数据表中某个域,里面的值只能是“true”或者是“false”,同时只能让一条记录是“true”,其他都是“false”

在MySql中是如何做到的,谢谢!
...全文
432 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
alphajin 2009-06-09
  • 打赏
  • 举报
回复
已经不需要这么做了,但是还是感谢,结贴走人!

LichKing 2009-06-04
  • 打赏
  • 举报
回复
study
showjim 2009-06-04
  • 打赏
  • 举报
回复
MSSQL修改选中记录(未做同步保护):
update TABLE set f=(case when ID=@id then 1 else 0 end) where ID=(select top 1 ID from TABLE where f=1) or ID=@id
banyuanhuan 2009-06-04
  • 打赏
  • 举报
回复
所以只能通过 触发器来实现
ychatou1220 2009-06-04
  • 打赏
  • 举报
回复
看看
owen_008 2009-06-04
  • 打赏
  • 举报
回复

看来我要加油了~~呵呵~~
sweet_jun 2009-06-04
  • 打赏
  • 举报
回复
受教了!Thank you
java_myself 2009-06-03
  • 打赏
  • 举报
回复
sql数据库和mysql数据库的差距有多大 大哥们请给于指点
cycttt 2009-06-03
  • 打赏
  • 举报
回复
看看
yooyoozoo 2009-06-03
  • 打赏
  • 举报
回复
代码已出 LZ可以试试看
xinjd 2009-06-03
  • 打赏
  • 举报
回复
学习中……
lixiankun001 2009-06-03
  • 打赏
  • 举报
回复
学习了!!~
ACMAIN_CHM 2009-06-03
  • 打赏
  • 举报
回复

见如下例子。

mysql> create table ta (
-> discountid int auto_increment primary key ,
-> `selected` BOOL
-> );
Query OK, 0 rows affected (0.09 sec)

mysql>
mysql> delimiter |
mysql>
mysql> CREATE TRIGGER ta_bi BEFORE INSERT ON ta
-> FOR EACH ROW BEGIN
-> DECLARE bExist int default 0;
-> select count(*) into bExist from ta where selected;
-> if bExist>0 and new.selected then
-> set new.discountid=1;
-> end if;
-> END;
-> |
Query OK, 0 rows affected (0.08 sec)

mysql>
mysql> delimiter ;
mysql> insert into ta values (null,true);
Query OK, 1 row affected (0.06 sec)

mysql> insert into ta values (null,true);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> insert into ta values (null,false);
Query OK, 1 row affected (0.06 sec)

mysql> insert into ta values (null,false);
Query OK, 1 row affected (0.08 sec)

mysql> insert into ta values (null,true);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> select * from ta;
+------------+----------+
| discountid | selected |
+------------+----------+
| 1 | 1 |
| 2 | 0 |
| 3 | 0 |
+------------+----------+
3 rows in set (0.00 sec)

mysql>
alphajin 2009-06-03
  • 打赏
  • 举报
回复
discountid是auto_increment的primary key

WWWWA 2009-06-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 WWWWA 的回复:]
在selected这个域中,只能有一个TRUE,可以有很多的FALSE。:·什么标准?
[/Quote]
以discountid最大?
alphajin 2009-06-03
  • 打赏
  • 举报
回复
不是没有实现吗?

ACMAIN_CHM 2009-06-03
  • 打赏
  • 举报
回复

整个表中只允许有一个 true ? 你给的例子已经有两个 true 了。
alphajin 2009-06-03
  • 打赏
  • 举报
回复
如何用触发器呢?能否给个例子


WWWWA 2009-06-03
  • 打赏
  • 举报
回复
在selected这个域中,只能有一个TRUE,可以有很多的FALSE。:·什么标准?
alphajin 2009-06-03
  • 打赏
  • 举报
回复
+------------+------+-------+----------+----------+
| discountid | rate | count | discount | selected |
+------------+------+-------+----------+----------+
| 1 | 0.8 | 0 | 0 | TRUE |
| 2 | 0.2 | 20 | 125.0 | TRUE |
| 3 | 0.9 | 50 | 300 | FALSE |
+------------+------+-------+----------+----------+

在selected这个域中,只能有一个TRUE,可以有很多的FALSE。

理解了么?

加载更多回复(2)

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧