如果mysqldump中不存在则创建表

khe*_*lll 24 mysql mysqldump

我想知道mysqldump中是否有任何方法可以添加适当的create table选项[IF NOT EXISTS].有任何想法吗?

小智 25

尝试在SQL文件中使用它:

sed 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' <file-path>
Run Code Online (Sandbox Code Playgroud)

或者保存

sed -i 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' <file-path>
Run Code Online (Sandbox Code Playgroud)

它并不理想,但它有效:P

  • 您可以通过扩展匹配来缓解错误,`$ sed's/^ CREATE TABLE foo/CREATE TABLE IF NOT EXISTS foo/g'` (5认同)
  • 希望您的数据库中没有包含该特定字符串的数据.:) (3认同)
  • 可能性很小. (2认同)

Dan*_*llo 18

根据一个消息来源,mysqldump没有这个选项.

您可以--force在导入转储文件时使用该选项,MySQL将忽略尝试创建重复表所产生的错误.但请注意,使用此方法时,其他错误也会被忽略.

否则,你可以通过一个脚本,将替换所有出现的运行转储文件CREATE TABLECREATE TABLE IF NOT EXISTS.


sfu*_*ger 11

使用sed@Pawel描述的效果很好.然而,您可能不喜欢通过比绝对必要的更多潜在错误源来管理数据的想法.在这种情况下,可以使用两个单独的转储:

  • 包含表定义的第一个转储(--no-data --skip-add-drop-table)
  • 第二次转储只有data(--no-create-info --skip-add-drop-table)

还有一些其他事情要处理(例如触发器).有关详细信息,请查看手册


Bol*_*wyn 7

不是您可能想要的,但是--add-drop-table每个 CREATE 都以相应的 DROP TABLE 语句为前缀。

否则,我会进行简单的搜索/替换(例如,使用sed)。


Mos*_*afa 6

转储输出是 DROP 和 CREATE 的组合,因此您必须删除 DROP 语句并更改 CREATE 语句以形成有效的(逻辑)输出:

 mysqldump --no-data -u root <schema> | sed 's/^CREATE TABLE /CREATE TABLE IF NOT EXISTS /'| sed 's/^DROP TABLE IF EXISTS /-- DROP TABLE IF EXISTS /' > <schema>.sql
Run Code Online (Sandbox Code Playgroud)