mysql判断表记录是否存在,不存在则插入新纪录
2015-11-13 14:19
609 查看
开始以为和SQL Server一样,使用not exists进行判断,结果不行:
正确的写法:
注释:dual 是个临时表
mysql官方对这个表的解释吧(http://dev.mysql.com/doc/refman/5.0/en/select.html):
DUAL is purely for the convenience of people who require that all SELECT statements should have FROM and possibly other clauses. MySQL may ignore the clauses. MySQL does not require FROM DUAL if no tables are referenced.
官方的解释说:纯粹是为了满足select … from…这一习惯问题,mysql会忽略对该表的引用。
把我发现的三个应用地方都加上:
select express from dual #这条sql就类似上面的查看系统时间一样。把express替换成表达式或函数就行
select express from dual where condition #这条sql只是对上面的一点扩展 加上一个where条件。其实这个where条件跟我们平时使用的where条件没什么区别。执行的时候也是先判断where子句是否成立,满足然后再执行select中的express,最后返回express执行的值;如果where子句不成立,则返回空。比如:select 1+1 from where 1=1,将返回2。
第三个就是一条比较实用的SQL语句了!你否想过:插入数据时先判断一下这条 记录是否已存在这个问题!?也许很多时候为了解决这个问题,你会先select一下,根据他的结果再决定是否继续写入数据库。但是用dual这个表,可以让你仅一条SQL就可以解决这个问题哦!
SQL就是这样写的:
INSERT INTO table (primarykey, field1, field2, ...) SELECT key, value1, value2, ... FROM dual WHERE not exists (select * from table where primarykey = id);
IF NOT EXISTS (SELECT 1 FROM vrv_paw_template WHERE templateName='自定义' OR templateFileName='policycustom' LIMIT 1) INSERT INTO vrv_paw_template(templateName,templateFileName,createTime,updateTime) VALUES('自定义','policycustom',NOW(),NOW()); END IF
正确的写法:
INSERT INTO vrv_paw_template(templateName,templateFileName,createTime,updateTime) SELECT '自定义','policycustom',NOW(),NOW() FROM DUAL WHERE NOT EXISTS ( SELECT 1 FROM vrv_paw_template WHERE templateName='自定义' OR templateFileName='policycustom' LIMIT 1 );
注释:dual 是个临时表
mysql官方对这个表的解释吧(http://dev.mysql.com/doc/refman/5.0/en/select.html):
DUAL is purely for the convenience of people who require that all SELECT statements should have FROM and possibly other clauses. MySQL may ignore the clauses. MySQL does not require FROM DUAL if no tables are referenced.
官方的解释说:纯粹是为了满足select … from…这一习惯问题,mysql会忽略对该表的引用。
把我发现的三个应用地方都加上:
select express from dual #这条sql就类似上面的查看系统时间一样。把express替换成表达式或函数就行
select express from dual where condition #这条sql只是对上面的一点扩展 加上一个where条件。其实这个where条件跟我们平时使用的where条件没什么区别。执行的时候也是先判断where子句是否成立,满足然后再执行select中的express,最后返回express执行的值;如果where子句不成立,则返回空。比如:select 1+1 from where 1=1,将返回2。
第三个就是一条比较实用的SQL语句了!你否想过:插入数据时先判断一下这条 记录是否已存在这个问题!?也许很多时候为了解决这个问题,你会先select一下,根据他的结果再决定是否继续写入数据库。但是用dual这个表,可以让你仅一条SQL就可以解决这个问题哦!
SQL就是这样写的:
INSERT INTO table (primarykey, field1, field2, ...) SELECT key, value1, value2, ... FROM dual WHERE not exists (select * from table where primarykey = id);
相关文章推荐
- Navicat Premium实现mysql数据库备份 还原
- sql server 和 mysql 的分页读取数据方法
- 关于IP在MySQL中的存储
- MySQL备份与恢复整理 较老的教程 参考
- mysql批量更新多条数据的写法
- mysql 5.7 设置root密码方法
- mysql 按指定id排序
- MySQL安装脚本
- mysql ---事务
- mysqld(服务器)命令行选项
- mysql-debug
- 第一章:Mysql负载均衡与主从复制实验
- 辛星浅析mysql中的单词的局部修改
- 【原创】MySQL5.7 虚拟列实现表达式索引
- MySQL5.7 虚拟列实现表达式索引
- navicat for mysql的使用
- mysql学习心得转
- mysql伪序列实现-最简单方法
- VS 2013下实现通过数据实体模型使用MySql
- mysql密码的加密与解密