1. 程式人生 > >MySQL常用功能整理

MySQL常用功能整理

一、查詢語句
1、字串擷取:

update sys_area set short_name = substring_index(short_name, '地區', 1) where type = 3 and short_name is not null and short_name like '%地區'
substring(str, pos); substring(str, pos, len)

2、rowNum實現

SELECT @rownum:[email protected]num+1 rownum, CollectSn From
(SELECT @rownum:=0
,bbgmain.* FROM qbdb.bbgmain WHERE collectsn!='' ORDER BY collectsn limit 10) t

3、獲取分組中最新的資訊
mysql執行順序:
寫的順序:select … from… where…. group by… having… order by..
執行順序:from… where…group by… having…. select … order by…
所以group by到select時只取到分組裡的第一條資訊
解決方法:
- where+group by(對小組進行排序)

select * from
`test` where id in(select SUBSTRING_INDEX(group_concat(id order by `date` desc),',',1) from `test` group by category_id ) order by `date` desc
  • 從form返回的資料下手腳(即用子查詢)
select * from (select * from `test` order by `date` desc) `temp`  group by category_id order by `date` desc

5、查詢重複欄位

1、查詢表中多餘的重複記錄,重複記錄是根據單個欄位(peopleId)來判斷
select
* from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) 2、刪除表中多餘的重複記錄,重複記錄是根據單個欄位(peopleId)來判斷,只留有rowid最小的記錄 delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1) 3、查詢表中多餘的重複記錄(多個欄位) select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) 4、刪除表中多餘的重複記錄(多個欄位),只留有rowid最小的記錄 delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1) 5、查詢表中多餘的重複記錄(多個欄位),不包含rowid最小的記錄 select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

6、MySQL order null 0 - 把null和0(零)排在最後

SELECT `vcenter_ip`, `status`, `sla_id` FROM vm_list ORDER BY sla_id is NULL, sla_id = 0, sla_id ASC;

7、獲取上一次插入的自增id

select LAST_INSERT_ID()

二、資料庫更新
1、根據查詢出來的值更新表多個欄位

UPDATE student D
  LEFT JOIN (SELECT 
        B.studentId,
                SUM(B.score) AS s_sum,
                ROUND(AVG(B.score),1) AS s_avg
           FROM score B
          WHERE b.examTime >= '2015-03-10'
          GROUP BY B.studentId) C
    ON (C.studentId = D.id)

   SET D.score_sum = c.s_sum,
       D.score_avg = c.s_avg
 WHERE D.id = ''

三、資料庫插入
1、批量插入

INSERT INTO `insert_table` (`datetime`, `uid`, `content`, `type`)   VALUES ('0', 'userid_0', 'content_0', 0), ('1', 'userid_1', 'content_1', 1);

四、資料庫功能
2、資料庫定時:

SHOW VARIABLES LIKE 'event_scheduler';
SET GLOBAL event_scheduler = ON;

3、表結構分析

select * from go_run_record procedure analyse();

4、儲存過程

DROP PROCEDURE IF EXISTS `p_update_praise_week`;
DELIMITER ;;
CREATE PROCEDURE p_update_praise_week()
BEGIN
        DECLARE w_user_id VARCHAR(64);
        DECLARE w_count INT;
        DECLARE h_user_id VARCHAR(64);
        DECLARE stops INT DEFAULT 0;

        DECLARE cur_account CURSOR FOR select a.user_id,a.count from go_user_praise_week a where a.del_flag = 0;

    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET stops=1;
    OPEN cur_account;     

    read_loop: LOOP
                SET stops = 0;
        FETCH NEXT from cur_account INTO w_user_id,w_count;
                if stops = 1 then
                    leave read_loop;
                end if;

                select a.user_id into h_user_id from go_user_praise_history a where a.user_id = w_user_id and a.del_flag = 0;

                if h_user_id is null then
                    insert go_user_praise_history values(w_user_id,w_count,now(),'0',now());
                ELSE
                    update go_user_praise_history set `count` = `count` + w_count where user_id = w_user_id;
                end if;

    END LOOP;
    CLOSE cur_account;
END
;
DELIMITER ;

執行動態sql

--儲存過程名和引數,引數中in表示傳入引數,out標示傳出引數,inout表示傳入傳出引數

create procedure p_procedurecode(in sumdate varchar(10))   
begin
     declare v_sql varchar(500);    --需要執行的SQL語句
     declare sym varchar(6);

     declare var1 varchar(20);
     declare var2 varchar(70);
     declare var3 integer;

     --定義遊標遍歷時,作為判斷是否遍歷完全部記錄的標記
     declare no_more_departments integer DEFAULT 0;     

     --定義遊標名字為C_RESULT 
     DECLARE C_RESULT CURSOR FOR
             SELECT barcode,barname,barnum FROM tmp_table;

    --聲明當遊標遍歷完全部記錄後將標誌變數置成某個值
     DECLARE CONTINUE HANDLER FOR NOT FOUND
             SET no_more_departments=1;

     set sym=substring(sumdate,1,6);     --擷取字串,並將其賦值給一個遍歷

     --連線字串構成完整SQL語句,動態SQL執行後的結果記錄集,在MySQL中無法獲取,因此需要轉變思路將其放置到一個臨時表中(注意程式碼中的寫法)。一般寫法如下:

     --     'Create TEMPORARY Table   表名(Select的查詢語句);
     set v_sql= concat('Create TEMPORARY Table tmp_table(select aa as aacode,bb as aaname,count(cc) as ccnum from h',sym,' where substring(dd,1,8)=''',sumdate,''' group by aa,bb)');

     set @v_sql=v_sql;   --注意很重要,將連成成的字串賦值給一個變數(可以之前沒有定義,但要以@開頭)
     prepare stmt from @v_sql;  --預處理需要執行的動態SQL,其中stmt是一個變數
     EXECUTE stmt;      --執行SQL語句
     deallocate prepare stmt;     --釋放掉預處理段

     OPEN C_RESULT;       --開啟之前定義的遊標
     REPEAT                      --迴圈語句的關鍵詞
           FETCH C_RESULT INTO VAR1, VAR2, VAR3;   --取出每條記錄並賦值給相關變數,注意順序

          --執行查詢語句,並將獲得的值付給一個變數 @oldaacode(注意如果以@開頭的變數可以不用通過declare語句事先宣告)
           select @oldaacode:=vcaaCode from T_sum where vcaaCode=var1 and dtDate=sumdate; 
           if @oldaacode=var1 then    --判斷
              update T_sum set iNum=var3 where vcaaCode=var1 and dtDate=sumdate;
           else
               insert into T_sum(vcaaCode,vcaaName,iNum,dtDate) values(var1,var2,var3,sumdate);
           end if;
     UNTIL no_more_departments  END REPEAT;    --迴圈語句結束
     CLOSE C_RESULT;                            --關閉遊標

     DROP TEMPORARY TABLE tmp_table;       --刪除臨時表
end;

5、觸發器
新資料:new.欄位名,舊資料:old.欄位名

DROP TRIGGER IF EXISTS t_afterinsert_on_record;
CREATE TRIGGER t_afterinsert_on_record 
AFTER INSERT ON go_run_record
FOR EACH ROW
BEGIN

end;

相關推薦

MySQL常用功能整理

一、查詢語句 1、字串擷取: update sys_area set short_name = substring_index(short_name, '地區', 1) where type = 3 and short_name is not null

mysql常用命令整理

run 所有 p12 限定 數據 create 新的 自動備份 pda Mysql常用命令格式(quit退出) Int——floct —— varchar —— datetime(YYYY-MM-DD)(HH:ii:ss) 數據庫操作 show databases;查看所有

Mysql常用功能操作實現

對查詢結果根據欄位首字按照字母順序排列 select  name from mnuser order by convert(name USING gbk) COLLATE   gbk_chinese_ci asc; 恢復資料表主鍵從0自增 alter table mn

navicat for mysql常用功能

文章目錄 1. 美化SQL 2. 全域性搜尋值 3. 資料結構同步 4. 匯入和匯出資料庫檔案 5. 管理使用者許可權 6. 檢視歷史查詢 7. 檢視DDL語句

leaflet常用功能整理知識總結

最近一直在和leaflet打交道,就總結一下leaflet常用的功能和外掛供自己參考。 等我把手頭的專案完成,我會把我的程式碼整理好上傳供大家參考交流。 一、常用外掛 1.地圖底圖切換 https://github.com/htoooth/Leaflet.ChineseTmsPr

MySQL-----常用函式整理

/*日期函式*/ select year(now()); #返回年份 select month(localtime);#返回月份 select sysdate(); #返回當前時間 select(localtime);#返回當前時間,注:now()、localtime()、localtime、sysd

開發人員必備除錯工具,chrome除錯工具常用功能整理

Elements chrome devtools 中 Elements panel 是審查 dom 元素和 css 的, 可以實時修改 dom/css. windows: ctrl + shift + imac: cmd + opt + iDOM修改 html &

Navicat for mysql常用功能講解

一、navicat如何寫sql語句查詢: 方法一:ctrl+q會彈出一個sql輸入視窗,ctr+r就可以執行 方法二:按F6會彈出一個命令視窗,就跟mysql -u root -p進去時操作一樣 二、

mysql常用操作整理

對庫的操作:建立:create database db_test1;刪除:drop database db_test1;查詢: show databases;切換庫:use db_name;對錶的操作:建立:create table tb_name (col_name col

HTML5 常用標籤、全域性屬性功能整理

常用標籤 標籤 描述 基礎 定義一個 HTML 文件 <p> 定義一個段落 <br> 定義簡單的折行。 <hr> 定義水平線。 格式 HTML5不再支援。

常用MySQL語句蒐集整理

折騰 WordPress 多少要接觸到 MySQL 的一些操作,比如,瑪思閣之前重灌 postview 外掛後發現所有的 view 資料都被清空了!只好到 phpMyAdmin 後臺去進行 wp_postmeta 表的部分資料恢復,其中就會用到下文【根據條件匯出 mysql 的指定表】的方法,將

mysql常用語句、命令(增刪改查功能

修改資料庫的字符集     mysql>use mydb     mysql>alter database mydb character set utf8;建立資料庫指定資料庫的字符集     mysql>create database mydb char

MySQL重要工具percona-toolkit常用功能介紹#Olivia丶長歌#

MySQL 一個重要分支 percona 的,名稱叫做 percona-toolkit(一把鋒利的瑞士軍刀),它是一組命令的集合。工具包的下載地址:https://www.percona.com/downloads/percona-toolkit/LATEST/安裝過程tar

HIVE與mysql的關係 hive常用命令整理 hive與hdfs整合過程

轉:https://my.oschina.net/winHerson/blog/190131 二、hive常用命令 1. 開啟行轉列功能之後: set hive.cli.print.header=true; // 列印列名 set hive.cli.print.row.to.vertical=true; /

MySQL常用函式整理之一

開發十年,就只剩下這套架構體系了! >>>   

mysql常用函數

row 間隔 變為大寫 員工 hex eat amp sig rom 一、數學函數abs(x) 返回x的絕對值bin(x) 返回x的二進制(oct返回八進制,hex返回十六進制)ceiling(x) 返回大於x的最小整數值exp(x) 返回值e(自然對數的底

MYSQL常用日期操作

距離 rda user rdate bsp nth 當前 core tween mysql查詢今天、昨天、7天、近30天、本月、上一月 數據 今天 select * from 表名 where to_days(時間字段名) = to_days(now()); 昨天

vue2.0的常用功能簡介

span nbsp color -i highlight href out con router 路由跳轉 當我們想要實現點擊鏈接跳轉時,可以使用$router來進行跳轉 語法如下: this.$router.push({path:"/www",query:{id:

mysql 常用命令

mysql命令說明BEGIN COMMITmysql在客戶端執行更新、刪除開啟一個事務:BEGIN;UPDATE driver SET phone=‘11601620000‘ WHERE id=1;--ROLLBACK;COMMIT;DATE_FORMAT%Y-%m-%d %H-%iIFNULL(price,

Git使用:安裝,使用及常用命令整理

reset short 配置文件 res 命名 nbsp class 名詞 如果 對於程序猿而言,git是最常接觸的工具之一,因此需要熟練快速掌握其技巧。 git安裝: windwos: 【原創】Windows平臺下Git的安裝與配置 Ubuntu:git與github在