gpt4 book ai didi

mysql - Rails 管理 mariadb 10.3 中表的版本控制

转载 作者:行者123 更新时间:2023-11-29 16:24:24 26 4
gpt4 key购买 nike

从 MariaDB 10.2 升级到 MariaDB 10.3 后,我使用系统版本控制更改了表 documents

MYSQL 控制台:

> SHOW CREATE TABLE documents \G

*************************** 1. row ***************************
Table: documents
Create Table: CREATE TABLE `documents` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`label` varchar(255) DEFAULT NULL,
`writing_content` text DEFAULT NULL,
`is_locked` tinyint(1) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=697 DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING

从现在开始,所有更新都将保存在我的数据库中。

我的问题是:

我不希望mariadb存储所有sql的所有版本,例如更新文档集...

我的目标是:

如果writing_content列的值没有被修改,那么数据库中就不会生成新版本。

Rails 应用程序中的示例:

Document.find(1).update_attributes({is_locked:true}) #=> don't save with a new version
Document.find(1).update_attributes({writing_content:'test test'}) #=> will be saved with a new version

如何在我的 Controller 中进行此控制?感谢您的任何建议。

环境: ruby 2.4.1Rails 5.1.6

最佳答案

我自己找到了答案:

从版本控制中排除列

除了writing_contents之外的所有其他列都可以在没有版本的情况下声明。

创建一个新表:

Create Table: CREATE TABLE `documents` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`label` varchar(255) DEFAULT NULL WITHOUT SYSTEM VERSIONING,
`writing_content` text DEFAULT NULL,
`is_locked` tinyint(1) DEFAULT 0 WITHOUT SYSTEM VERSIONING,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=697 DEFAULT CHARSET=latin1 WITH SYSTEM VERSIONING

修改现有表格的列:

SET @@system_versioning_alter_history = 1;
ALTER TABLE document MODIFY writing_content WITH SYSTEM VERSIONING;

Know more

关于mysql - Rails 管理 mariadb 10.3 中表的版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54326370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com