同意楼上,具体语句是 CREATE TABLE IF not exists `car` ( `id` int(11) NOT NULL, `name` varchar(45) DEFAULT NULL COMMENT '名称', `model` varchar(45) DEFAULT NULL COMMENT '型号', `IP` char(15) NOT NULL COMMENT 'PLC IP', `port` int(11) NOT NULL COMMENT 'PLC 端口', `outTime` int(11) NOT NULL COMMENT '通讯超时时间,单位秒,初始值2秒', `disabled` tinyint(1) NOT NULL COMMENT '停用', `deleted` tinyint(1) NOT NULL COMMENT '已删除', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;mysql的,mssql类似
我们一般是select count(1) from table_a where 1=2;判断是否出错.这个方法可以用在任何标准的数据库。where 1=2 是必须的,因为如果表存在,不加条件,它会真的去计数,浪费时间。------------------------- 具体到每个不同的DBMS,一般都有系统表可以查。但上面那个是通用的。
同样,实际开发中,你可能还需要判断有没有哪个column.//比如你以后哪天程序升级,要自动加字段那就select count(字段) from table_a where 1=2;出错就加,不出错就继续。
这种方法不好,建议不要用这种方法。出错并不表示没有,要判断是否因为不存在而报的错,需要对报错的信息进行分析才能确定。比如网络断了、数据库关闭了等种种原因都可能导致出错,如果不根据出错原因就直接认为是表不存在,是要出问题的。而且,表不存在报的错误信息,不同数据报的错不一定相同。 我们项目中的一个问题,从数据库查磁带是否存在,如果不存,就认为是新磁带,从头开始写,如果存在就是旧磁带,接着写。可是,程序员写代码时,把查询失败当作是不存在,把一盘老磁带当作新磁带从头写了,导致把之前写的东西覆盖掉了。这是很严重的问题。 判断数据库表是否存在,不同数据库都是有正统方法的。 比如Oracle如下,TABLE_NAME是表名,要换成大写民: select * from user_tables t where t.table_name='TABLE_NAME';
Create table aa if NOT exist
CREATE TABLE IF not exists `car` (
`id` int(11) NOT NULL,
`name` varchar(45) DEFAULT NULL COMMENT '名称',
`model` varchar(45) DEFAULT NULL COMMENT '型号',
`IP` char(15) NOT NULL COMMENT 'PLC IP',
`port` int(11) NOT NULL COMMENT 'PLC 端口',
`outTime` int(11) NOT NULL COMMENT '通讯超时时间,单位秒,初始值2秒',
`disabled` tinyint(1) NOT NULL COMMENT '停用',
`deleted` tinyint(1) NOT NULL COMMENT '已删除',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;mysql的,mssql类似
具体到每个不同的DBMS,一般都有系统表可以查。但上面那个是通用的。
我们项目中的一个问题,从数据库查磁带是否存在,如果不存,就认为是新磁带,从头开始写,如果存在就是旧磁带,接着写。可是,程序员写代码时,把查询失败当作是不存在,把一盘老磁带当作新磁带从头写了,导致把之前写的东西覆盖掉了。这是很严重的问题。
判断数据库表是否存在,不同数据库都是有正统方法的。
比如Oracle如下,TABLE_NAME是表名,要换成大写民:
select * from user_tables t where t.table_name='TABLE_NAME';