mysql 重複記錄刪除

 

1
2
3
4
5
delete users_groups as a from users_groups as a,
(
select *,min(id) from users_groups group by uid having count(1) > 1
) as b
where a.uid = b.uid and a.id > b.id;

摘錄自
http://yueliangdao0608.blog.51cto.com/397025/81391

mysql更新兩個表使用子查詢的案例

在大陸的javaeye看到的
先抄一下 搞不好以後會看到
table a 要更新兩個欄位 來源是 table b
條件是age>=40.
解法1.

 

1
2
3
update a inner join b on a.id=b.id
set A.column1 =b.column1,a.column2=b.column2
where b.age>40;

解法2.

 

1
2
3
4
5
6
7
8
9
10
11
update A,B
set A.column1 = (
select b.column1
from B where B.id = A.id
and B.age > 40
),
A.column2 = (
select b.column2
from B where B.id = A.id
and B.age > 40
) where b.id=a.id and b.age>40;

我想到的是解法2不過看起來解法1.比較簡潔

mysql 抓前三天的資料

set @dt = now();select from tb_target where mydate = date_add(@dt, interval -3 day) ;
date_add函數還滿好用的

其他的用法
set @dt = now();
select date_add(@dt, interval 1 day); — add 1 day
select date_add(@dt, interval 1 hour); — add 1 hour
select date_add(@dt, interval 1 minute); — …
select date_add(@dt, interval 1 second);
select date_add(@dt, interval 1 microsecond);
select date_add(@dt, interval 1 week);
select date_add(@dt, interval 1 month);
select date_add(@dt, interval 1 quarter);
select date_add(@dt, interval 1 year)

Incorrect key file for table 的方式

通常用repair table tbname 即可
但是……..總是有例外的
mysql> repair table tb1 ;
+———+——–+———-+——————————————————-+
| Table | Op | Msg_type | Msg_text |
+———+——–+———-+——————————————————-+
| db1.tb1 | repair | Error | Incorrect key file for table ‘tb1’; try to repair it |
| db1.tb1 | repair | error | Corrupt |
+———+——–+———-+——————————————————-+
2 rows in set (0.00 sec)
拜訪google大神之後
實驗的結果……….
Use:

 

1
repair table tablename use_frm;

mysql 在command line底下匯入匯出.sql

參考來源
http://fireyoyo.pixnet.net/blog/post/26579738
匯入

1
mysql -u root -p db < sqlname.sql --default-character-set=utf8

匯出

1
2
mysql -u root -p db >sqlname.sql --default-character-set=utf8
mysqldump --default-character-set=utf8 --skip-opt -u username -p avhighn cdb_members > db.sql

第一種是謠傳的說法 沒實驗過

Can’t find file: ‘./mysql/host.frm’

今天遇到的mysql問題

1.Can’t find file: ‘./mysql/host.frm’

修改/var/lib/mysql內資料夾的權限為mysql:mysql

2.Failed to open log (file ‘./mysql-bin.000001’)
把mysql-bin.index 移除 重新啟動即可
3.權限表的錯誤
mysql_install_db 重新跑一次
如果好了以後出現 Can’t find file: ‘./mysql/host.frm’ 再去調權限即可

存入html到資料庫與防止sql injection

為了預防sql injection 通常不是用htmlspecialchars 就是使用mysql_escape_string
可是mysql_escape_string會有語系上得問題,htmlspecialchars似乎是比較好的選擇
不過存入後要取出
可能會有些意外,例如& # 174 ;這種特殊符號上了網頁 還是只有原來的& # 174 ;
更慘的是如果是存入meta標籤,會直接類似-&gt的符號…變成字串顯示而不是標籤了
如果使用htmlspecialchars 但是又要顯示html標籤
記得一定要使用htmlspecialchars_decode讓他回復正常….

mysql寫入時間

筆記一下
即時寫入mysql的時間有兩種
一種是now()
一種是CURRENT_TIMESTAMP()
前面的 是以mysql時間設定為主
後面的是以作業系統時間為主
這裡的作業系統是unix like……win32我沒有試過

 

datatime format 是不可以使用CURRENT_TIMESTAMP() 與 now()