0

我正在使用下面的查询在两个表之间迁移数据。我有表锁定问题,所以我正在考虑将表引擎从 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
  )
4

2 回答 2

3

锁定什么

这取决于。如果您想确保在执行更新时不会写入新数据,您应该锁定两个表。如果这只是一个写作问题,那么只锁定您正在执行更新的表。

常见的误解

MyISAM 不能做锁是错误的。MyISAM 无法做到的只是行级锁定。MyISAM 完全能够锁定表。

根据以下列表做出您的决定。

决策助手

您的表是否会被插入、删除和更新比被选中的多得多?
=> InnoDB

是否需要全文搜索
=> MyISAM

你喜欢/需要明确的外键约束
=> InnoDB

磁盘空间或内存有问题吗?
=> MyISAM

怀疑?
=>MyISAM

没有赢家。

于 2009-10-09T19:54:40.330 回答
0

表 1 应该被锁定。有人可以确认吗?

我只使用 Innodb。我忘记了myisam是做什么的!

无论哪种方式,您都应该将所有内容切换到 Innodb。无论如何,这些天 Innodb 的读取速度一样快。

于 2009-10-09T19:25:20.807 回答