Mysql 唯一约束与插入前检查
我有一个SQL server表RealEstate,其中包含列-Id、Property、Property\u值。这个表大约有500-1000万行,将来还会增加更多。仅当此表中不存在Id、Property、Property_值的组合时,我才希望插入一行 示例表-Mysql 唯一约束与插入前检查,mysql,sql,sql-server,oracle,Mysql,Sql,Sql Server,Oracle,我有一个SQL server表RealEstate,其中包含列-Id、Property、Property\u值。这个表大约有500-1000万行,将来还会增加更多。仅当此表中不存在Id、Property、Property_值的组合时,我才希望插入一行 示例表- 1,Rooms,5 1,Bath,2 1,Address,New York 2,Rooms,2 2,Bath,1 2,Address,Miami 不允许插入2,地址,迈阿密。但是,2,价格,20亿是可以的。我很想知道做这件事的“最佳”方
1,Rooms,5
1,Bath,2
1,Address,New York
2,Rooms,2
2,Bath,1
2,Address,Miami
不允许插入2,地址,迈阿密
。但是,2,价格,20亿
是可以的。我很想知道做这件事的“最佳”方法是什么,为什么。为什么部分对我来说最重要。检查的两种方法是:
另外,我认为UNIQUE适用于所有数据库,因此我不认为应该删除mysql和oracle标记。对您的问题的描述正是为什么主键可以是复合的,例如,它们由多个字段组成。这样,数据库将为您处理唯一性,而您无需关心它 在您的情况下,表定义可以类似于以下内容:
CREATE TABLE `real_estate` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`property` varchar(255) DEFAULT NULL,
`property_value` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `index_id_property_property_value` (`id`, `property`, `property_value`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
这并不能直接回答这个问题,但我认为把它贴在这里可能会有帮助,因为它比维基百科好,而且链接有一天可能会死掉 链接- 维基百科对种族状况有很好的描述,但如果你不了解编程的基础知识,就很难理解。我将尝试用不太专业的术语来解释它,使用如上所述的生成标识符的示例。我还将使用人类活动的类比来传达这些想法 竞态条件是两个或多个程序(或单个程序的独立部分)都试图同时获取某些资源,从而导致错误答案或冲突。此资源可以是信息,如下一个可用的约会时间,也可以是对某些内容的独占访问,如电子表格。如果您曾经使用Microsoft Excel在共享驱动器上编辑文档,您可能有过Excel告知其他人已经在编辑电子表格的经历。此错误消息是Excel优雅地处理潜在竞争条件和防止错误的方法 程序的一项常见任务是识别某种类型的下一个可用值,然后分配它。这项技术用于发票号码、学生ID等。这是一个以前解决过的老问题。最常见的解决方案之一是允许存储数据的数据库生成数字。还有其他解决方案,它们都有各自的优缺点 不幸的是,那些不了解这一领域或仅仅不擅长编程的程序员经常试图自己动手。聪明的人会很快发现这是一个比看上去复杂得多的问题,并寻找现有的解决方案。坏的人永远看不到问题,或者,一旦他们看到了问题,就坚持在不纠正错误的情况下使他们不可行的解决方案变得更加复杂。让我们以学生ID为例。新手程序员说“要知道下一个学生编号应该是什么,我们只需获取最后一个学生编号并将其递增。”下面是在引擎盖下发生的事情: