从备份创建新的MySql架构。SQL源文件是否重置自动增量id列?

从备份创建新的MySql架构。SQL源文件是否重置自动增量id列?,mysql,schema,auto-increment,Mysql,Schema,Auto Increment,我正在开发一个大型的数据库模式,希望能够提供给客户 我是MySql数据库管理新手。如何恢复架构的.sql文件,以便它还将所有自动增量id列重新设置为0或Null 我实际上恢复了一个新的模式名,并插入了一个测试记录,发现auto-id列从上一个模式名中停止的位置开始递增 如何在MySql数据库建模中解决这个问题 我希望始终能够为付费客户“剥离”我当前版本数据模型的精确副本 谢谢。您可以使用它来转储表结构,您将按照前面的定义从一开始就找到所有的自动递增主键,它不会执行insert查询,并将创建所有的

我正在开发一个大型的
数据库模式
,希望能够提供给客户

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

我实际上恢复了一个新的模式名,并插入了一个测试记录,发现auto-id列从上一个模式名中停止的位置开始递增

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

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


谢谢。

您可以使用它来转储表结构,您将按照前面的定义从一开始就找到所有的自动递增主键,它不会执行insert查询,并将创建所有的
存储过程
视图

cat backup.sql | grep -v ^INSERT | mysql -u $USER -p

您可以使用它来转储表结构,您将从前面定义的开始处找到所有自动递增主键,它不会执行insert查询,并将创建所有
存储过程
视图

cat backup.sql | grep -v ^INSERT | mysql -u $USER -p

您可以仅转储架构,而不使用以下方式转储数据:

$ mysqldump -d databasename > databasename-schema.sql
如果使用InnoDB表(应该这样做),则每次重新启动MySQL实例时,都会重置自动增量值。每个表中重置为的值等于表中当前存储的最大值加1。因此,如果表为空,则值为1

如果您不想在恢复后重新启动MySQL实例,可以在恢复前删除CREATE TABLE语句中的auto increment子句:

$ mysqldump -d databasename | sed -e 's/AUTO_INCREMENT=[0-9][0-9]*//' 
  > databasename-schema.sql
或者,您可以更改表以在恢复后重置自动增量值。这必须在每个表的基础上进行,但您可以从信息模式中查询具有自动递增键的表列表:

$ 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

您可以仅转储架构,而不使用以下方式转储数据:

$ mysqldump -d databasename > databasename-schema.sql
如果使用InnoDB表(应该这样做),则每次重新启动MySQL实例时,都会重置自动增量值。每个表中重置为的值等于表中当前存储的最大值加1。因此,如果表为空,则值为1

如果您不想在恢复后重新启动MySQL实例,可以在恢复前删除CREATE TABLE语句中的auto increment子句:

$ mysqldump -d databasename | sed -e 's/AUTO_INCREMENT=[0-9][0-9]*//' 
  > databasename-schema.sql
或者,您可以更改表以在恢复后重置自动增量值。这必须在每个表的基础上进行,但您可以从信息模式中查询具有自动递增键的表列表:

$ 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

自动增量在之后重置

TRUNCATE `table`
然后,当您运行批处理
INSERT
查询时(从数据备份中),将自动将
AUTO_INCREMENT
值更新为正确的值(插入的记录+1)

因此,您不需要手动更新
AUTO_INCREMENT
值(这是一种相当糟糕的做法)

如果要从备份中恢复受外键约束的多个表,可以在TRUNCATE+INSERT之前禁用FK检查,并在完成后将其启用。
可以在此处找到详细信息:

自动增量在

TRUNCATE `table`
然后,当您运行批处理
INSERT
查询时(从数据备份中),将自动将
AUTO_INCREMENT
值更新为正确的值(插入的记录+1)

因此,您不需要手动更新
AUTO_INCREMENT
值(这是一种相当糟糕的做法)

如果要从备份中恢复受外键约束的多个表,可以在TRUNCATE+INSERT之前禁用FK检查,并在完成后将其启用。
可以在此处找到详细信息:

为什么不对sql脚本末尾有自动递增列的所有表使用alter table查询。@DhinakaranPragasam非常好的主意,我仍然需要学习如何正确执行此操作。现在,我刚刚创建了一个新的转储文件,并将所有的auto_increment=值重置回auto_increment=1未来读取器:在研究过程中找到的信息链接为什么不对sql脚本末尾有auto increment列的所有表使用alter table查询。@Dhinakaranpragaam非常好的主意,我仍然需要学习如何正确地做到这一点。现在,我刚刚创建了一个新的转储文件,并将所有auto_increment=值重置回auto_increment=1未来阅读器:在研究过程中发现的信息链接这样的帮助,谢谢!那是数据定义语言还是DDL?MySql Workbench可以执行这些DDL语句吗?=)是的,您可以保存信息模式查询的输出,并在任何支持SQL脚本的工具中作为SQL脚本执行。我可能刚刚找到了它。工作台脚本Shell-来自MySql工作台的脚本菜单。我也会下载phpMyAdmin,我也听说了一些关于它的好消息。这样的帮助,谢谢!那是数据定义语言还是DDL?MySql Workbench可以执行这些DDL语句吗?=)是的,您可以保存信息模式查询的输出,并在任何支持SQL脚本的工具中作为SQL脚本执行。我可能刚刚找到了它。工作台脚本Shell-来自MySql工作台的脚本菜单。我还将下载phpMyAdmin,我也听说了它的优点。