如何在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;日誌