我想将数据唯一地插入到我的一个MySQL表中 . 也就是说,如果表中已经存在完全相同的条目(所有列包含相同的值),则应该取消插入操作 . 这可以通过定义唯一键并处理即将发生的错误来轻松完成,但我无法更改表结构 .
我确信即使在没有唯一键的表中,也有一种简单的方法可以捕获它 . 当然,我可以提前使用 SELECT
语句手动检查是否存在此类记录,但可能会有同时修改我的表的并发实例(在使用 SELECT
和实际 INSERT
的检查之间) .
我想在一个SQL命令中执行检查和 INSERT
操作 . 谁能指出我正确的方向?
3 回答
我们假设您的表中有5列 - col1,col2,col3,col4,col5 . 并假设您尝试插入的这些列对应的数据是变量 - $ col1,$ col2,$ col3,$ col4,$ col5(我假设PHP是您的语言,但请修改变量格式,按照你的命名法) .
所以你的插入可能看起来像:
另一种选择可能是:
希望这可以帮助 .
您可以对查询使用表锁,并且在查询完成处理之前,其他任何进程都不会对其进行修改 .
检查此链接:http://www.mssqlcity.com/Articles/Adm/SQL70Locks.htm
然后按照你所说的那样“预先使用SELECT语句这样的记录,但可能会有同时修改我的表的并发实例(在使用SELECT和实际INSERT的检查之间) . ”
没有唯一键,确保唯一行的唯一方法是不允许表上的任何写并发(锁定它们或使用可序列化的隔离级别)