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在