標籤彙整為 'mysql'

Mysql 只保留七天的 mysql-bin log

my.cnf
log-bin = /var/log/mysql/mysql-bin.log => 存放位置
expire-logs-days = 7 => 保存天數
max_binlog_size = 104857600 => 單一記錄檔最大容量
重新啟動 mysql 之後,將會只保留七天份的 log 檔案。
mysql-bin.log 目的可以幫你恢復 mysql 某點狀態,或者查看過去 mysql 的 sql 記錄。
參考資料 Restoring lost data from the Binary Upate Log
參考資料 mysql binary log 超佔空間~ 導致 /var 分割區爆滿
分享此文章

[...]

MySQL使用rand函數實現隨機數

有朋友問到如何在mysql中使用隨機數
如何寫一個語句能一下更新幾百條MYSQL數據!
需要測試MYSQL數據庫,裡面有一個上萬條數據的數據庫,如何寫一個PHP文件一下每次更新幾百條信息,我都是寫一個循環一次更新一條信息,這樣我知道用WHILE寫就可以了,要是一次更新好比100條數據改如何寫呢!
謝謝
正確答案是:UPDATE cdb_posts  SET  views = rand();
順便給你找了點關於mysql rand函數的實例,如下:
那就在insert 命令中,value()裡面用rand(),注意字段寬度是否夠一直以為mysql隨機查詢幾條數據,就用

SELECT * FROM `table` ORDER BY RAND() LIMIT 5

就可以了。
但是真正測試一下才發現這樣效率非常低。一個15萬餘條的庫,查詢5條數據,居然要8秒以上
查看官方手冊,也說rand()放在ORDER BY 子句中會被執行多次,自然效率及很低。

You cannot use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times.
搜索Google,網上基本上都是查詢max(id) * rand()來隨機獲取數據。

SELECT *
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2
WHERE t1.id [...]

Mysql 中文search

select name from detail where name like ‘%a%’

會出現英文以外的中文字.例如: “新”而且效能不好所以不建議用。

SELECT * FROM table WHERE locate(substr,str)>0 ;

這個是不包括大小階但沒有剛才的問題

SELECT * FROM TABLE WHERE FIELDS LIKE BINARY ‘%FIND%’

這是有區別大小階的 需要使用lower,upper來轉換

select field from detail where binary ucase(field) like concat(’%’,ucase(’a’),’%’)

這個沒有search英文出中文的問題,而且沒有大小階的問題。但因為使用like 所以速度較慢。

最好的方法是使用正則表達式方法如下:

分享此文章