平時開發中經常與數據庫打交道,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;
以上幾點在數據處理中會用到,以後遇到其他的再補充,大家如果有其他小技巧,歡迎評論補充!