MySQL經常使用操做命令

MySQL 終端操做經常使用命令。

一、鏈接數據庫

mysql -uroot -p

二、展現mysql的數據庫

mysql> show databases;

建立數據庫:html

mysql> create database test;

三、選用數據庫

> use test;

四、列出數據庫的表

mysql> show tables;

五、建立表

mysql> CREATE table msg_per_hr (
       hr datetime not null,
       cnt int unsigned not null,
       primary key(hr)
       );

六、插入表語句

insert into msg_per_hr (hr, cnt) values(‘2017-09-02 14:02:30’, 500);

七、使用LEFT截取字符串輸出

注意:LEFT方法計算字段的長度並截取字符串長度mysql

mysql> select LEFT(hr, 14) as sim_hr FROM msg_per_hr

clipboard.png

八、使用CONCAT拼接字符串

CONCAT 方法能夠拼接字段,如,咱們能夠將時間字段的分秒先截去,而後使用CONCAT拼接整時間點的字符串。sql

mysql> select CONCAT(LEFT(hr, 14), '00:00') as sim_hr FROM msg_per_hr

九、interval 函數

MySQL函數大全 及用法示例shell

mysql> select sum(cnt) from msg_per_hr where hr between concat(left(now(), 14), '00:00') - interval 23 hour and concat(left(now(), 14), '00:00') -interval 1 hour;
+----------+
| sum(cnt) |
+----------+
|     2524 |
+----------+
1 row in set (0.06 sec)

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2017-09-02 16:05:41 |
+---------------------+
1 row in set (0.00 sec)

mysql> select now() - interval 23 hour;
+--------------------------+
| now() - interval 23 hour |
+--------------------------+
| 2017-09-01 17:06:19      |
+--------------------------+
1 row in set (0.00 sec)

mysql> select now() - 23 hour;
+----------------+
| hour           |
+----------------+
| 20170902162023 |
+----------------+
1 row in set (0.00 sec)

mysql>

從上的測試,咱們能夠看出 interval 方法在進行加減法操做時,能夠有效的計算日期。數據庫

十、比較兩個字段的大小

SELECT CASE WHEN a < b THEN b ELSE a END AS maxs FROM tb

或者這樣:
if(a>b, a, b)

實際應用(比較money和wms_money最小值,並將值相加):
SELECT year,month,sum(if(money < wms_money, money, wms_money)) as actual_money FROM `shop_express_fy` WHERE year = 2017 AND month = 7 AND invoice_no IN (333300396,333300457);

11.mysql重啓

我在Ubuntu14 64位系統中安裝mysql後,後來經過mysql -u用戶名 -p密碼 的命令鏈接express

Mysql數據庫時,報錯"can't connect to local mysql serverthrough  socket'/var/run/mysqld/mysqld.sock'"

解決方法1:
在不從新安裝mysql的狀況下,經過以下命令來解決,具體的就是先中止mysql服務,再從新開啓mysql服務bash

cd /etc/init.d
sudo service mysql stop
sudo service mysql start

12.兩字段相減

SELECT *, send_year - send_month as diff FROM `cross_month_tbl`;

這裏舉一個簡單的例子:app

clipboard.png

或者差值做爲條件:socket

$sql = "SELECT * from spkcb WHERE goods_id = '13735' AND color_id = '3741' AND size_id = '127' AND (sl - sl1 - sl2) > 0 ";

  $sql = "SELECT ck_id, (sl - sl1 - sl2) as use_count from spkcb WHERE goods_id = '{$goods_id}'
 AND size_id = '{$size_id}' AND color_id = '{$color_id}'  HAVING use_count > 0";

13.GROUP_CONCAT函數

GROUP_CONCAT函數返回一個字符串結果,該結果由分組中的值鏈接組合而成。函數

示例:
對月份進行分組,並將分組月份的id獲取到,若是用這個方法GROUP_CONCAT最好不過了。

clipboard.png

SELECT send_month, GROUP_CONCAT(id)as ids FROM `cross_month_tbl` GROUP BY send_month;

結果:

clipboard.png

相關文章:MySQL中函數CONCAT及GROUP_CONCAT

14.show processlist SQL殺進程

3點鐘剛睡下, 4點多, 同事打電話告訴我用戶數據庫掛掉了. 我起牀看一下進程列表.

mysql>show processlist;

出來嘩啦啦好幾屏幕的, 沒有一千也有幾百條, 查詢語句把表鎖住了, 趕忙找出第一個Locked的thread_id, 在mysql的shell裏面執行.

mysql>kill thread_id;

kill掉第一個鎖表的進程, 依然沒有改善. 既然不改善, 我們就想辦法將全部鎖表的進程kill掉吧, 簡單的腳本以下.

#!/bin/bash
mysql -u root -e "show processlist" | grep -i "Locked" >> locked_log.txt

for line in `cat locked_log.txt | awk '{print $1}'`
do 
   echo "kill $line;" >> kill_thread_id.sql
done

如今kill_thread_id.sql的內容像這個樣子

kill 66402982;
kill 66402983;
kill 66402986;
kill 66402991;
.....
好了, 咱們在mysql的shell中執行, 就能夠把全部鎖表的進程殺死了.

mysql>source kill_thread_id.sql

固然了, 也能夠一行搞定

for id in `mysqladmin processlist | grep -i locked | awk '{print $1}'`
do
   mysqladmin kill ${id}
done

原文地址:mysql中kill掉全部鎖表的進程

15.MYSQL中UNIX時間戳與日期的轉換

select FROM_UNIXTIME(1464973385.641,'%Y-%m-%d %H:%i:%s');
select UNIX_TIMESTAMP('2016-06-04 01:03:05');

結果:
FROM_UNIXTIME(1464973385.641,'%Y-%m-%d %H:%i:%s')
2016-06-04 01:03:05

UNIX_TIMESTAMP('2016-06-04 01:03:05')
1464973385

示例:

SELECT sku, sl, hs_sl, FROM_UNIXTIME(create_time,'%Y-%m-%d %H:%i:%s')  as add_time, ckdm FROM `sku_stock_go_wms_log` where  create_time>=UNIX_TIMESTAMP('2018-04-01')  
and sku='X8B2012464135'
limit 100

16.MySQL字符串大小寫轉換函數

MySQL字符串大小寫轉換須要用到MySQL字符串大小寫轉換函數,MySQL 字符串大小寫轉化函數有兩對: lower(), uppper() 和 lcase(), ucase():
mysql> select lower('DDD');  
+--------------+  
| lower('DDD') |  
+--------------+  
| ddd          |  
+--------------+  
mysql> select upper('ddd');  
+--------------+  
|upper('ddd') |  
+--------------+  
| DDD          |  
+--------------+  
mysql> select lcase('DDD');  
+--------------+  
| lcase('DDD') |  
+--------------+  
| ddd          |  
+--------------+  
mysql> select ucase('ddd');  
+--------------+  
| ucase('ddd') |  
+--------------+  
| DDD          |  
+--------------+

一般狀況下,我選擇 lower(), upper() 來實現MySQL轉換字符串大小寫,由於這和其餘數據庫中函數相兼容。

17.NOT EXISTS 用法

SELECT order_sn, sd_id  FROM order_list o WHERE o.lylx = 'jd' AND o.order_status <> 0  AND o.create_time >= '2018-04-25 00:00:00' AND ifnull(invoice_no, '') = ''  
AND o.shipping_name <> 'jd' AND NOT EXISTS (SELECT order_sn FROM jingdong_waybill j WHERE j.order_sn = o.order_sn) limit 100
相關文章
相關標籤/搜索