我知道我应该使用engine=MEMORY
在内存中创建表,并engine=INNODB
使表事务安全。但是,我怎样才能实现这两个目标呢?我试过engine=MEMORY, INNODB
,但我失败了。我的目的是快速访问表并允许多个线程更改表的内容。
答案 0 :(得分:3)
您尚未说明上述目标。我猜你正在寻找好的表现,而你似乎也希望这个表是交易性的。你唯一的选择就是InnoDB。只要您将InnoDB配置为使用足够的内存来保存整个表(使用innodb_buffer_pool_size
),并且同一服务器上的其他InnoDB表没有过大的压力,数据将保留在内存中。如果您担心写入性能(并再次禁止使用同一系统),可以通过设置innodb_flush_log_at_trx_commit = 0
并禁用二进制日志记录来降低持久性,从而大幅提高写入性能。
对临时表使用任何类型的触发器都将是一个混乱的维护,并且不会在临时表上给你任何事务性的好处。
答案 1 :(得分:0)
您正在寻找一种方法来创建具有2个(或更多)引擎的表,这是使用mysql无法实现的。
但是,我猜你想要使用内存,因为你不认为innodb能够满足你的需求。我认为innodb非常快,可能已经足够了,但如果你真的需要它,我认为你应该尝试创建2个表:
table1 memory< - 这里是你做所有SELECT的地方
table2 innodb< - 在这里你将进行UPDATE,INSERT,DELETE等并添加一个TRIGGER,这样当更新这个时,table1会得到相同的修改。
答案 2 :(得分:0)
我知道有两种方法
第一路
创建一个临时表(这些存储在内存中,带有一个小差异,它们将在会话注销时被删除)
创建临时表示例(id int )引擎 = Innodb;
第二路
你必须创建两个表,一个是内存引擎,另一个是innodb或bdb
首先将所有数据插入innodb表,然后触发要复制到内存表中的数据
如果你想清空innodb表中的数据,可以使用相同的触发器
你也可以使用事件来实现这个目标