You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改MySQL(InnoDB引擎)导出脚本:表存在不覆写,不存在则创建填充

MySQL Dump脚本修改:仅在表不存在时创建并导入数据

问题背景

需要调整InnoDB引擎的MySQL dump脚本,实现以下逻辑:

  • 检查目标表是否存在
  • 表已存在:不覆写现有数据
  • 表不存在:创建新表并填充默认数据

表结构部分已使用CREATE TABLE IF NOT EXISTS,逻辑正常,需修改数据导入部分添加条件判断。

修改后的完整脚本

1. 表结构创建(保留原有逻辑)

/*DROP TABLE IF EXISTS `planned_objective`*/;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE IF NOT EXISTS `planned_objective` (
  `objective_id` int(11) NOT NULL AUTO_INCREMENT,
  `objective` varchar(45) CHARACTER SET latin1 DEFAULT NULL,
  `start_depth` float NOT NULL,
  `end_depth` float NOT NULL,
  `depth_uom` varchar(45) CHARACTER SET latin1 NOT NULL,
  `wellID` int(12) NOT NULL,
  PRIMARY KEY (`objective_id`,`start_depth`,`wellID`)
) ENGINE=InnoDB AUTO_INCREMENT=1195 DEFAULT CHARSET=utf8 COMMENT='details about planned objectives like casing, cementing, hole conditioning, tripping for BHA (agitator or change in steering unit) ';
/*!40101 SET character_set_client = @saved_cs_client */;

2. 条件化数据导入(新增判断逻辑)

使用动态SQL实现仅在表不存在时执行数据插入:

-- 拼接条件执行的SQL语句
SET @sql = IF(
    (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'planned_objective') = 0,
    'LOCK TABLES `planned_objective` WRITE; \
     /*!40000 ALTER TABLE `planned_objective` DISABLE KEYS */; \
     INSERT INTO `planned_objective` VALUES (*VALUES TO BE WRITTEN*); \
     /*!40000 ALTER TABLE `planned_objective` ENABLE KEYS */; \
     UNLOCK TABLES;',
    ''
);
-- 执行动态SQL
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

逻辑说明

  • 表结构部分:CREATE TABLE IF NOT EXISTS确保仅当表不存在时创建表,已满足需求。
  • 数据导入部分:通过查询INFORMATION_SCHEMA.TABLES判断表是否存在,仅当表不存在时才拼接并执行插入数据的SQL语句,避免覆写已有数据。

内容的提问来源于stack exchange,提问作者sam sundar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 10:52:18