當前位置:首頁 » 編程語言 » 數據校驗的sql
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

數據校驗的sql

發布時間: 2023-01-11 12:23:16

㈠ oracle表內表間數據校驗是什麼意思是sql中的約束嗎

表內數據檢驗一般用 check,也可能用trigger,特殊情況下用外鍵,比如部門表 的部門與父部門的關系。

表間數據檢驗用 外鍵 來實現

㈡ 如何驗證SQL的select是否有返回值

幾種方式:
1.單一的select語句:select count(1) from dba_users where username = '用戶名';
通過count的值是否為0來判斷是否有這個用戶

2.存儲過程中通過異常來判斷
begin
select username into lv_username from dba_users where username = '用戶名';
exception no_data_found then
-- 沒有找到就可以新建用戶

end;
這兩種方式是我覺得比較簡單的了。希望能夠對你有幫助。

㈢ 如何利用MySQL資料庫查看和設置SQL模式

在MySQL資料庫,SQL模式可以用來解決不同嚴格程度的數據校驗,在不同資料庫進行數據遷移時,可以達到遷移的目的。下面利用實例來說明SQL模式方法,具體操作如下:
http://jingyan..com/article/ce43664922bd1f3772afd373.html

㈣ sql server如何驗證兩個表中數據完全相同 ,

您好,假設A表有列a,b,B表有列a,b,year。
語句如下:
select count(*) from A t1,B t2 where t1.a=t2.a and t1.b=t2.b獲得兩個表相同數據的數據量,假設結果是c1
select count(*) from A 獲得A表數據量,假設加過是c2
select count(*) from B 獲得B表數據量,假設結果是c3
在此,如果c1=c2=c3,則A,B兩個表的數據量相同,且數據相同。

望採納,希望對你有幫助

㈤ 如何使用檢查約束驗證SQL Server中的數據

約束可以驗證單列的域完整性,也可以驗證多列的域完整性,在單個列上可以有多個檢查約束,如果插入或更新的數據違反了檢查約束,數據 庫引擎將暫時停止INSERT和UPDATE操作。 檢查約束由邏輯表達式構成,邏輯表達式可能是單個表達式,如「Salary<200000.00」,也可能是多個表達式,如「RentalDateGETDATE ()andRentalDate 中的數據,檢查約束是基於列的,因此,即便表中某列的檢查約束沒有通過,也不會影響到表中其它列的INSERT和UPDATE操作,檢查約束可以在列級創建,也可以在表級創建。

㈥ 如何在SQL運行速達軟體中的「數據校驗」和「數據重組」

這個不難,通過SQL的跟蹤就可以查到相關的語句和命令。有了語句和命令,就可以了。

㈦ sql 語句 驗證身份證號碼

幫你搜了一下,參考參考。

主要驗證SQL資料庫中已輸入的15位 及18位 身份證號碼的位數、出生年月日是否正確,
可以過濾出大部分的輸入錯誤。

or (len(身份證號)=18 and (Substring(身份證號,7,2)<'19' or Substring(身份證號,7,2)>'20'
or (Substring(身份證號,11,2)>12)
or (Substring(身份證號,11,2) in (01,03,05,07,08,10,12) and Substring(身份證號,13,2)>31)
or (Substring(身份證號,11,2) in (04,06,09,11) and Substring(身份證號,13,2)>30)
or (Substring(身份證號,11,2)=02 and Substring(身份證號,13,2)>29)))
---------------------- 下面是針對 15位 及18位 身份證號碼性別的驗證語句 ------------------

-- Access 不支持 Substring 查詢,可以替換為 mid 查詢。
select 序號,姓名,身份證號,性別
from 身份表
where (((len(身份證號)=15) and (Substring(身份證號,15,1) in (1,3,5,7,9)) and 性別<>'男')
or ((len(身份證號)=15) and (Substring(身份證號,15,1) in (2,4,6,8,0)) and 性別<>'女'))
or (((len(身份證號)=18) and (Substring(身份證號,17,1) in (1,3,5,7,9)) and 性別<>'男')
or ((len(身份證號)=18) and (Substring(身份證號,17,1) in (2,4,6,8,0)) and 性別<>'女'))

---------------------- 下面是針對 15位 及18位 身份證號碼位數與出生年月日的驗證 ------------------

-- Access 不支持 Substring 查詢,可以替換為 mid 查詢。

select 序號,姓名,身份證號,性別
from 身份表
where (len(身份證號)<>15 and len(身份證號)<>18)
or (len(身份證號)=15 and ((Substring(身份證號,9,2)>12)
or (Substring(身份證號,11,2) > 31)
or (Substring(身份證號,9,2) in (01,03,05,07,08,10,12) and Substring(身份證號,11,2)>31)
or (Substring(身份證號,9,2) in (04,06,09,11) and Substring(身份證號,11,2)>30)
or (Substring(身份證號,9,2)=02 and Substring(身份證號,11,2)>29)))

㈧ 技術分享 | 兩個單機 MySQL 該如何校驗數據一致性

業務有兩個 MySQL 集群是通過 MQ 進行同步的,昨晚 MQ 出現異常,報了很多主鍵沖突,想請 dba 幫忙校驗一下兩個集群的數據是否一致。

當接到這個需求的時候並沒當回事,隱約有點印象 pt-table-checksum 能通過 dsn 實現 MySQL 的數據校驗,所以當時就應承下來了。不曾想,啪啪打臉,回想起來真是草率了。

本文參考的是 pt-table-checksum 的校驗邏輯,基於數據塊去遍歷每個表,然後比對 checksum 的值判斷該塊是否一致,本文主要是想聊聊我在實現數據校驗腳本過程中遇到的問題以及解決思路,希望對大家有幫助。

利用線上的配置文件搭建一套主從環境。

這個用例將通過 dsn 方式連接從庫。

這個用例將通過 dsn 方式連接從庫,但是會將從庫的復制鏈路 stop 掉,並清空復制信息。

熟悉 pt-table-checksum 的朋友應該都知道,該工具是基於主鍵(非空唯一鍵)進行掃描數據行,其實這個邏輯針對整型單列主鍵實現起來很簡單,但是如果是聯合主鍵且是字元型,好像就沒那麼簡單了,有興趣的可以思考一下。下面我先說一下大致的邏輯:

第一步:判斷 _min_rowid 是否為空,為空就取該表的第一行,並記作 _min_rowid 。

第二步:根據 _min_rowid 作為條件進行掃描該表,取下一個數據塊的數據,記錄數據塊的最後一行數據的主鍵值,記錄 checksum 的值,並記下 _min_rowid 。

第三步:判斷_min_rowid是否為空,非空重復第二步,為空退出檢查。

通過上述三個步驟可以看到,如果是單列整型的主鍵,實現起來很簡單,但是問題來了,業務的表的主鍵五花八門,有的是聯合主鍵,有的是字元型的聯合主鍵,還有整型+字元型的聯合主鍵,那麼上述的實現方式顯然是有問題的。所以實現起來需要多考慮幾個問題:

鑒於存在上述兩個問題,可以參考如下實現邏輯:

假如有這么一個聯合主鍵欄位 primary key(a,b,c) 都是整型,該如何編寫遍歷 sql 呢?起初我的想法很簡單,具體如下:

至此在編寫校驗腳本過程遇到的兩個問題就算告一段落了,剩下的就是各種邏輯處理了,不過多贅述,有興趣的可以自行閱讀腳本文件。

本著最低程度影響業務,所以取消加鎖邏輯。但是又要保證該數據塊的數據一致性,如果這個數據塊是個熱數據,當前正在變更,那麼校驗的時候難免會不一致。所以只能通過多次校驗實現,默認是校驗20次,其中有一次校驗結果是一致,就認為是一致的,如果前5次校驗過程中,這個數據塊的數據沒有變化,也視為不一致(可能是因為延遲,也可能是真的不一致)。

pt-table-checksum 不校驗表結構,改寫時添加表結構的校驗。

可以基於表的並行校驗,可由用戶指定並行數,但是腳本有個安全機制,如果用戶指定的並行數大於當前 cpu 空閑核心數,就會按當前(空閑核心數-1)作為並行數。

添加網路監控,由用戶指定網路上限百分比,當網卡流量超過這個百分比就暫停任務,等待網卡流量低於閾值才會繼續任務。這個主要是出於對於中間件(mycat)的場景或者分布式資料庫(tidb)的場景。

支持定時任務功能,用戶可以使用這個功能規避業務高峰,僅在業務低峰進行數據校驗。

不僅限於主從節點的校驗,只要目標對象支持 MySQL 的標准 SQL 語法就能做數據校驗。

校驗邏輯是通過 SQL 採集目標節點的資料庫,如果目標資料庫系統當前存在異常,無疑是雪上加霜,將會觸發未知問題,所以添加超時機制,單次取數據塊的閾值是5s,超過5秒就放棄等待重試。測試發現,有時候即便觸發超時了,但是 SQL 任務還是會在目標資料庫的 processlist 中能看到,所以又添加了一個 kill 機制,超時後會觸發一個 kill processlist id 的動作。另外為了避免 kill 錯,在每個 SQL 對象添加了一個32位的 md5 值,每次 kill 的時候會校驗這個 md5 值。

本工具借鑒 pt-table-checksum 工具思路改寫,可以檢查隨意兩個 mysql(支持 mysql sql 語法的資料庫)節點的數據一致性。

基於主鍵以一個塊遍歷數據表,比對checksum的值,塊的大小可通過參數指定。 (1)獲取該表的第一個數據塊的查詢SQL。 (2)將兩個目標節點的數據塊的checksum的值,記錄到臨時文件,file1 file2。 (3)比對file1 file2是否一致。

第一步:先開啟一個 screen 監控網路

第二步:新開啟一個screen執行校驗任務

(1)info.log 文件

(2)list目錄

(3)md5 目錄

(4)pri 目錄

(5)res 目錄

這是 table 目錄下記錄某個數據塊不一致的一個例子

這是 diff 目錄下記錄某個數據行不一致的一個例子

(6)skip.log 文件

本工具是參考了 pt-table-checksum 工具的一些思路並結合自身經驗進行改寫,尚有很多不足之處,僅做學習交流之用, 如有線上環境使用需求,請在測試環境充分測試。

㈨ SQL語言的checksum函數校驗的是什麼

研究了一下
checksum意思是和校驗,與hash又有關
實驗
declare @a int
declare @b int
set @a=6
set @b=31
select checksum(@a,@b),checksum(@a)*16+checksum(@b),checksum(@a),checksum(@b)

當 @a=1 @b=32 時 checksum(@a,@b)=checksum(@a)*16+checksum(@b)
換幾個參數發現有時候不等
再實驗又發現 checksum(1,16)=0
推斷 checksum(@a,@b)與checksum(@a),checksum(@b)
的16進制數有關 而卻不只一兩種演算法