当前位置:首页 » 存储配置 » mysql存储过程update

mysql存储过程update

发布时间: 2022-08-06 19:16:13

‘壹’ mysql存储过程能返回update更新操作的结果吗

在存储过程中使用ROW_COUNT()
mysql> select * from a1;
-> //
+------+-------+
| id | name |
+------+-------+
| 1 | timac |
+------+-------+
1 row in set (0.00 sec)
mysql> \d ;
mysql> update a1 set name='king' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select row_count();
+-------------+
| row_count() |
+-------------+
| 1 |
+-------------+
1 row in set (0.00 sec)
mysql> insert into a1 values(2,'K1'),(3,'K2');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select row_count();
+-------------+
| row_count() |
+-------------+
| 2 |
+-------------+
1 row in set (0.00 sec)

mysql> update a1 set name='kings' where id=4;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0
mysql> select row_count();
+-------------+
| row_count() |
+-------------+
| 0 |
+-------------+
1 row in set (0.00 sec)

只有返回的row_count()值大小还判断是否成功

‘贰’ MySQL在原存储过程中增加update修改记录行报1064错误请教大神

1064是SQL的语法错误,最简单最低级的错误而已。
你这个update语句本身就有问题:

UPDATE woic SET seq=comments WHERE seq='000' AND check_passed=0;
这里的comments 应该是传进来的吧?你如果不传进来就要给常量。

‘叁’ 有谁可以给个MySql的 Update的存储过程的例子,模板啊,坐等,在线

创建一个存储过来用来监控mysql的SELECT、INSERT、UPDATE、DELETE使用情况。
## 创建存储过程pCheckDbStatus1()
drop procere if exists pCheckDbStatus1;
delimiter //
create procere pCheckDbStatus1()
begin
SET @uptime=0;
SET @com_select=0;
SET @com_insert=0;
SET @com_delete=0;
SET @com_update=0;
select @COM_DELETE:=variable_value FROM information_schema.GLOBAL_STATUS WHERE variable_name='COM_DELETE';
select @COM_INSERT:=variable_value FROM information_schema.GLOBAL_STATUS WHERE variable_name='COM_INSERT';
select @COM_SELECT:=variable_value FROM information_schema.GLOBAL_STATUS WHERE variable_name='COM_SELECT';
select @COM_UPDATE:=variable_value FROM information_schema.GLOBAL_STATUS WHERE variable_name='COM_UPDATE';
select @UPTIME:=variable_value FROM information_schema.GLOBAL_STATUS WHERE variable_name='UPTIME';
INSERT INTO DbStatus1
SELECT
NOW(),
(@com_select-com_select)/(@uptime-uptime),
(@com_insert-com_insert)/(@uptime-uptime),
(@com_update-com_update)/(@uptime-uptime),
(@com_delete-com_delete)/(@uptime-uptime)
FROM CheckDbStatus1 ORDER BY check_id DESC LIMIT 1;
INSERT INTO CheckDbStatus1 VALUES (NULL,now(),@uptime,@com_select,@com_insert,@com_update,@com_delete);
end;
//
delimiter ;

存储过程中需要用到两张表,所以我们还需要建立两张表,如下:
##创建表DbStatus1
CREATE TABLE `DbStatus1` (
`time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`select_status` float DEFAULT NULL,
`insert_status` float DEFAULT NULL,
`update_status` float DEFAULT NULL,
`delete_status` float DEFAULT NULL,
PRIMARY KEY (`time`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

##创建表CheckDbStatus1
CREATE TABLE `CheckDbStatus1` (
`check_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`uptime` int(10) unsigned DEFAULT NULL,
`com_select` int(10) unsigned DEFAULT NULL,
`com_insert` int(10) unsigned DEFAULT NULL,
`com_update` int(10) unsigned DEFAULT NULL,
`com_delete` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`check_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

‘肆’ MySql存储过程中update表 无变化,具体代码如下, 求大神解释~!

看看你的guid的值,是不是空的

‘伍’ mysql的存储过程中如何在update修改表时,同时修改返回的参数

你想返回的是column_1的名字 还是column_1的值

另外 你一次修改的是单条数据还是多条数据

‘陆’ mysql存储过程出现锁表锁行的情况怎么解决

行锁的等待

在介绍如何解决行锁等待问题前,先简单介绍下这类问题产生的原因。产生原因简述:当多个事务同时去操作(增删改)某一行数据的时候,MySQL 为了维护 ACID 特性,就会用锁的形式来防止多个事务同时操作某一行数据,避免数据不一致。只有分配到行锁的事务才有权力操作该数据行,直到该事务结束,才释放行锁,而其他没有分配到行锁的事务就会产生行锁等待。如果等待时间超过了配置值(也就是 innodb_lock_wait_timeout 参数的值,个人习惯配置成 5s,MySQL 官方默认为 50s),则会抛出行锁等待超时错误。


如上图所示,事务 A 与事务 B 同时会去 Insert 一条主键值为 1 的数据,由于事务 A 首先获取了主键值为 1 的行锁,导致事务 B 因无法获取行锁而产生等待,等到事务 A 提交后,事务 B 才获取该行锁,完成提交。这里强调的是行锁的概念,虽然事务 B 重复插入了主键,但是在获取行锁之前,事务一直是处于行锁等待的状态,只有获取行锁后,才会报主键冲突的错误。当然这种 Insert 行锁冲突的问题比较少见,只有在大量并发插入场景下才会出现,项目上真正常见的是 update&delete 之间行锁等待,这里只是用于示例,原理都是相同的。


三、产生的原因根据我之前接触到的此类问题,大致可以分为以下几种原因

‘柒’ Mysql 存储过程 UPDATE语句 字段=传递过来的参数字符串参数

mysql存储过程支持用表作为参数。
这个问题在MySQL 5.0以前非常麻烦,但是在MySQL 5.0.13版之后,由于引入了PREPARE语句,一切变得简单了。
例子如下(已验证):
DROP PROCEDURE IF EXISTS `newtable`;
CREATE PROCEDURE `newtable`(IN tname varchar(64))
BEGIN
SET @sqlcmd = CONCAT('CREATE TABLE ', tname, ' (id int NOT NULL AUTO_INCREMENT, name varchar(64) DEFAULT NULL, PRIMARY KEY (`id`))');
PREPARE stmt FROM @sqlcmd;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END;
call newtable('abc');

‘捌’ mysql批量更新存储过程怎么写

java">createprocerebatchUpdate(innint)
begin
declareinParamintdefaultn;
declareiintdefault1;
declareidint;
declareusernamevarchar(255);
declareintegralvarchar(255);
declarerankingint;
declare_resultSetcursorforselecta.id,a.username,a.integral,a.rankingfromuseraorderbya.integraldesclimitinParam;
open_resultSet;
whilei<=inParamdo
fetch_resultSetintoid,username,integral,ranking;
updateuseraseta.ranking=iwherea.id=id;
seti=i+1;
endwhile;
close_resultSet;
end;

mysql>select*fromuser;
+----+----------+----------+---------+
|id|username|integral|ranking|
+----+----------+----------+---------+
|1|abc|1|0|
|2|abc|2|0|
|3|abc|3|0|
|4|abc|4|0|
|5|abc|5|0|
|6|abc|6|0|
|7|abc|7|0|
|8|abc|8|0|
|9|abc|9|0|
|10|abc|10|0|
|11|abc|11|0|
|12|abc|12|0|
|13|abc|13|0|
|14|abc|14|0|
+----+----------+----------+---------+
14rowsinset

mysql>callbatchUpdate(14);
QueryOK,1rowaffected

mysql>select*fromuser;
+----+----------+----------+---------+
|id|username|integral|ranking|
+----+----------+----------+---------+
|1|abc|1|14|
|2|abc|2|13|
|3|abc|3|12|
|4|abc|4|11|
|5|abc|5|10|
|6|abc|6|9|
|7|abc|7|8|
|8|abc|8|7|
|9|abc|9|6|
|10|abc|10|5|
|11|abc|11|4|
|12|abc|12|3|
|13|abc|13|2|
|14|abc|14|1|
+----+----------+----------+---------+
14rowsinset

‘玖’ mysql 存储过程中update影响行数为0,回滚

使用FOUND_ROWS() 获得影响的行数,再用IF判断是否等于0就行了。

--开始事务
starttransaction;

callsetCoin(zjAmount,0,`uid`,liqType,`type`,info,_betId,serializeId,'');
updateblast_betssetlotteryNo=_kjData,zjCount=_zjCount,bonus=zjAmount,fanDianAmount=_fanDianAmountSelfwhereid=_betId;
IFFOUND_ROWS()=0THEN
ROLLBACK;
ELSE
COMMIT;
ENDIF;
commit;
热点内容
32k脚本 发布:2025-01-26 04:40:34 浏览:810
存储服务器价格 发布:2025-01-26 04:28:38 浏览:25
qq上传流量 发布:2025-01-26 03:51:53 浏览:269
程序编译后的文件 发布:2025-01-26 03:48:23 浏览:27
sqlexistsin 发布:2025-01-26 03:43:27 浏览:993
我的世界网易版开局就神装的服务器 发布:2025-01-26 03:38:48 浏览:498
cs编译器没有bsp文件 发布:2025-01-26 03:30:57 浏览:202
星秀猫源码 发布:2025-01-26 03:30:56 浏览:600
dockerphpfpm 发布:2025-01-26 03:11:38 浏览:903
linux保存退出vi 发布:2025-01-26 03:10:14 浏览:65