因为是从事javaweb开发工作,所以工作中经常需要编写数据库脚本,几天前碰到一个问题。在数据库中如何添加新表前判断之前是否存在该表。看似简单的问题,但是如果脚本写的不好,就会造成数据损失。
工作中的数据库脚本一般需要支持重复执行,所以怎么判断是否存在同样名称的表呢?
很多人会觉得,反正是新插入一个表,里面一般肯定是没有同样名字的表的。直接先删除同样名字的表,然后新增,就可以支持重复执行脚本了。
假如你要插入的表名为 name
就会写 drop table name if exists table name;
这样写的话,如果客户的数据库里面真的有这个表,那你的脚本就会删了客户的数据。造成不可估量的损失。我百度了一些网上的方法,发现找到的都执行不了。现在解决了。特此记录,方便其他人遇到这个情况该怎么合理的判断。
MySQL的写法:
IF NOT EXISTS (SELECT * FROM information_schema.`TABLES` WHERE table_schema=databasename AND table_name='name')
then
CREATE TABLE name(
........
)
COMMIT;
END IF;
Oracle 的写法:
declare
i number;
select count(*) into i from user_tables where table_name='name';
if i=0
then
execute immediate'
create table name(
)‘
commit;
end if;
有问题欢迎留言讨论~