我喜欢在java中创建一个备份脚本,它将备份一个表,但只备份一些选定的行。请参考以下示例表:
table names:
id, group, name
1, 1, "John"
2, 1, "Frank"
3, 1, "Smith"
4, 2, "Anny"
5, 2, "Gustav"
table ages:
id, group, age
1, 1, 54
2, 1, 30
3, 1, 55
4, 2, 20
5, 2, 45我喜欢备份"names“和"ages”表,但只备份group=1所在的行。有没有什么mysqldump脚本可以让我定义要备份的表和一个必须适合的where子句?
谢谢
谢谢,伙计,我只是试了一下,但结果并不完全是我想要的:
DROP TABLE IF EXISTS `names`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `names` (
...
) ENGINE=MyISAM AUTO_INCREMENT=619 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;mysql转储创建一个drop table和一个create table。它无法删除该表,因为其中有更多的数据。它必须创建一个基于where子句的delete语句,如下所示:
Delete from names where group = 1如果没有这个,我就无法在一天后插入备份来恢复和删除一些错误数据。如果有人不小心将其插入,他将删除孔参数表。
发布于 2021-03-24 21:33:50
Mysqldump有一个--where option,但条件必须与所有表相关。
在您的例子中,这似乎是可能的,因为您对两个表具有相同的列名和相同的值。
但这有点复杂,因为您使用group作为列名,这是MySQL中的reserved keyword。
我通过在我的test模式中创建与您的表名称匹配的表,并运行以下命令对此进行了测试:
mysqldump test --tables names ages --where '`group` = 1'注意引号的用法。反标记是分隔保留关键字所必需的,这样它才能用作SQL中的列标识符。单引号是分隔where条件所必需的,以防止反引号被shell解释为命令替换。双引号允许在字符串中替换命令,因此必须使用单引号。
https://stackoverflow.com/questions/66781948
复制相似问题