MySql SELECT INTO 记录为空的问题

SELECT Id INTO @Id FROM GiftCode WHERE Status = 1 AND GiftId = #GiftId# ORDER BY Id ASC LIMIT 1;
      UPDATE GiftCode SET UsedTime = NOW(),Status = 2,AccountId = #AccountId# WHERE Id = @Id;
      SELECT * FROM GiftCode WHERE Id = @Id;

如题,这3句SQL,在SQLSERVER中是没有问题的,如果在MYSQL中,会因为第一句没有查找到记录,影响行数为0,不会执行INTO的操作

@Id的变量,会维持前一次会话中的结果。(@是会话变量),造成程序问题

解决办法:

在最前面加一句:      SET @Id = 0;

就可以解决,如果有更好的解决办法,请回帖!

环境:asp.net framework 3.5/ibatis.net/mysql

时间: 2024-10-11 17:14:53

MySql SELECT INTO 记录为空的问题的相关文章

创建角色随机名字(mysql抽取随机记录)和mysql游标的使用

最近在开发中遇到了一些问题,在此记录一下解决的方法,已作备忘. 1.现在创建游戏角色的时候,基本上都是支持角色名字随机的,以前此功能在客户端用代码实现,然后向服务器请求并验证,后来发现有时候连续几次都失败,所以改成在服务器实现.实现方法主要考虑使用mysql随机查询记录,在网上查了很多方案,然后用在了我们游戏中. 实现方案是,将所有随机名字都插入到一张表中,然后从中随机取一条当前角色表中没有出现过的名字. BEGIN DECLARE randnum int DEFAULT 0; SELECT F

Mysql常用操作记录

在linux平台中相关的MySql操作 打开Mysql mysql -uroot -p  //-u后边为用户名,-p后边为密码 1:使用SHOW语句找出在服务器上当前存在什么数据库:mysql> SHOW DATABASES;2:2.创建一个数据库MYSQLDATAmysql> CREATE DATABASE MYSQLDATA;3:选择你所创建的数据库mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!)4:查看现在的数据库中存在

mysql SELECT FOUND_ROWS()与COUNT(*)用法区别

在mysql中 FOUND_ROWS()与COUNT(*)都可以统计记录,如果都一样为什么会有两个这样的函数呢,下面我来介绍SELECT FOUND_ROWS()与COUNT(*)用法区别 SELECT语句中经常可能用LIMIT限制返回行数.有时候可能想要知道如果没有LIMIT会返回多少行,但又不想再执行一次相同语句.那么,在SELECT查询中包含SQL_CALC_FOUND_ROWS选项,然后执行FOUND_ROWS()就可以了:  代码如下 复制代码 mysql> SELECT SQL_CA

php学习之道:mysql SELECT FOUND_ROWS()与COUNT(*)用法区别

在mysql中 FOUND_ROWS()与COUNT(*)都可以统计记录,如果都一样为什么会有两个这样的函数呢,下面我来介绍SELECT FOUND_ROWS()与COUNT(*)用法区别 SELECT语句中经常可能用LIMIT限制返回行数.有时候可能想要知道如果没有LIMIT会返回多少行,但又不想再执行一次相同语句.那么,在SELECT查询中包含SQL_CALC_FOUND_ROWS选项,然后执行FOUND_ROWS()就可以了:  代码如下 复制代码 mysql> SELECT SQL_CA

mysql select 1

看数据库连接池源码,发现连接池的参数validationQuery(SQL查询,用来验证从连接池取出的连接)设置的值为"SELECT 1",之前很少用这种写法,于是 google一下,总结如下: 以seven_user表为例,如下是建表语句: CREATE TABLE `smily_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `version` int(4) NOT NULL DEFAULT '0', PRIMARY KEY (`id`)

mysql中判断记录是否存在方法比较【转】

把数据写入到数据库的时,常常会碰到先要检测要插入的记录是否存在,然后决定是否要写入. 我这里总结了判断记录是否存在的常用方法: sql语句:select count(*) from tablename; 然后读取count(*)的值判断记录是否存在.对于这种方法性能上有些浪费,我们只是想判断记录记录是否存在,没有必要全部都查出来. 以下这个方法是我推荐的. sql语句:select 1 from tablename where col = col limit 1; 然后读取语句执行所影响的行数.

mysql 的一些记录的操作

①:删除表记录 用delete删除记录 DELETE 语句有如下格式: DELETE FROM tbl_name WHERE 要删除的记录 WHERE 子句指定哪些记录应该删除.它是可选的,但是如果不选的话,将会删除所有的记录.这意味 着最简单的 DELETE 语句也是最危险的. 这个查询将清除表中的所有内容.一定要当心! 为了删除特定的记录,可用 WHERE 子句来选择所要删除的记录.这类似于 SELECT 语句中的 WHERE 子句. mysql> delete from pet where

mysql删除重复记录,保存Id最小的一条

方法1: 1.创建一个临时表,选取需要的数据. 2.清空原表. 3.临时表数据导入到原表. 4.删除临时表. mysql> select * from student; +----+------+ | ID | NAME | +----+------+ | 11 | aa | | 12 | aa | | 13 | bb | | 14 | bb | | 15 | bb | | 16 | cc | +----+------+ 6 rows in set mysql> create temporar

Mysql select语句设置默认值

1.在没有设置默认值的情况下: SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_time FROM userinfo LEFT JOIN region ON userinfo.adm_regionid = region.id 结果: 设置显示默认值: SELECT userinfo.id, user_name, role, adm_regionid, IFNULL(region_name,0) as