带有 where 子句的 mysqldump 使用参照完整性

标签 mysql database innodb

我知道我可以使用“where 子句”转储单个表,但我想知道是否可以转储一个表并将所有链接记录一起转储(如果它们属于某个帐户 ID)?

我所有的表都是 innodb 并且是使用外键约束和级联删除设置的。如果我删除 account_id = 1 的主表“account”,那么所有链接到“1”的 account_id 的记录也将被删除。

所以我想要的是概念上类似的东西。我想在一个命令中转储链接到“account”表的所有表中“Account_id=1”的所有数据。如果我执行以下命令,我相信它只会转储一个表:

mysqldump -t -u [用户名] -p 测试账户 --where="account_id = 1"

是否有另一种方法可以使用 where 子句转储表并自动转储 liking 表中的数据,而无需为每个表编写单独的转储命令?最终我想为每个帐户创建一个 .sql 文件,例如“account_1.sql”、account_2.sql 等。

最佳答案

我曾将这个问题放在我最喜欢的列表中,看看是否有人提出了想法,但正如我所料,没有人提出。

一种相当有趣的方法是克隆数据库,删除所有不需要的帐户 ID(删除将级联到所有表),然后转储剩余的(这将是您需要的所有帐户 ID)。

我遇到了与 MySQL 和 DBIx::Class(Perl 中的 ORM)相同的问题。我想做的是克隆一千个帐户(使用混淆的名称和电子邮件)。我最终编写了一个脚本,通过给定用户 ID 的外键遍历整个数据库,并以正确的顺序生成所有必需的插入语句。

关于带有 where 子句的 mysqldump 使用参照完整性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4675334/

相关文章:

phpMyAdmin 在转到 "Browse"时通过执行 COUNT(*) 来挂起服务器

mysql - 剖析 MySQL InnoDB 记录格式以从原始磁盘恢复

mysql - 传递 SQL 查询

PHP 不会将表单中输入的数据发布到数据库?

sql - 将表中的一个字段复制到同一个表中的另一个字段

php - 从表中选择 * 不起作用

mysql - 为什么 InnoDB 给出明显错误的可用空间信息

php - 如何限制已选择的查询?

PHP 数组插入/操作在迭代中降级

php - 我应该在数据库或应用程序级别填充国家/地区名称吗?