我正在尝试修改MySQL(InnoDB引擎)生成的转储文件,我想
- 检查是否存在表
- 如果已经存在,则不要覆盖数据
- 如果未找到,则创建一个新的,并填写默认数据
我可以让上述两个条件分别工作,但不能使用IF语句。
这是一个示例脚本:
表planned_objective
的表结构
/*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 */;
正在转储表planned_objective
的数据
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;
创建部分是好的,但转储数据部分是我可能需要有一个IF语句,纠正我,如果我错了。感谢提前帮助!!
2条答案
按热度按时间whlutmcx1#
如果还插入了具有主键的字段或具有唯一键的字段,则可以使用INSERT IGNORE ....。这将仅插入新行
zazmityj2#
下面是另一个技巧,您可以这样做,或者必须使用存储过程
1.创建你的表如果不存在
1.用相同的结构创建临时表
1.将init数据导入临时表
1.检查主表是否有行并将结果存储在变量中
1.仅当为空时插入int主表6清除临时表
/* 检查是否为空 /
选择计数()进入@空标志从
planned_objective
;SELECT @空标志;/* 仅用于调试 /
/ 仅在表为空时复制 */
插入
planned_objective
从tmp_planned_objective
中选择 ,其中@空标志= 0;/ 保存临时表 */
如果存在
tmp_planned_objective
,则丢弃表格;