假設(shè)是學(xué)生退出登錄時(shí)在t1表刪除數(shù)據(jù)
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供堆龍德慶企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、網(wǎng)站制作、成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為堆龍德慶眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
假設(shè)id各為兩個(gè)表的主鍵
select
*
from
t2
where
id
not
in
(select
id
from
t1)
結(jié)果集是t2表中id不在t1表的數(shù)據(jù)
先貼出來我的腳本:
#/bin/bash
User="test"
Pass="123456"
Hos="192.168.133.167"
Da=`date `
record_path="/tmp/daily_r.txt"
MYSQL="/usr/mysql/bin/mysql"
echo "采集速度時(shí)間間隔超過半天即為不正常" $record_path
$MYSQL -u$User -p$Pass -h$Hos -e "select TIMESTAMPDIFF(second, createtime, pubdate) as '相差秒數(shù)',createtime,pubdate,keyword_tx from adresource_test.tbl_newscontent_test order by d_id desc limit 1\G;" $record_path
然后我解釋下腳本含義,首先我這個(gè)腳本是統(tǒng)計(jì)我adresource_test 表中的關(guān)于新聞內(nèi)容的一個(gè)采集時(shí)間一個(gè)入庫(kù)時(shí)間的差值,就此來判斷我的數(shù)據(jù)入庫(kù)程序正常與否。
User是數(shù)據(jù)庫(kù)用戶名,Pass 是數(shù)據(jù)庫(kù)密碼 Hos是數(shù)據(jù)庫(kù)地址Da 是我要記錄一個(gè)日期,比對(duì)當(dāng)前日期,也相當(dāng)于留個(gè)日志 record_path 日志記錄位置
MYSQL是mysql的bin目錄,防止命令找不到。
3
計(jì)算tbl_test 表中的兩個(gè)字段一個(gè)是發(fā)布時(shí)間一個(gè)是創(chuàng)建時(shí)間,使用變量TIMESTAMPDIFF 來計(jì)算二者的差值,
creattime - pubdate。minute的意思是以分鐘來做結(jié)果單位,limit 2 是兩條記錄
這個(gè)結(jié)果要從第一個(gè)開始嗎?那樣就有點(diǎn)復(fù)雜了。這個(gè)行不行,結(jié)果是從第二行開始的:
mysql?set?@last_id?:=?-1;
Query?OK,?0?rows?affected?(0.00?sec)
mysql?select?id,?A,?B,?result
-?from
-?(
-?????select
-?????????table1.*,
-?????????@last_id,
-?????????if(@last_id??0,?null,?id?-?@last_id)?as?result,
-?????????@last_id?:=?id
-?????from
-?????????table1
-?)?as?tmp
-?;
+----+------+------+--------+
|?id?|?A????|?B????|?result?|
+----+------+------+--------+
|??1?|????2?|????1?|???NULL?|
|?21?|????1?|????1?|?????20?|
|?33?|????3?|????2?|?????12?|
+----+------+------+--------+
3?rows?in?set?(0.00?sec)
TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)
返回日期或日期時(shí)間表達(dá)式datetime_expr1?和datetime_expr2the?之間的整數(shù)差。
其結(jié)果的單位由interval?參數(shù)給出。該參數(shù)必須是以下值的其中一個(gè):
FRAC_SECOND?表示間隔是毫秒
SECOND??秒
MINUTE??分鐘
HOUR??小時(shí)
DAY??天
WEEK??星期
MONTH??月
QUARTER??季度
YEAR??年
SELECT?'年'??AS??`日期部分`,??TIMESTAMPDIFF(YEAR,?'2012-12-21',??CURRENT_TIMESTAMP())?AS?`數(shù)值`
UNION?ALL
SELECT?'季度'??AS??`日期部分`,??TIMESTAMPDIFF(QUARTER,?'2012-12-21',?CURRENT_TIMESTAMP())?AS?`數(shù)值`
UNION?ALL
SELECT?'月'??AS??`日期部分`,??TIMESTAMPDIFF(MONTH,?'2012-12-21',?CURRENT_TIMESTAMP())?AS?`數(shù)值`
UNION?ALL
SELECT?'日'??AS??`日期部分`,??TIMESTAMPDIFF(DAY,?'2012-12-21',?CURRENT_TIMESTAMP())?AS?`數(shù)值`
UNION?ALL
SELECT?'周'??AS??`日期部分`,???TIMESTAMPDIFF(WEEK,?'2012-12-21',?CURRENT_TIMESTAMP())?AS?`數(shù)值`
UNION?ALL
SELECT?'時(shí)'??AS??`日期部分`,???TIMESTAMPDIFF(HOUR,?'2012-12-21',?CURRENT_TIMESTAMP())?AS?`數(shù)值`
UNION?ALL
SELECT?'分'??AS??`日期部分`,???TIMESTAMPDIFF(MINUTE,?'2012-12-21',?CURRENT_TIMESTAMP())?AS?`數(shù)值`
UNION?ALL
SELECT?'秒'??AS??`日期部分`,???TIMESTAMPDIFF(SECOND,?'2012-12-21',?CURRENT_TIMESTAMP())?AS?`數(shù)值`
;
+----------+----------+
|?日期部分?|?數(shù)值?????|
+----------+----------+
|?年???????|????????1?|
|?季度?????|????????4?|
|?月???????|???????12?|
|?日???????|??????388?|
|?周???????|???????55?|
|?時(shí)???????|?????9328?|
|?分???????|???559737?|
|?秒???????|?33584279?|
+----------+----------+
8?rows?in?set?(0.00?sec)
mysql?select?CURRENT_TIMESTAMP();
+---------------------+
|?CURRENT_TIMESTAMP()?|
+---------------------+
|?2014-01-13?16:58:17?|
+---------------------+
1?row?in?set?(0.00?sec)
delimiter //
create trigger trigger1 after update on B for each row
begin
declare sl int;
set sl=NEW.退貨數(shù)量;
update A set 數(shù)量=數(shù)量-sl;
end //
方法挺多的,很多是采用排序直接對(duì)等連接,這樣對(duì)于主鍵聚集索引比較快的。
----
我提供的不是排序?qū)Φ?/p>
方式,而是大范圍連接檢索最小距離的方式。
SELECT
A.FID,A.Fnum,MIN(A.Fid-B.Fid)
as
差值
FROM
test.cte
A
INNER
JOIN
test.cte
B
on(A.FIDB.FID)
GROUP
BY
A.FID,A.Fnum
ORDER
BY
A.Fid
Desc
---
執(zhí)行結(jié)果:
FID
Fnum
差值
-------------------------
'9323',
'10',
'14'
'9309',
'10',
'1'
'9308',
'10',
'47'
'9261',
'10',
'31'
'9230',
'10',
'23'
'9207',
'10',
'16'
'9191',
'10',
'26'
'9165',
'10',
'14'