溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL特殊函數如何使用

發布時間:2023-09-12 14:48:35 來源:億速云 閱讀:125 作者:栢白 欄目:開發技術

今天小編給大家分享的是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特殊函數如何使用就分享到這里了,希望以上內容可以對大家有一定的參考價值,可以學以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

邻居新婚少妇真紧_国产精品28p_99久久e免费热视烦_99尹人香蕉国产免费天天