前Oracle 已离职首席工程师怒喷:MySQL 是“超烂的数据库”
如何使用MySQL数据库?
网络上教程一搜一大把,没什么难的
mysql数据库cpu飙升800%,如何故障定位及优化?
Mysql 数据库的事件和存储过程的问题
我给你举个例子吧!
MySQL存储过程例子,包含事务,参数,嵌套调用,游标,循环等,阅读MySQL存储过程例子,包含事务,参数,嵌套调用,游标,循环等,viewplaincopytoclipboardprint?dropprocedureifexistspro_rep_shadow_rs;delimiter|-------------------------------
viewplaincopytoclipboardprint?
dropprocedureifexistspro_rep_shadow_rs;
delimiter|
----------------------------------
--rep_shadow_rs
--用来处理信息的增加,更新和删除
--每次只更新上次以来没有做过的数据
--根据不同的标志位
--需要一个输出的参数,
--如果返回为0,则调用失败,事务回滚
--如果返回为1,调用成功,事务提交
--测试方法
--callpro_rep_shadow_rs(@rtn);
--select@rtn;
----------------------------------
createprocedurepro_rep_shadow_rs(outrtnint)
begin
--声明变量,所有的声明必须在非声明的语句前面
declareiLast_rep_sync_idintdefault-1;
declareiMax_rep_sync_idintdefault-1;
--如果出现异常,或自动处理并rollback,但不再通知调用方了
--如果希望应用获得异常,需要将下面这一句,以及启动事务和提交事务的语句全部去掉
declareexithandlerforsqlexceptionrollback;
--查找上一次的
selecteidintoiLast_rep_sync_idfromrep_de_proc_logwheretbl='rep_shadow_rs';
--如果不存在,则增加一行
ifiLast_rep_sync_id=-1then
insertintorep_de_proc_log(rid,eid,tbl)values(0,0,'rep_shadow_rs');
setiLast_rep_sync_id=0;
endif;
--下一个数字
setiLast_rep_sync_id=iLast_rep_sync_id+1;
--设置默认的返回值为0:失败
setrtn=0;
--启动事务
starttransaction;
--查找最大编号
selectmax(rep_sync_id)intoiMax_rep_sync_idfromrep_shadow_rs;
--有新数据
ifiMax_rep_sync_id>=iLast_rep_sync_idthen
callpro_rep_shadow_rs_do(iLast_rep_sync_id,iMax_rep_sync_id);
--更新日志
updaterep_de_proc_logsetrid=iLast_rep_sync_id,eid=iMax_rep_sync_idwheretbl='rep_shadow_rs';
endif;
--运行没有异常,提交事务
commit;
--设置返回值为1
setrtn=1;
delimiter;
dropprocedureifexistspro_rep_shadow_rs_do;
delimiter|
---------------------------------
--处理指定编号范围内的数据
--需要输入2个参数
--last_rep_sync_id是编号的最小值
--max_rep_sync_id是编号的最大值
--无返回值
---------------------------------
createprocedurepro_rep_shadow_rs_do(last_rep_sync_idint,max_rep_sync_idint)
begin
declareiRep_operationtypevarchar(1);
declareiRep_statusvarchar(1);
declareiRep_Sync_idint;
declareiIdint;
--这个用于处理游标到达最后一行的情况
declarestopintdefault0;
--声明游标
declarecurcursorforselectid,Rep_operationtype,iRep_status,rep_sync_idfromrep_shadow_rswhererep_sync_idbetweenlast_rep_sync_idandmax_rep_sync_id;
--声明游标的异常处理,设置一个终止标记
declareCONTINUEHANDLERFORSQLSTATE'02000'SETstop=1;
--打开游标
opencur;
--读取一行数据到变量
fetchcurintoiId,iRep_operationtype,iRep_status,iRep_Sync_id;
--这个就是判断是否游标已经到达了最后
whilestop<>1do
--各种判断
ifiRep_operationtype='I'then
insertintors0811(id,fnbm)selectid,fnbmfromrep_shadow_rswhererep_sync_id=iRep_sync_id;
elseifiRep_operationtype='U'then
begin
ifiRep_status='A'then
insertintors0811(id,fnbm)selectid,fnbmfromrep_shadow_rswhererep_sync_id=iRep_sync_id;
elseifiRep_status='B'then
deletefromrs0811whereid=iId;
endif;
elseifiRep_operationtype='D'then
deletefromrs0811whereid=iId;
endif;
--读取下一行的数据
fetchcurintoiId,iRep_operationtype,iRep_status,iRep_Sync_id;
endwhile;--循环结束
closecur;--关闭游标
我现在就是不明白怎么建表的时候,表名怎么根据时间来生成。你帮我写一个好吗
查看mysql数据库存在哪些事件
1、进入数据库MySQL> use cpc;Database changed2、输入 show events\G; 指令;mysql> show events\G;
mysql数据库事件调用有错误日志记录吗
一.错误日志
错误日志在Mysql数据库中很重要,它记录着mysqld启动和停止,以及服务器在运行过程中发生的任何错误的相关信息。
1.配置信息
--log-error=[file-name]用来指定错误日志存放的位置。
如果没有指定[file-name],默认hostname.err做为文件名,默认存放在DATADIR目录中。
也可以将log-error配置到my.cnf文件中,这样就省去了每次在启动mysqld时都手工指定--log-error.例如:
[mysql@test2]$ vi /etc/my.cnf
# The MySQL server
[mysqld]
....不用
mysql数据库事务是什么,能简单定义一下吗
在创建表的时候create table xxxx ( ..........) engine innoDB; 后一句表示创建引擎类型为innoDB,它支持事务,
开启一个事务: start transaction;
然后你写你的sql语句,无论你写多少,只要没提交事务,这个事务就存在,有commit显式提交,还有隐式提交,你觉得你写的sql语句没有问题时就,你就commit; 提交这个事务;如果前面你写的sql语句出了问题,比如有条sql语句是批量改金币什么的,改多了。 Rollback;回滚,意思是回到你开启事务时的状态,就是说你开启事务后的所有sql操作当作没有发生,你重新来过。
注意:当一个事务commit,或者rollback就结束了把到mysql中取序列值并增加1的这个过程单独写成一个方法,这个方法上加上事务控制,并且事务传播行为设置是transactiondefinition.propagation_nested,即嵌套事务,也就是说不管这个方法外面有没有事务,这个方法自己本身都用新的、独立的一个事务来控制。这样即使外面事务失败了,这个序列值不会受到影响。展开全部
把数据库表类型设置成InnoDB就ok了