我正在使用下面的查询在两个表之间迁移数据。我遇到了表锁定问题,因此我正在考虑将表引擎从 MyISAM 更改为 InnoDB。我需要为哪些表执行此操作?只是我正在写入的表,还是我正在写入的表和我正在读取的表?
INSERT INTO table1 (
field1, field2, field2
)
SELECT
field1, field2,
(
SELECT
temp.field4
FROM
table1 AS temp
WHERE
temp.id = table2.id
ORDER BY
temp.something DESC
LIMIT
1
) + 1 AS field3
FROM
table2
WHERE
NOT EXISTS (
SELECT
1
FROM
table1 AS temp
WHERE
temp.id = table2.id
)
最佳答案
锁定什么
这要看情况。如果要确保执行更新时不会写入新数据,则应该锁定两个表。如果这只是一个写入问题,那么只锁定您正在执行更新的表。
常见的误解
MyISAM 不能做锁是错误的。 MyISAM 无法实现行级锁定。 MyISAM 完全能够锁定表。
根据以下列表做出您的决定。
决策助手
您的表的插入、删除和更新次数是否比选择的次数多得多?
=> InnoDB
是否需要全文搜索
=> MyISAM
您更喜欢/需要明确的外键约束
=> InnoDB
磁盘空间或内存是否有问题?
=> MyISAM
有疑问吗?
=>MyISAM
没有赢家。
关于mysql - 此查询将锁定哪些表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1545514/