MySQL如果不存在一個表則創建

一、問題起因

在前幾天從同事那裏拿來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,不然一旦創建出錯,後面的語句將無法執行。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章