首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java备份mysql表只有部分吗?

问java备份mysql表只有部分吗?
EN

Stack Overflow用户
提问于 2021-03-24 21:20:58
回答 1查看 37关注 0票数 0

我喜欢在java中创建一个备份脚本,它将备份一个表,但只备份一些选定的行。请参考以下示例表:

代码语言:javascript
复制
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子句?

谢谢

谢谢,伙计,我只是试了一下,但结果并不完全是我想要的:

代码语言:javascript
复制
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语句,如下所示:

代码语言:javascript
复制
Delete from names where group = 1

如果没有这个,我就无法在一天后插入备份来恢复和删除一些错误数据。如果有人不小心将其插入,他将删除孔参数表。

EN

回答 1

Stack Overflow用户

发布于 2021-03-24 21:33:50

Mysqldump有一个--where option,但条件必须与所有表相关。

在您的例子中,这似乎是可能的,因为您对两个表具有相同的列名和相同的值。

但这有点复杂,因为您使用group作为列名,这是MySQL中的reserved keyword。

我通过在我的test模式中创建与您的表名称匹配的表,并运行以下命令对此进行了测试:

代码语言:javascript
复制
mysqldump test --tables names ages --where '`group` = 1'

注意引号的用法。反标记是分隔保留关键字所必需的,这样它才能用作SQL中的列标识符。单引号是分隔where条件所必需的,以防止反引号被shell解释为命令替换。双引号允许在字符串中替换命令,因此必须使用单引号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66781948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档