mysql - 从备份创建新的 MySql 模式。SQL 源文件重置自动递增 id 列?

标签 mysql schema auto-increment

我正在开发一个大型数据库架构,我希望将其提供给客户。

我是 MySql 数据库管理的新手。如何恢复架构的 .sql 文件,以便它也将所有自动增量 id 列重置回 0 或再次 Null

我实际上恢复了一个新的模式名称并插入了一条测试记录,发现自动 ID 列从它们在最后一个模式名称中停止的地方递增。

如何在 MySql 数据库建模中解决这个问题?

我希望始终能够为付费客户“分拆”我当前版本数据模型的精确副本。

谢谢。

最佳答案

您可以只转储架构,不转储数据:

$ mysqldump -d databasename > databasename-schema.sql

如果您使用 InnoDB 表(您应该使用),每次重新启动 MySQL 实例时,自动增量值总是会重置。它在每个表中重置为的值等于当前存储在表中的最大值加 1。因此,如果您的表为空,则该值将为 1。

如果您不想在恢复后重启 MySQL 实例,您可以在恢复前去除 CREATE TABLE 语句中的自动递增子句:

$ mysqldump -d databasename | sed -e 's/AUTO_INCREMENT=[0-9][0-9]*//' 
  > databasename-schema.sql

否则您可以在恢复后通过 ALTER TABLE 重置自动增量值。这必须在每个表的基础上完成,但您可以从 INFORMATION_SCHEMA 查询具有自动递增键的表列表:

$ mysql -N -B -e "SELECT CONCAT('ALTER TABLE \`', table_schema, '\`.\`', 
  table_name, '\` AUTO_INCREMENT=1;') AS ddl FROM INFORMATION_SCHEMA.TABLES 
  WHERE table_schema = 'test' AND AUTO_INCREMENT IS NOT NULL" | mysql -v

关于mysql - 从备份创建新的 MySql 模式。SQL 源文件重置自动递增 id 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14021475/

相关文章:

templates - 我可以在 Tridion GUI 中插入组件模板链接吗?

php - 将 mysql_query 传递到 JSON 文件不起作用

php - 如何选择 mySQL 数据库表的最新条目?

MySQL - 按 count() 和 GROUP BY 排名

wsdl - WSDL 中的类型和元素有什么区别?

MySQL:AUTO_INCREMENT 能否乱序生成值?

mysql - 使用 sql 查询过滤数据以在条形图中显示

关于问题类型 QAPage 的架构警告

mysql - 在 MySQL 中创建一个用户定义的函数来处理 auto_increment

MySQL current_insert_id()? (不是 last_insert_id())