如何在mysql里实现 oracle里的两表联查 cat.id=dog.id(+)这种 为空补全的方法
left 或者right outer join
想在哪一个表补全 就放在 left或者 right
in查询 能够用left semi join 来代替(注意join表不能在select字段中出现)
jdbc获取最后插入生成的id
ps = conn.prepareStatement("insert into test(name) value(?)",Statement.RETURN_GENERATED_KEYS);
ps.setString(1, "test");
ps.execute();
rs = ps.getGeneratedKeys();
int id=0;//保存生成的ID
if (rs != null&&rs.next()) {
id=rs.getInt(1)
}mysql
补充下 由于max(XXXX)函数在mysql里 不知为何
当max(整形time)时候 竟然返回的不是最大的那个整形时间~。~ 哭死了 形成逻辑一直不对sql
因此 我用 order by time desc 在加上limit 0,1 这样组合获取到了最大值
哎 那位大侠能告诉我 为何mysql里max函数很差使。。。。。。
oracle
还有mysql查看慢查询语句函数
mysql的查询语句数
show global status like 'com_select';
mysql的查询链接数
show global status like 'connections';
链接到mysql的ip
netstat -an
进程号
netstat -anb
显示慢查询的次数(默认10秒)
show status like 'slow_queries';
把慢查询的sql记录到日志中
须要在启动的时候指定慢查询
bin\mysqld.exe --safe-mode --slow-query-log ( 高版本5.5 在my.ini指定)
bin\mysqld.exe - log-slow-queries=d:/abc.log (低版本5.0 在my.ini指定)
先关闭再从新启动(先中止服务)
默认吧日志文件放在my.ini里有个datadir路径下
从新设置慢查询为1秒
设置慢查询为1秒
show variables like 'long_query_time';
set long_query_time=1;
为了存储过程能正常执行,须要把命令结束符号修改成不为;
delimiter $$
修改成$$
处理多条数据的时候
set autocommit==0;
.......
commit;
存储过程里的for循环
repeat
set i=i+1;
.....
until i=max_num
end repeat;日志