mysql中數據處理小技巧

平時開發中經常與數據庫打交道,mysql又是現在比較常用的數據庫,此文總結下平時會用到的mysql的小技巧。

 

1、創建備份表

create table x like y;

快速創建和y結構一樣的表x

 

2、獲取上一次插入的自增ID

select last_insert_id()

處理數據時比較有用,比如插入一條數據後,要獲取插入數據的自增主鍵ID,就可以使用last_insert_id()

 

3、批量插入

可使用如下語句:

INSERT INTO table1(col1,col2)
select col1,col2 from table2

或使用如下語句:

INSERT INTO table1(col1,col2) 
values (1,2),(2,3),(3,4);

批量插入比單條插入效率要高很多。

 

4、合併alter操作

可以把針對同一個表的alter操作合併,提高效率

alter table tableName add column col1 int(11), add column col2 varchar(20);

 

5、隨機獲取一條數據

不推薦使用 by rand();

可使用如下sql:

SELECT * FROM users AS t1 JOIN (SELECT ROUND(RAND()*(SELECT MAX(id) 
FROM users)) AS id) AS t2 WHERE t1.id>=t2.id ORDER BY t1.id LIMIT 1;

 

6、日期處理

SELECT  CURDATE() #當前日期

SELECT  NOW() #當前時間

SELECT  YEAR('2020-06-29 22:31:30') #獲取時間的年份

SELECT  MONTH('2020-06-29 22:31:30') #獲取時間的月份

SELECT  DAY('2020-06-29 22:31:30') #獲取時間的天數

SELECT  HOUR('2020-06-29 22:31:30') #獲取時間的小時

SELECT  MINUTE('2020-06-29 22:31:30') #獲取時間的分鐘

SELECT  SECOND('2020-06-29 22:31:30')  #獲取時間的秒數

SELECT  DATE_SUB(NOW(),INTERVAL 1 YEAR)  #在目前的時間減去一年 

SELECT  DATE_ADD(NOW(),INTERVAL 1 YEAR)  #在目前的時間上加上一年

SELECT UNIX_TIMESTAMP('2020-06-29')  #字符串轉換成時間戳

SELECT FROM_UNIXTIME(1593360000) #時間戳轉化爲時間

SELECT DATE_FORMAT('2020-06-29 22:31:30', '%Y-%m-%d %H:%i:%s') #字符串轉化爲時間格式

 

7、判空

IFNULL(expr1,expr2)

用法:假如expr1不爲NULL,則 IFNULL() 的返回值爲expr1; 否則其返回值爲 expr2。

 

ISNULL(expr) 

用法:如expr 爲null,那麼isnull() 的返回值爲 1,否則返回值爲 0。

 

8、正則匹配

查找name字段中以'zh'開頭的數據:

SELECT name FROM users WHERE name REGEXP '^zh';

查找name字段中以'ng'結尾的數據:

SELECT name FROM users WHERE name REGEXP 'ng$';

查找name字段中包含'li'字符串的數據:

SELECT name FROM users WHERE name REGEXP 'li';

 

9、定義臨時變量

set @cur = now();
select date_format(now(), '%Y-%m-%d'), date_format(date_add(@cur,interval 1 day), '%Y-%m-%d');

 

10、使用行號

SELECT
	USER.*, (@rownum := @rownum + 1) AS ROWNUM
FROM
	USER
INNER JOIN (SELECT @rownum := 0) r
WHERE
	1
ORDER BY
	USER.id;

 

以上幾點在數據處理中會用到,以後遇到其他的再補充,大家如果有其他小技巧,歡迎評論補充!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章