数据库添加新表时如何判断原来是否存在该表
2016-04-19 23:31
295 查看
因为是从事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;
有问题欢迎留言讨论~
工作中的数据库脚本一般需要支持重复执行,所以怎么判断是否存在同样名称的表呢?
很多人会觉得,反正是新插入一个表,里面一般肯定是没有同样名字的表的。直接先删除同样名字的表,然后新增,就可以支持重复执行脚本了。
假如你要插入的表名为 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;
有问题欢迎留言讨论~
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 第三章 数据库备份和还原
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle数据库执行脚本常用命令小结
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马