MySQL特殊函數使用技巧梳理
1. group_concat
使用group_concat函數,可以輕松的把分組後,name 相同的數據拼接到一起,組成一個字符串,用逗號分隔。
2. char_length
通過該函數就能獲取字符長度。
3.locate
在某個字符串中的位置
4.replace
將字符串中的字符 A 替換成 B。REPLACE(name,‘A’,‘B’)
5.now
獲取當前時間
6.insert into … select
INSERT INTO `brand`(`id`, `code`, `name`, `edit_date`) select null,code,name,now(3) from `order` where code in ('004','005');
這樣就能將 order 表中的部分數據,非常輕松插入到 brand 表中。
7.insert into … ignore
INSERT ignore INTO `brand`(`id`, `code`, `name`, `edit_date`) VALUES (123, '108', '蘇三', now(3));
如果 brand 表中已經存在 name 為蘇三的數據瞭,則該 sql 語句也能正常執行,並不會報錯。因為它會忽略異常,返回的執行結果影響行數為 0,它不會重復插入數據。
8.select … for update
begin; select * from `user` where id=1 for update; //業務邏輯處理 update `user` set score=score-1 where id=1; commit;
這樣在一個事務中使用for update鎖住一行記錄,其他事務就不能在該事務提交之前,去更新那一行的數據。
需要註意的是 for update 前的 id 條件,必須是表的主鍵或者唯一索引,不然行鎖可能會失效,有可能變成表鎖
9.on duplicate key update
通常情況下,我們在插入數據之前,一般會先查詢一下,該數據是否存在。如果不存在,則插入數據。如果已存在,則不插入數據,而直接返回結果。
在沒啥並發量的場景中,這種做法是沒有什麼問題的。但如果插入數據的請求,有一定的並發量,這種做法就可能會產生重復的數據。
當然防止重復數據的做法很多,比如:加唯一索引、加分佈式鎖等。
但這些方案,都沒法做到讓第二次請求也更新數據,它們一般會判斷已經存在就直接返回瞭。
這種情況可以使用on duplicate key update語法。
該語法會在插入數據之前判斷,如果主鍵或唯一索引不存在,則插入數據。如果主鍵或唯一索引存在,則執行更新操作。
INSERT INTO `brand`(`id`, `code`, `name`, `edit_date`) VALUES (123, '108', '蘇三', now(3)) on duplicate key update name='蘇三',edit_date=now(3);
這樣一條語句就能輕松搞定需求,既不會產生重復數據,也能更新最新的數據。
但需要註意的是,在高並發的場景下使用on duplicate key update語法,可能會存在死鎖的問題,所以要根據實際情況酌情使用。
10.show create table
有時候,我們想快速查看某張表的字段情況,通常會使用desc命令
desc `order`;
查看索引信息
show index
我們能夠看到非常完整的建表語句,表名、字段名、字段類型、字段長度、字符集、主鍵、索引、執行引擎等都能看到
show create table show create table `order`;
11.create table … select
有時候,我們需要快速備份表。
通常情況下,可以分兩步走:
創建一張臨時表
將數據插入臨時表
創建臨時表
create table order_2022121819 like `order`;
將 order 表的數據插入到 order_2022121819 表中,也就是實現數據備份的功能。
insert into order_2022121819 select * from `order`;
整合上面兩條命令
create table order_2022121820select * from `order`;
總結
到此這篇關於MySQL特殊函數使用技巧梳理的文章就介紹到這瞭,更多相關MySQL特殊函數技巧內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- MySQL中增刪改查操作與常見陷阱詳解
- mysql ON DUPLICATE KEY UPDATE重復插入時更新方式
- MySQL一些常用高級SQL語句
- MySQL 8.0新特性之隱藏字段的深入講解
- MySQL 基礎常用命令總結