MySQL基于条件判断的数据插入例子

在编写程序时,我们经常会遇到一些基于条件判断的逻辑,比如:判断该条数据是否已经在数据库中存在,如果不存在,则插入。

技巧一:使用ignore关键字

如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用: insert ignore into

当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回。所以使用ignore请确保语句本身没有问题,否则也会被忽略掉。

示例: INSERT IGNORE INTO books ( name ) VALUES ( 'MySQL Manual' )

技巧二:使用replace into

REPLACE的运行与INSERT很相像, 但是如果旧记录与新记录有相同的值,则在新记录被插入之前,旧记录被删除,即:尝试把新行插入到表中,当因为对于主键或唯一关键字出现重复关键字错误而造成插入失败时从表中删除含有重复关键字值的冲突行,再次尝试把新行插入到表中。

旧记录与新记录有相同的值的判断标准就是:表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。

语法格式:

REPLACEINTO `table_name`(`col_name`, ...) VALUES (...);
REPLACEINTO `table_name` (`col_name`, ...) SELECT ...;
REPLACEINTO `table_name` SET `col_name`='value'
示例: REPLACE INTO books SELECT 1 , 'MySQL Manual' FROM books

技巧三:ON DUPLICATE KEY UPDATE

具体语法: INSERT INTO table ( field1 , field2 , fieldn ) SELECT 'field1' , 'field2' , 'fieldn' FROM DUAL WHERE NOT EXISTS ( SELECT field FROM table WHERE field = ? )

其中的 DUAL 是一个临时表,不需要物理创建。

示例: INSERT INTO books ( name ) VALUES ( 'MySQL Manual' ) ON duplicate KEY UPDATE id = id

技巧四:INSERT INTO IF EXISTS

根据select的条件判断是否插入,可以不光通过primary 和unique来判断,也可通过其它条件。

示例: INSERT INTO books ( name ) SELECT 'MySQL Manual' FROM dual WHERE NOT EXISTS ( SELECT id FROM books WHERE id = 1 )

时间: 2024-10-30 10:15:27

MySQL基于条件判断的数据插入例子的相关文章

php查询mysql 多条件判断输出展示

  php查询mysql 多条件判断输出显示 背景: 从mysql查询各字段值输出并且按照条件用红色字体显示满足条件字段值. 条件: 1.syntime小于当前前一周时间的话显示红色. 2.A字段为"无"的话,显示红色. 3.B字段为"无"的话,显示红色. 图一数据库结构: 图二数据库各字段值: 我的代码:(我只满足了第一个条件,其余两个条件不知道该怎么来写) $sql = "select username, onoff, intime, syntime,

mysql数据库条件判断查询语句的常见写法说明

大家都知道只有的了mysql 5后才出现了存储过程,这些用法,那么我们要在sql 中用if else while这些,就得用存过程或函数来实例了. mysql> DELIMITER // mysql> CREATE FUNCTION myFunction (quantity INT(10)) RETURNS INT(10)     -> BEGIN     ->     ->     WHILE quantity MOD 12 > 0 DO     ->    

MySQL下将一个表的数据插入到另外一个表的实现语句_Mysql

如果2张表的字段一致,并且希望插入全部数据,可以用这种方法: Code: 复制代码 代码如下: INSERT INTO 目标表 SELECT * FROM 来源表; 比如要将 articles 表插入到 newArticles 表中,则是: 复制代码 代码如下: INSERT INTO newArticles SELECT * FROM articles; 如果只希望导入指定字段,可以用这种方法: 复制代码 代码如下: INSERT INTO 目标表 (字段1, 字段2, ...) SELECT

Mysql操作binlog二进制日志数据的例子

系统环境: 服务器系统:CentOS 6.5 x86_64 Mysql版本 :Mysql 5.1 一.binlog介绍 1.binlog,即二进制日志,它记录了数据库上的所有改变. 2.改变数据库的SQL语句执行结束时,将在binlog的末尾写入一条记录,同时通知语句解析器,语句执行完毕 3.binlog格式 1.基于语句,无法保证所有语句都在从库执行成功,比如update-limit 1; 2.基于行,将每一次发动记为binlog中的一行,在执行一个特别复杂的update或delete操作时,

mysql中创建修改删除数据表例子

在PHP中应用数据库时,通常是先在MySQL客户机的控制台中,使用DDL语句创建网站中的数据库.数据表及修改表结构等操作以后,再在PHP脚本中应用.很少直接在PHP中执行DDL语句动态创建数据库.数据表或修改表的操作,通常也只有在制作安装版本的网站时才会这么做. 1.创建表(CREATE TABLE) 数据库创建以后,使用use命令选定这个新创建的数据库作为默认(当前)数据库使用,就可以继续建立其包含的数据表.数据表的创建是使用表的前提,创建数据表主要是定义数据表的结构,包括数据表的名称.字段名

MySQL数据插入 查询 删除语句详解

MySQL数据插入 将数据插入到MySQL表,需要使用SQL INSERT INTO命令.可以将数据插入到MySQL表使用mysql>提示符下或使用任何脚本,如PHP. 语法: 下面是通用的SQL语法INSERT INTO命令来插入数据到MySQL表:  代码如下 复制代码 INSERT INTO table_name ( field1, field2,...fieldN )                        VALUES                        ( value

《Oracle SQL疑难解析》——1.16 基于条件的插入或修改

1.16 基于条件的插入或修改 Oracle SQL疑难解析 1.16.1 要解决的问题 我们需要在表中插入一条记录,插入前根据KEY标识符判断.如果标识符不存在,则插入新记录:如果标识符已经存在,则根据语句中所给的新值对原记录中的字段进行更新. 1.16.2 解决方法 MERGE语句的功能是将新数据插入一个表中.记录是否存在,由主(PRIMARY)键进行判断.如果主键不存在于表中,则插入该行.如果主键匹配表中已有的行,则通过匹配键的其他详细信息更新该行. 在示例中,假设要把NEW_COUNTR

Mysql数据库实践操作之————批量插入数据(100万级别的数据)

第一种方法:使用insert into 插入 从Redis每次获取100条数据,根据条件去插入到Mysql数据库中: 条件: 如果当前队列中的值大于1000条,则会自动的条用该方法,该方法每次获取从队列的头部每次获取100掉数据插入到Mysql数据库中,同时以当前队列的长度为插入条件. 1000为原始数据,从队列头获取100条,插入到Mysql数据,同时删除已经插入的数据,再通过队列的长度判断是否继续插入,直到循环不满足条件为止. [1]获取头100条数据:$redis->lRange($liv

开发kettle插件,可以找到Mysql数据库中的表,但无法将数据插入。

问题描述 开发kettle插件,可以找到Mysql数据库中的表,但无法将数据插入. 在kettle二次开发时基于java,已经可以找到表中的各个列名,在运行转换时无法将数据插入. 解决方案 http://blog.csdn.net/feng19821209/article/details/8257648