关于数据库数据唯一性保证

数据库数据唯一性
在项目问题不断出现情况下,几经经验,得出一个结论:数据库数据的唯一性无法通过软件里的代码保证,只有数据库自身的唯一索引才可能保证插入的数据是始终唯一的。

例如,之前试图通过插入数据库的语句来实现不插入相同值“INSERT IGNORE INTO  ...”,在单独实验一两条数据中,的确相同的数据并不能重复插入,但是在之后的应用中,数据库里偶尔确实会出现相同的值,也就是这一方式无法保证数据唯一性。

在出现这一问题之后,本以为只是此种方式会有时失效而已,所以在此种方式插入之前,通过代码“SELECT COUNT(*) FROM ...”来进行一次查询,如果查询到的结果为零则开始之前的插入语句,本以为经过两重限定,可以完全避免数据重复。最终结果还是一样,重复数据仍然存在。

苦恼之余,查询多方答案,最终:对于软件来说,数据库在繁忙的时候,不知道会返回些什么鬼东西过来,唯一能保证数据唯一性的就是在数据库里面创建数据唯一索引。


创建数据库唯一索引

建立一个简单索引

CREATE INDEX mytable_categoryid ON mytable (category_id);

建立一个多重索引

CREATE INDEX mytable_categoryid_userid ON mytable(category_id,user_id);

建立一个唯一性索引

CREATE UNIQUE COUSTERED INDEX mytable_categoryid_userid ON mytable(category_id,user_id);

建立一个聚簇索引:物理索引,表顺序与基表相同

CREATE CLUSTERED INDEX mytable_categoryid ON mytable (category_id) WITH ALLOW_DUP_ROW;(允许重复值)

建立一个非聚簇索引

CREATE UNCLUSTERED INDEX mytable_categoryid ON mytable (category_id);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值