[MySQL] 在同一張資料表進行複製資料的操作

最近剛好碰到需要在同一個table內copy資料的情況
由於先dump出來再操作實在是覺得有點麻煩又有點蠢
想到應該可以直接下SQL來完成這件事情
於是稍微研究了一下
基本上只要避開primary column即可完成
例如:有一張資料表叫做table_1,表結構有三個欄位,分別是col_1, col_2, col_3,其中col_1為primary column,然後使用下列SQL語法:

INSERT INTO table_1(col_2, col_3) SELECT (col_2, col_3) FROM table_1 WHERE col_2 > 100

下了這行SQL後,會在資料表複製並寫入現在col_2值大於100的資料

Leave a comment

[MySQL] 字串取代與連接 (REPLACE、CONCAT)

取代字串:REPLACE(欄位名稱, '欲取代的字串', '取代後的字串')

# 將efg開頭的字串取代
UPDATE table SET column = REPLACE(column, 'efg', 'zzz') WHERE column LIKE 'efg%';
將efg結尾的字串取代
UPDATE table SET column = REPLACE(column, 'efg', 'zzz') WHERE column LIKE '%efg';
將欄位column_2含有efg字串取代成zzz,不過將取代後的結果覆寫於column_1,不更動column_2原有的內容
UPDATE table SET column_1 = REPLACE(column_2, 'efg', 'zzz') WHERE column_2 LIKE '%efg%';

 

連接字串:CONCAT('字串1', '字串2', ... '字串n')

# 於column值為456的資料行首插入字串123
UPDATE table SET column = CONCAT('123', column) WHERE column='456';
(Result: 123456)
# 於column值為456的資料行尾插入字串123
UPDATE table SET column = CONCAT(column, '123') WHERE column='456';
(Result: 456123)
# 於column值為456的資料行首插入字串123,行尾插入789
UPDATE table SET column = CONCAT('123', column, '789') WHERE column='456';
(Result: 123456789)
於column值為456的資料行首行尾各插入原值,使其值為重覆三次的字串
UPDATE table SET column = CONCAT(column, column, column) WHERE column='456';
(Result: 456456456)

 

Leave a comment

[MySQL] root密碼重設

如果忘記root密碼可以這樣重設

 

停止服務

# sudo /usr/local/etc/rc.d/mysql-server stop

 

以安全模式啟動mysql,並跳過檢查

# sudo mysqld_safe --skip-grant-tables

 

這時候登入不需要密碼

# mysql -u root

 

接著修改DB記錄,把root密碼設成123456,並重新載入權限

mysql> USE mysql;
mysql> UPDATE user SET Password=PASSWORD("123456") WHERE User='root';
mysql> flush privileges;
mysql> exit

 

最後重新啟動MySQL,大功告成

# sudo /usr/local/etc/rc.d/mysql-server restart

 

Leave a comment

[MySQL] 開放外部連線

MySQL通常預設不開放外部連線,因此需要修改一下my.cnf來開放其他機器存取資料庫。

# OS: Ubuntu 14.04 Server LTS x64
# MySQL Server Version: 5.5
# 打開my.cnf
vim /etc/mysql/my.cnf
# 找到下列兩行,拿掉或加上註解後儲存離開
skip-external-locking
bind-address = 127.0.0.1
# 重新啟動服務
sudo service mysql restart
One Comment