我正在使用下面的查询在两个表之间迁移数据。我有表锁定问题,所以我正在考虑将表引擎从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
)
答案 0 :(得分:3)
这取决于。如果要确保在执行更新时不能写入新数据,则应锁定两个表。如果只是写作问题,那么只需将表锁定在您正在进行更新的位置。
错误,MyISAM无法执行锁定。它只是MyISAM无法进行的行级锁定。 MyISAM完全能够锁定表格。
根据以下列表做出决定。
您的表格是否会被插入,删除和更新,而不是选择它? => InnoDB的
您需要全文搜索
=>的MyISAM
您更喜欢/需要明确的外键约束
=> InnoDB的
磁盘空间或内存是一个问题吗? =>的MyISAM
怀疑?
=> MyISAM的
没有胜利者。
答案 1 :(得分:0)
表1应该被锁定。有人可以证实吗?
我只使用Innodb。我忘记了myisam的作用!
无论哪种方式,你应该把所有东西切换到Innodb。这些天Innodb无论如何都快速阅读。