php – 表锁定事务,删除然后插入相同的事务
更新的问题
所以我进一步调试了这个问题,我的代码现在看起来像这样: $mssql->beginTransaction(); $mssql->sql("DELETE FROM [TABLE] WHERE [FIELD] = 'Test'"); // Write the result from the above query,// this will confirm the row was deleted print_r($mssql->result); $mssql->sql("SELECT FROM [TABLE] WHERE [FIELD] = 'Test'"); // Write the result from the above query,// this SHOULD be empty as the row was just deleted print_r($mssql->result); $mssql->endTransaction(); 上面的脚本在一个SQL Server数据库上非常完美,但在另一个SQL Server数据库上(不同服务器上的重复数据库),它不起作用. 第二个数据库设法从表中检索一行,即使该行应该刚被删除… 附加信息 >从我所看到的,数据库选项的唯一区别是Broker Enabled选项,我认为这与此无关. SQL跟踪 declare @p1 int set @p1=1 exec sp_prepexec @p1 output,N'@P1 nvarchar(6)',N'DELETE FROM TABLE WHERE [FIELD]=@P1',N'M87996' select @p1 go declare @p1 int set @p1=2 exec sp_prepexec @p1 output,NULL,N'SELECT db_name()' select @p1 go exec sp_unprepare 2 go exec sp_unprepare 1 go declare @p1 int set @p1=1 exec sp_prepexec @p1 output,N'SELECT * FROM [TABLE] WHERE [FIELD]=@P1 ',N'M87996' select @p1 go exec sp_unprepare 1 go 原始问题 这是我第一次使用SQL Transactions,所以如果我天真,我会道歉. 我有一个事务,从数据库中删除一个项目,然后插入更新的项目,但在同一主键下. 请考虑以下内容(忽略我的包装类函数): $mssql->beginTransaction(); $mssql->sql("DELETE FROM [TABLE] WHERE [FIELD] = 'Test'"); $mssql->sql("INSERT INTO [TABLE] ([FIELD]) VALUES ('Test')); $mssql->endTransaction(); 但是,有了上述内容,我收到了Duplicate Primary Key错误.那是因为它还没有提交第一个查询吗? 因此,不可能在同一个事务中同时拥有上述两个查询吗? 遗憾的是我无法使用简单的UPDATE命令执行上述操作,因为我必须删除某些行,并且无法知道要删除哪些行… 解决方法
不,它一定是别的东西在起作用.您不必提交,在同一事务中,您将始终看到自己的更改,因此在INSERT启动时DELETE已经完成.
首先认为你必须验证DELETE真的删除了行.它可能默默地无法匹配WHERE子句(即删除0行,检查 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |