GoogleCloudSQL常见问题解答指出
For MySQL Second Generation instances, InnoDB is the only storage engine supported
我的实验表明engine=memory
是可能的,至少对于临时表来说是这样。
CREATE TEMPORARY TABLE mt (c CHAR(20)) ENGINE=memory;
Query OK, 0 rows affected
SHOW CREATE TABLE mt;
+---------+----------------+
| Table | Create Table |
|---------+----------------|
| mt | CREATE TEMPORARY TABLE `mt` (
`c` char(20) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8 |
+---------+----------------+
1 row in set
Time: 0.022s
INSERT INTO mt (c) VALUES ('waaa' );
Query OK, 1 row affected
Time: 0.017s
SELECT * FROM mt;
+------+
| c |
|------|
| waaa |
+------+
1 row in set
Time: 0.019s
这是可行但不支持吗?谷歌可以在不通知的情况下禁用此功能吗?这只是遗漏了FAQ,因为消息是应该使用innodb而不是myisam?
感谢您的时间。
答案 0 :(得分:2)
尽管可以使用MEMORY表来创建表(仅限临时表),但Google Cloud不支持它,因为它不提供与InnoDB引擎相同的一致性,并且可能容易出错。
此外,在使用第二代MySQL的较新Cloud SQL实例中,使用除InnoDB之外的任何存储引擎都会导致错误,例如:
ERROR 3161 (HY000): Storage engine MEMORY is disabled (Table creation is disallowed)
截至目前,对于使用第二代MySQL的Cloud SQL实例,唯一受支持的存储引擎是InnoDB。如果您可以在实例上使用MEMORY引擎,则表示它是旧版本。由于不支持MEMORY引擎,Google可能会在您发表评论时禁用此功能,而不会发出通知。
我的建议是,虽然现在你可以在你的Cloud SQL实例中使用MEMORY引擎作为临时表,但请坚持使用InnoDB引擎,因为它是唯一受Google支持的引擎。提到MyISAM的相同消息也适用于其他存储引擎。