mysql 存储过程判断重复的不插入数据

mysql存储过程中

下面是一个较常见的场景,判断表中某列是否存在某值,如果存在执行某操作

需要注意的是不能用if exists;

exists可以在where后面或者在create object是使用,但是在if语句中不可以使用,只能用变通的方法。

delimiter $$
create procedure proc_add_book(in $bookName varchar(200),in $price float)
begin
  declare $existsFlag int default 0;
  select bookId into $existsFlag from book where bookName = $bookName limit 1;
  if bookId > 0 then
  #if not exists (select * from book where bookNumber = $bookName) then
    insert into book(bookNumber,price) values($bookName,$price);
  end if;
end$$
delimiter ;
(0)

相关推荐

  • MySQL实现创建存储过程并循环添加记录的方法

    本文实例讲述了MySQL实现创建存储过程并循环添加记录的方法.分享给大家供大家参考,具体如下: 先创建,然后调用: -- 创建存储过程 DELIMITER;// create procedure myproc() begin declare num int; set num=1; while num <= 24 do insert into t_calendar_hour(hourlist) values(num); set num=num+1; end while; commit; end;/

  • Mybatis调用MySQL存储过程的简单实现

    1.存储过程的简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的.数据库中的存储过程可以看做是对编程中

  • mysql 5.7更改数据库的数据存储位置的解决方法

    随着MySQL数据库存储的数据逐渐变大,已经将原来的存储数据的空间占满了,导致mysql已经链接不上了.因此,必须要给存放的数据换个地方了.下面是操作过程中的一些步骤.记下来,以后日后查看. 1.修改mysql数据存放的目录 要修改两个地方,其一是修改/etc/my.cnf文件中的datadir.默认情况下: datadir=/var/lib/mysql 因为我的/data/目录比较大,所以将其改为: datadir=/data/mysql/ 还要修改/etc/init.d/mysqld文件,将

  • 解析MySQL中存储时间日期类型的选择问题

    一般应用中,我们用timestamp,datetime,int类型来存储时间格式: int(对应javaBean中的Integer或int) 1. 占用4个字节 2. 建立索引之后,查询速度快 3. 条件范围搜索可以使用使用between 4. 不能使用mysql提供的时间函数 结论:适合需要进行大量时间范围查询的数据表 datetime(javaBean中用Date类型) 1. 占用8个字节 2. 允许为空值,可以自定义值,系统不会自动修改其值. 3. 实际格式储存(Just stores w

  • mysql 存储过程判断重复的不插入数据

    mysql存储过程中 下面是一个较常见的场景,判断表中某列是否存在某值,如果存在执行某操作 需要注意的是不能用if exists; exists可以在where后面或者在create object是使用,但是在if语句中不可以使用,只能用变通的方法. delimiter $$ create procedure proc_add_book(in $bookName varchar(200),in $price float) begin declare $existsFlag int default

  • MySQL存储过程的创建使用以及实现数据快速插入

    目录 一,存储过程介绍 二,存储过程的优缺点 三,存储过程的创建与调用 3.1,存储过程中的常用语法及参数 3.2,存储过程的使用 四,存储过程中的变量及使用细则 4.1,变量定义 4.2,变量赋值 4.3,用户变量的使用 4.4,存储过程的一些常用查看命令 五,常用的存储过程的控制语句 5.1,条件语句 5.1.1,if-then-else 5.1.2,case语句 5.2,循环语句 5.2.1,while ……end while语句 5.2.2,repeat……end repeat语句 5.

  • MYSQL开发性能研究之批量插入数据的优化方法

    一.我们遇到了什么问题 在标准SQL里面,我们通常会写下如下的SQL insert语句. INSERT INTO TBL_TEST (id) VALUES(1); 很显然,在MYSQL中,这样的方式也是可行的.但是当我们需要批量插入数据的时候,这样的语句却会出现性能问题.例如说,如果有需要插入100000条数据,那么就需要有100000条insert语句,每一句都需要提交到关系引擎那里去解析,优化,然后才能够到达存储引擎做真的插入工作. 正是由于性能的瓶颈问题,MYSQL官方文档也就提到了使用批

  • mysql存储中使用while批量插入数据(批量提交和单个提交的区别)

    目录 批量提交 完整写法 单个提交 完整写法 结论 批量提交 while 语句写法:     while '条件' do             循环体语句;     end while; 完整写法 drop procedure if exists test_insert; delimiter $$ create procedure test_insert(n int)     begin     declare v int default 0;     set AUTOCOMMIT = 0;

  • 使用JDBC在MySQL数据库中如何快速批量插入数据

    使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(10W+),如何提高效率呢? 在JDBC编程接口中Statement 有两个方法特别值得注意: void addBatch() throws SQLException Adds a set of parameters to this PreparedStatement object's batch of commands. int[] executeBatch() throws SQLException Submits

  • MySQL如何利用存储过程快速生成100万条数据详解

    1.在测试的时候为了测试大数据量的情况下项目的抗压能力我们通常要创造一些测试数据那么现在这个方法绝对好用 其中可能会有sql空间的报错可以自己尝试解决,这里做了分批插入,每次插入30万条,所以没有遇到类似的空间问题 首先,创建要插入100万数据的表格 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for sdb_b2c_orders -- ----

  • mysql存储过程之错误处理实例详解

    本文实例讲述了mysql存储过程之错误处理.分享给大家供大家参考,具体如下: 当存储过程中发生错误时,重要的是适当处理它,例如:继续或退出当前代码块的执行,并发出有意义的错误消息.其中mysql提供了一种简单的方法来定义处理从一般条件(如警告或异常)到特定条件(例如特定错误代码)的处理程序.完事我们来使用DECLARE HANDLER语句来尝试声明一个处理程序,先来看语法: DECLARE action HANDLER FOR condition_value statement; 上述sql中,

  • MySql三种避免重复插入数据的方法

    前言 MySql 在存在主键冲突或唯一键冲突的情况下,根据插入方式,一般有以下三种插入方式避免错误. insert ignore. replace into insert on duplicate key update insert ignore insert ignore 会忽视数据库中已经存在的数据,根据主键或者唯一索引判断,如果数据库没有数据,就会插入新的数据,如果有数据的话就跳过这条数据 小case 表结构 root:test> show create table t3G *******

  • 防止MySQL重复插入数据的三种方法

    新建表格 CREATE TABLE `person` ( `id` int NOT NULL COMMENT '主键', `name` varchar(64) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '姓名', `age` int NULL DEFAULT NULL COMMENT '年龄', `address` varchar(512) CHARACTER SET utf8 COLLATE utf8_bin N

  • Mysql避免重复插入数据的4种方式

    最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦,因此需要对插入语句做特殊处理,尽量避开或忽略异常,下面我简单介绍一下,感兴趣的朋友可以尝试一下: 这里为了方便演示,我新建了一个user测试表,主要有id,username,sex,address这4个字段,其中主键为id(自增),同时对username字段设置了唯一索引: 01 insert ignore into 即插入数据时,如果数据存在,则忽略此次插入,前提条件是插入的数据字段设置了

随机推荐