Mysql在使用prepared statements时无法锁定表

标签 mysql prepared-statement

在锁定表以进行写入后尝试运行准备好的插入语句给我这个mysql错误:准备好的语句协议(protocol)尚不支持此命令:LOCK TABLES tbl WRITE。

这个问题的任何解决方法?用于表的引擎:INNODB。

附言:我想锁定表,这样我就可以避免重复插入(在应用程序端而不是数据库端进行重复检查,varchar(5000)的唯一索引是不可能的)。所以我需要锁定表,但我不能用准备好的语句来做到这一点。存储过程会出现同样的错误吗?关于这个问题的任何其他想法?

最佳答案

使用事务,创建一个哈希列,并在该列上放置一个唯一键。

正如 Geo C. 在他的评论中所说,使用 MD5 几乎肯定不会发生冲突,而使用 SHA256 的可能性更小。无论您生成多少个 URL,与在冲突几率高到足以考虑使用锁的复杂解决方法之前可以生成的散列数量相比,即使是数十亿个 URL 也算不了什么。

关于Mysql在使用prepared statements时无法锁定表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19965025/

相关文章:

mysql - 使用自动增量字段插入触发器之前/之后

php - PDO - 查询没有结果

java - 无法使用 preparestatement 插入数据

php - 准备好的查询字符串

php - mysql_num_rows 期望参数 1 是资源

mysql - INSERT ... ON DUPLICATE KEY UPDATE(要比较的两个键)

php - 我如何将此类转换为与 mssql 一起使用

mysql - 对于匹配器中的每个选项,确保每个选项至少有一个(但不超过一个)匹配

MySQL 准备语句 - 最大长度 1000 个字符

php - 无法在准备好的 mysql 查询中使用 MAX()