日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

MySQL中最實(shí)用的SQL語(yǔ)句

 小仙女本仙人 2022-02-16

前言:在編寫SQL時(shí),我們經(jīng)常靈活地使用一些SQL語(yǔ)句編寫語(yǔ)句,從而可以大大簡(jiǎn)化程序邏輯。減少程序與數(shù)據(jù)庫(kù)之間的交互次數(shù),這有利于數(shù)據(jù)庫(kù)的高可用性。

實(shí)用SQL語(yǔ)句:

1.插入或更換

如果我們要插入新記錄(INSERT),但是如果該記錄已經(jīng)存在,請(qǐng)先刪除原始記錄,然后再插入新記錄。

場(chǎng)景示例:需要使用此表中存儲(chǔ)的每個(gè)客戶的最新交易訂單信息,以確保不重復(fù)輸入單個(gè)用戶的數(shù)據(jù),執(zhí)行效率最高,與數(shù)據(jù)庫(kù)的交互最少,并且數(shù)據(jù)庫(kù)是高度可用的。

此時(shí),可以用“ REPLACE INTO”語(yǔ)句,這樣就不必先查詢,然后再?zèng)Q定是否先刪除和插入。

“REPLACE INTO”語(yǔ)句基于唯一索引或主鍵來(lái)確定其是否唯一。

注意:如以下SQL所示,在用戶名字段中創(chuàng)建唯一索引,并且可以自動(dòng)增加transId設(shè)置。

-- 20 Point rechargeREPLACE INTO last_transaction (transId,username,amount,trans_time,remark)VALUES (null, 'chenhaha', 30, '2020-06-11 20:00:20', 'Member recharge');-- 21 Buy skinREPLACE INTO last_transaction (transId,username,amount,trans_time,remark)VALUES (null, 'chenhaha', 100, '2020-06-11 21:00:00', 'Buy the skin of the supreme fist of blind monk');

 

如果用戶名= chenaha的記錄不存在,則REPLACE語(yǔ)句將插入一條新記錄(第一次充值),否則,將刪除當(dāng)前用戶名= chenaha的記錄,然后將一條新記錄已插入。

不要給id賦予特定的值,否則,除非特殊的業(yè)務(wù)要求,否則SQL執(zhí)行將受到影響。

2.插入或更新

如果我們要插入新記錄(INSERT),但是如果該記錄已經(jīng)存在,請(qǐng)更新該記錄。這時(shí),可以用“ INSERT into ......重復(fù)密鑰更新...”語(yǔ)句:

方案示例:此表存儲(chǔ)用戶的歷史充值金額。如果用戶是第一次充電,將添加新的數(shù)據(jù)。如果用戶是第一次充值,將累積歷史充值量。必須確保不會(huì)重復(fù)輸入單個(gè)用戶的數(shù)據(jù)。

-- User Chen haha recharged 30 yuan to buy membersINSERT INTO total_transaction (t_transId,username,total_amount,last_transTime,last_remark)VALUES (null, 'chenhaha', 30, '2020-06-11 20:00:20', 'Full membership')ON DUPLICATE KEY UPDATE  total_amount=total_amount + 30, last_transTime='2020-06-11 20:00:20', last_remark ='Full membership';-- User Chen ha ha recharged 100 yuan to buy the highest fist skin of the blindINSERT INTO total_transaction (t_transId,username,total_amount,last_transTime,last_remark)VALUES (null, 'chenhaha', 100, '2020-06-11 20:00:20', 'Buy the skin of the supreme fist of blind monk')ON DUPLICATE KEY UPDATE total_amount=total_amount + 100, last_transTime='2020-06-11 21:00:00', last_remark ='Buy the skin of the supreme fist of blind monk';

 

如果用戶名= chenaha'記錄不存在,則INSERT語(yǔ)句將插入新記錄。否則,當(dāng)前用戶名= chenaha的記錄將被更新,并且更新的字段將由UPDATE指定。

3.插入或忽略

如果要插入新記錄(INSERT),但是如果該記錄已存在,則不能直接忽略任何內(nèi)容。我們可以用INSERT IGNORE INTO ...語(yǔ)句。

“INSERT IGNORE INTO ...”語(yǔ)句基于唯一索引或主鍵來(lái)確定其是否唯一。只要在用戶名字段上創(chuàng)建唯一索引,并且可以自動(dòng)增加transId設(shè)置。

-- First added by userINSERT IGNORE INTO users_info (id, username, sex, age ,balance, create_time)VALUES (null, 'chenhaha', 'male', 12, 0, '2020-06-11 20:00:20');-- Add twice, ignore directlyINSERT IGNORE INTO users_info (id, username, sex, age ,balance, create_time)VALUES (null, 'chenhaha', 'male', 12, 0, '2020-06-11 21:00:20');

 

如果用戶名='chenaha'的記錄不存在,則INSERT語(yǔ)句將插入新記錄,否則將不執(zhí)行任何操作。

4. SQL中的if判斷語(yǔ)句

眾所周知,判斷是否到處都是非常有用的。在SQL語(yǔ)句中,“在……時(shí)……然后……其他……結(jié)束”的情況下,可用于添加,刪除,修改和查詢各種語(yǔ)句。

如果你在學(xué)習(xí)C/C++的過(guò)程中遇到了問(wèn)題,可以來(lái)加入小編的企鵝圈問(wèn)小編哦~小編很熱情的(●’?’●)

*方案:有一個(gè)針對(duì)學(xué)生的高考成績(jī)表,需要列出成績(jī)。重點(diǎn)大學(xué)的得分超過(guò)650分,其中一門600-650分,兩門500-600分,三門400-500分,以及400以下的大專;

原始測(cè)試數(shù)據(jù)如下:


 

查詢語(yǔ)句:


 

5.指定數(shù)據(jù)快照或備份

如果要對(duì)表進(jìn)行快照,即將當(dāng)前表的數(shù)據(jù)復(fù)制到新表,則可以將CREATE TABLE和SELECT結(jié)合使用:

-- Yes class_id=1(The records of the first shift) are snapshot and stored as new tables students_of_class1:CREATE TABLE students_of_class1 SELECT * FROM student WHERE class_id=1;

 

新創(chuàng)建的表結(jié)構(gòu)與SELECT使用的表結(jié)構(gòu)完全相同。

6.編寫查詢結(jié)果集

如果查詢結(jié)果集需要寫入表中,則可以將INSERT和SELECT組合以將SELECT語(yǔ)句的結(jié)果集直接插入到指定表中。

例如,創(chuàng)建一個(gè)統(tǒng)計(jì)表以記錄每個(gè)班級(jí)的平均分?jǐn)?shù):

CREATE TABLE statistics (id BIGINT NOT NULL AUTO_INCREMENT,class_id BIGINT NOT NULL,average DOUBLE NOT NULL,PRIMARY KEY (id));

 

然后,我們可以用一句話寫出每個(gè)班級(jí)的平均分?jǐn)?shù):

INSERT INTO statistics (class_id, average) SELECT class_id, AVG(score) FROM students GROUP BY class_id;

 

7.強(qiáng)制指定索引

查詢時(shí),數(shù)據(jù)庫(kù)系統(tǒng)將自動(dòng)分析查詢語(yǔ)句并選擇最合適的索引。但是在許多情況下,數(shù)據(jù)庫(kù)系統(tǒng)的查詢優(yōu)化器并不總是使用最佳索引。如果我們知道如何選擇索引,則可以使用FORCE INDEX強(qiáng)制查詢使用指定的索引。例如:

SELECT * FROM students FORCE INDEX (idx_class_id) WHERE class_id = 1 ORDER BY id DESC;

 

指定索引的前提是索引idx_class_id必須存在。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多