一、问题起因
在前几天从同事那里拿来demo研究的时候,发现数据库名,部分表都一样,只是有的表没有,这时如果需要把两个人的数据库和成一个数据库,就需要处理判断一张表不存在,如存在则不改动,若不存在,则执行创建。
二、处理思路
在同事那里拿到这个数据库的转存文件,然后去手动改动这个.sql转存文件对一些自己不确定自己数据库中是否存在的表,做如下示例处理
转存sql文件时,每个表的导入都是如下创建方式,先判断是否存在,若存在,则删除这张表,重新创建,以下示例均为demo:
DROP TABLE IF EXISTS `student`;#判断时候存在,若存在则执行删除表操作
CREATE TABLE `student` (
`s_id` varchar(40) NOT NULL,
`s_name` varchar(255) default NULL,
`s_age` varchar(255) default NULL,
`s_msg` varchar(255) default NULL,
PRIMARY KEY (`s_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1', '早晨', '22', '电风扇');
INSERT INTO `student` VALUES ('2', '春节', '32', '发电设备v');
INSERT INTO `student` VALUES ('3', '端午节', '33', '地方');
INSERT INTO `student` VALUES ('4', '清明节', '44', 'dfs ');
INSERT INTO `student` VALUES ('5', '圣诞节', '66', '的');
在导入表时,不想删除以前这张表中的数据,但希望允许转存sql文件中的数据新增时,做如下修改
CREATE TABLE IF NOT EXISTS `student` (#判断这张表是否存在,若存在,则跳过创建表操作,
`s_id` varchar(40) NOT NULL,
`s_name` varchar(255) default NULL,
`s_age` varchar(255) default NULL,
`s_msg` varchar(255) default NULL,
PRIMARY KEY (`s_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `student` VALUES ('7', '重阳节', '33', '登高赏菊');
三、建议
在执行新表创建,特别是批量创建时,一定要先对表的存在状态做判断,即使用if exists,不然一旦创建出错,后面的语句将无法执行。