MySQL自定義變數的三個小技巧
高效能MySQL 244頁
1.指定表的訪問順序
實驗資料:
user是活躍使用者表,
user_archived是長時間不活躍的使用者表.
兩個表的結構相同,冷熱資料分開.
create table user
(
id int primary key,
name varchar(20)
);
create table user_archived
(
id int primary key,
name varchar(20)
);
insert into user select 1,'user1';
insert into user select 2,'user2';
insert into user_archived select 3,'user3';
insert into user_archived select 4,'user4';
commit;
需求:
先訪問user表資料,
如果有結果,則直接返回,不再查詢user_archived表;
如果沒有結果,則查詢user_archived表的資料.
實現:
set @userid:=1;
select
greatest(@found:=-1,id) as id,name,'user' tabname
from user where id=@userid
union all
select id,name,'user_archived'
from user_archived where id=@userid and @found is null
union all
select 1,1,'reset' from dual where (@found:=null) is not null;
第三個SQL先執行賦值,
第一個SQL如果查到任意一個資料,就會修改@found的值,
第二個SQL根據@found的值,決定是否執行SQL
2.更新的同時,順帶查詢資料
實驗資料:
drop table test;
create table test
(
id int primary key,
name varchar(20),
ts timestamp ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
insert into test(id,name) select 1,'user1';
commit;
更新這個資料,並查詢這個資料之前的時間戳.
update test set name='u1' where id=1 and @now:=ts ;
select @now;
3.統計on duplicate key update更新的數量
實驗資料:
create table t1
(
a int primary key,
b int
);
insert into t1 values(1,1),(2,2),(3,3),(4,4);
commit;
執行on duplicate key update
set @x:=0;
insert into t1 values(2,100),(3,100)
on duplicate key update b=values(b)+(0*(@x:=@x+1));
1.指定表的訪問順序
實驗資料:
user是活躍使用者表,
user_archived是長時間不活躍的使用者表.
兩個表的結構相同,冷熱資料分開.
create table user
(
id int primary key,
name varchar(20)
);
create table user_archived
(
id int primary key,
name varchar(20)
);
insert into user select 1,'user1';
insert into user select 2,'user2';
insert into user_archived select 3,'user3';
insert into user_archived select 4,'user4';
commit;
需求:
先訪問user表資料,
如果有結果,則直接返回,不再查詢user_archived表;
如果沒有結果,則查詢user_archived表的資料.
實現:
set @userid:=1;
select
greatest(@found:=-1,id) as id,name,'user' tabname
from user where id=@userid
union all
select id,name,'user_archived'
from user_archived where id=@userid and @found is null
union all
select 1,1,'reset' from dual where (@found:=null) is not null;
第三個SQL先執行賦值,
第一個SQL如果查到任意一個資料,就會修改@found的值,
第二個SQL根據@found的值,決定是否執行SQL
2.更新的同時,順帶查詢資料
實驗資料:
drop table test;
create table test
(
id int primary key,
name varchar(20),
ts timestamp ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
insert into test(id,name) select 1,'user1';
commit;
更新這個資料,並查詢這個資料之前的時間戳.
update test set name='u1' where id=1 and @now:=ts ;
select @now;
3.統計on duplicate key update更新的數量
實驗資料:
create table t1
(
a int primary key,
b int
);
insert into t1 values(1,1),(2,2),(3,3),(4,4);
commit;
執行on duplicate key update
set @x:=0;
insert into t1 values(2,100),(3,100)
on duplicate key update b=values(b)+(0*(@x:=@x+1));
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1414176/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql中自定義變數有哪些MySql變數
- MySQL自定義變數執行順序MySql變數
- 自定義View實用小技巧View
- MySQL使用自定義變數模擬分析函式MySql變數函式
- MySQL自定義變數處理行號問題MySql變數
- Nginx 如何自定義變數?Nginx變數
- 小技巧:Flutter如何引用自定義圖示Flutter
- Mybatis使用小技巧-自定義結果集MyBatis
- mysql中的編碼各個變數的含義MySql變數
- CSS 自定義屬性(變數)CSS變數
- Visual Studio自定義除錯窗體兩個小技巧除錯
- 10個提升MySQL效能的小技巧MySql
- 使用 CSS 自定義屬性(變數)CSS變數
- 自定義計數器小技巧!CSS 實現長按點贊累加動畫CSS動畫
- MySQL自定義變數實現row_number分析函式的天坑MySql變數函式
- Mybatis使用小技巧-自定義型別轉換器MyBatis型別
- 微信小程式使用自定義字型的三種方法微信小程式自定義字型
- MySQL中變數的定義和變數的賦值使用MySql變數賦值
- 自定義Report 變數儲存功能變數
- 7 個改變我生活的 Git 小技巧Git
- 不用第三個變數,交換變數的值變數
- spark:自定義分割槽,自定義排序,spark與jdbc,廣播變數等Spark排序JDBC變數
- 新手使用筆記本的三個小技巧筆記
- Mysql中的小技巧MySql
- CSS變數(自定義屬性)實踐指南CSS變數
- Apache Linkis自定義變數實踐分享Apache變數
- 【iOS 小技巧】Xcode自定義檔案頭部註釋iOSXCode
- 自定義Excel表格邊框的技巧Excel
- js不使用第三個變數交換兩個變數的值JS變數
- 不用第三個變數,直接交換兩個變數的值變數
- MySQL自定義排序MySql排序
- MySQL8 根據某屬性查詢欄位排名由自定義變數到rank()的變動MySql變數
- 三個使用資料泵(Data Pump)的小技巧
- CSS Var 自定義屬性中使用 Scss 變數CSS變數
- 簡單實用!在Mac上自定義Safari起始頁小技巧!Mac
- iOS 開發偷懶小技巧:自定義 XCode 程式碼片段iOSXCode
- 微信小程式之自定義倒數計時元件微信小程式元件
- 8個小技巧,讓一個遊戲變得更好玩遊戲