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了