最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解如何校驗(yàn)MySQL及Oracle時(shí)間字段合規(guī)性

 更新時(shí)間:2023年06月27日 10:45:42   作者:愛(ài)可生云數(shù)據(jù)庫(kù)  
這篇文章主要為大家介紹了如何校驗(yàn)MySQL及Oracle時(shí)間字段合規(guī)性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

背景信息

在數(shù)據(jù)遷移或者數(shù)據(jù)庫(kù)低版本升級(jí)到高版本過(guò)程中,經(jīng)常會(huì)遇到一些由于低版本數(shù)據(jù)庫(kù)參數(shù)設(shè)置過(guò)于寬松,導(dǎo)致插入的時(shí)間數(shù)據(jù)不符合規(guī)范的情況而觸發(fā)報(bào)錯(cuò),每次報(bào)錯(cuò)再發(fā)現(xiàn)處理起來(lái)較為麻煩,是否有提前發(fā)現(xiàn)這類不規(guī)范數(shù)據(jù)的方法,以下基于 Oracle 和 MySQL 各提供一種可行性方案作為參考。

Oracle 時(shí)間數(shù)據(jù)校驗(yàn)方法

創(chuàng)建測(cè)試表并插?測(cè)試數(shù)據(jù)

CREATE TABLE T1(ID NUMBER,CREATE_DATE VARCHAR2(20));
INSERT INTO T1 SELECT 1, '2007-01-01' FROM DUAL;
INSERT INTO T1 SELECT 2, '2007-99-01' FROM DUAL;            -- 異常數(shù)據(jù)
INSERT INTO T1 SELECT 3, '2007-12-31' FROM DUAL;
INSERT INTO T1 SELECT 4, '2007-12-99' FROM DUAL;            -- 異常數(shù)據(jù)
INSERT INTO T1 SELECT 5, '2005-12-29 03:-1:119' FROM DUAL;  -- 異常數(shù)據(jù)
INSERT INTO T1 SELECT 6, '2015-12-29 00:-1:49' FROM DUAL;   -- 異常數(shù)據(jù)

創(chuàng)建對(duì)該表的錯(cuò)誤日志記錄

  • Oracle 可以調(diào)用 DBMS_ERRLOG.CREATE_ERROR_LOG 包對(duì) SQL 的錯(cuò)誤進(jìn)行記錄,用來(lái)記錄下異常數(shù)據(jù)的情況,十分好用。
  • 參數(shù)含義如下

    • T1 為表名
    • T1_ERROR 為對(duì)該表操作的錯(cuò)誤記錄臨時(shí)表
    • DEMO 為該表的所屬用戶
EXEC DBMS_ERRLOG.CREATE_ERROR_LOG('T1','T1_ERROR','DEMO');

創(chuàng)建并插入數(shù)據(jù)到臨時(shí)表,驗(yàn)證時(shí)間數(shù)據(jù)有效性

-- 創(chuàng)建臨時(shí)表做數(shù)據(jù)校驗(yàn)
CREATE TABLE T1_TMP(ID NUMBER,CREATE_DATE DATE);
-- 插入數(shù)據(jù)到臨時(shí)表驗(yàn)證時(shí)間數(shù)據(jù)有效性(增加LOG ERRORS將錯(cuò)誤信息輸出到錯(cuò)誤日志表)
INSERT INTO T1_TMP 
SELECT ID, TO_DATE(CREATE_DATE, 'YYYY-MM-DD HH24:MI:SS')
FROM T1 
LOG ERRORS INTO T1_ERROR REJECT LIMIT UNLIMITED;

校驗(yàn)錯(cuò)誤記錄

SELECT * FROM DEMO.T1_ERROR;

其中 ID 列為該表的主鍵,可用來(lái)快速定位異常數(shù)據(jù)行。

MySQL 數(shù)據(jù)庫(kù)的方法

創(chuàng)建測(cè)試表模擬低版本不規(guī)范數(shù)據(jù)

-- 創(chuàng)建測(cè)試表
SQL> CREATE TABLE T_ORDER(
    ID BIGINT AUTO_INCREMENT PRIMARY KEY,
    ORDER_NAME VARCHAR(64),
    ORDER_TIME DATETIME);
-- 設(shè)置不嚴(yán)謹(jǐn)?shù)腟QL_MODE允許插入不規(guī)范的時(shí)間數(shù)據(jù)
SQL> SET SQL_MODE='STRICT_TRANS_TABLES,ALLOW_INVALID_DATES';
SQL> INSERT INTO T_ORDER(ORDER_NAME,ORDER_TIME) VALUES 
        ('MySQL','2022-01-01'),
        ('Oracle','2022-02-30'),
        ('Redis','9999-00-04'),
        ('MongoDB','0000-03-00');
-- 數(shù)據(jù)示例
SQL> SELECT * FROM T_ORDER;
+----+------------+---------------------+
| ID | ORDER_NAME | ORDER_TIME          |
+----+------------+---------------------+
|  1 | MySQL      | 2022-01-01 00:00:00 |
|  2 | Oracle     | 2022-02-30 00:00:00 |
|  3 | Redis      | 9999-00-04 00:00:00 |
|  4 | MongoDB    | 0000-03-00 00:00:00 |
+----+------------+---------------------+

創(chuàng)建臨時(shí)表進(jìn)行數(shù)據(jù)規(guī)范性驗(yàn)證

-- 創(chuàng)建臨時(shí)表,只包含主鍵ID和需要校驗(yàn)的時(shí)間字段
SQL> CREATE TABLE T_ORDER_CHECK(
    ID BIGINT AUTO_INCREMENT PRIMARY KEY,
    ORDER_TIME DATETIME);
-- 設(shè)置SQL_MODE為5.7或8.0高版本默認(rèn)值
SQL> SET SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
-- 使用INSERT IGNORE語(yǔ)法插入數(shù)據(jù)到臨時(shí)CHECK表,忽略插入過(guò)程中的錯(cuò)誤
SQL> INSERT IGNORE INTO T_ORDER_CHECK(ID,ORDER_TIME) SELECT ID,ORDER_TIME FROM T_ORDER;

數(shù)據(jù)比對(duì)

將臨時(shí)表與正式表做關(guān)聯(lián)查詢,比對(duì)出不一致的數(shù)據(jù)即可。

SQL> SELECT 
    T.ID,
    T.ORDER_TIME AS ORDER_TIME,
    TC.ORDER_TIME AS ORDER_TIME_TMP
FROM T_ORDER T INNER JOIN T_ORDER_CHECK TC 
ON T.ID=TC.ID
WHERE T.ORDER_TIME<>TC.ORDER_TIME;
+----+---------------------+---------------------+
| ID | ORDER_TIME          | ORDER_TIME_TMP      |
+----+---------------------+---------------------+
|  2 | 2022-02-30 00:00:00 | 0000-00-00 00:00:00 |
|  3 | 9999-00-04 00:00:00 | 0000-00-00 00:00:00 |
|  4 | 0000-03-00 00:00:00 | 0000-00-00 00:00:00 |
+----+---------------------+---------------------+

一個(gè)取巧的小方法

對(duì)時(shí)間字段用正則表達(dá)式匹配,對(duì)有嚴(yán)謹(jǐn)性要求的情況還是得用以上方式,正則匹配燒腦。

-- Oracle 數(shù)據(jù)庫(kù)
SELECT * FROM  T1 WHERE NOT REGEXP_LIKE(CREATE_DATE,'^((?:19|20)\d\d)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$');
    ID CREATE_DATE
---------- --------------------
     2 2007-99-01
     4 2007-12-99
     5 2005-12-29 03:-1:119
     6 2015-12-29 00:-1:49
-- MySQL 數(shù)據(jù)庫(kù)
-- 略,匹配規(guī)則還在調(diào)試中

關(guān)于 SQLE

愛(ài)可生開(kāi)源社區(qū)的 SQLE 是一款面向數(shù)據(jù)庫(kù)使用者和管理者,支持多場(chǎng)景審核,支持標(biāo)準(zhǔn)化上線流程,原生支持 MySQL 審核且數(shù)據(jù)庫(kù)類型可擴(kuò)展的 SQL 審核工具。

SQLE 獲取

類型地址
版本庫(kù)https://github.com/actiontech/sqle
文檔https://actiontech.github.io/sqle-docs/
發(fā)布信息https://github.com/actiontech/sqle/releases
數(shù)據(jù)審核插件開(kāi)發(fā)文檔https://actiontech.github.io/sqle-docs-cn/3.modules/3.7_audit...

以上就是詳解如何校驗(yàn)MySQL及Oracle時(shí)間字段合規(guī)性的詳細(xì)內(nèi)容,更多關(guān)于MySQL Oracle時(shí)間字段合規(guī)性的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL數(shù)據(jù)庫(kù)查詢性能優(yōu)化策略

    MySQL數(shù)據(jù)庫(kù)查詢性能優(yōu)化策略

    這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)查詢性能優(yōu)化的策略,幫助大家的工作學(xué)習(xí)提高M(jìn)ySQL數(shù)據(jù)庫(kù)的性能,感興趣的朋友可以了解下
    2020-08-08
  • Mysql中的常用調(diào)優(yōu)參數(shù)用法及解讀

    Mysql中的常用調(diào)優(yōu)參數(shù)用法及解讀

    文章介紹了MySQL數(shù)據(jù)庫(kù)的一些關(guān)鍵配置參數(shù),包括InnoDB緩沖池、redolog緩沖區(qū)、日志緩沖區(qū)等,并解釋了這些參數(shù)在數(shù)據(jù)庫(kù)性能和事務(wù)一致性中的作用,文章通過(guò)比喻和實(shí)際建議幫助讀者理解這些配置參數(shù)的合理設(shè)置
    2025-12-12
  • MySQL數(shù)據(jù)庫(kù)怎么正確查詢字符串長(zhǎng)度

    MySQL數(shù)據(jù)庫(kù)怎么正確查詢字符串長(zhǎng)度

    MySQL中字符串長(zhǎng)度一般指數(shù)據(jù)庫(kù)表中一個(gè)字段或列中存儲(chǔ)的字符串的最大長(zhǎng)度,有時(shí)我們需要測(cè)量字符串長(zhǎng)度,來(lái)保證表結(jié)構(gòu)及數(shù)據(jù)庫(kù)性能穩(wěn)定,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)怎么正確查詢字符串長(zhǎng)度的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • MySQL詳細(xì)講解多表關(guān)聯(lián)查詢

    MySQL詳細(xì)講解多表關(guān)聯(lián)查詢

    在數(shù)據(jù)庫(kù)的設(shè)計(jì)中, 我們通常都是會(huì)有很多張表 , 通過(guò)表與表之間的關(guān)系建立我們想要的數(shù)據(jù)關(guān)系, 所以在多張表的前提下, 多表的關(guān)聯(lián)查詢就尤為重要
    2022-04-04
  • MySQL表的增刪查改操作實(shí)例代碼

    MySQL表的增刪查改操作實(shí)例代碼

    MySQL表的增刪查改(CRUD)是數(shù)據(jù)庫(kù)中非?;A(chǔ)的部分,也是后端開(kāi)發(fā)日常工作中,最重要的一項(xiàng)工作,這篇文章主要介紹了MySQL表的增刪查改操作的相關(guān)資料,需要的朋友可以參考下
    2025-07-07
  • 數(shù)據(jù)庫(kù)類型轉(zhuǎn)換導(dǎo)致SQL不走索引的案例

    數(shù)據(jù)庫(kù)類型轉(zhuǎn)換導(dǎo)致SQL不走索引的案例

    在SQL中數(shù)據(jù)類型轉(zhuǎn)換是基礎(chǔ)且關(guān)鍵的操作,分為隱式和顯式轉(zhuǎn)換,隱式轉(zhuǎn)換由系統(tǒng)自動(dòng)完成,雖便捷但可能帶來(lái)性能損耗、索引失效及數(shù)據(jù)準(zhǔn)確性風(fēng)險(xiǎn),這篇文章主要介紹了數(shù)據(jù)庫(kù)類型轉(zhuǎn)換導(dǎo)致SQL不走索引的案例,需要的朋友可以參考下
    2026-05-05
  • Mysql查詢?nèi)掌趖imestamp格式的數(shù)據(jù)實(shí)現(xiàn)

    Mysql查詢?nèi)掌趖imestamp格式的數(shù)據(jù)實(shí)現(xiàn)

    本文主要介紹了Mysql查詢?nèi)掌趖imestamp格式的數(shù)據(jù)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 一文說(shuō)透什么是MySQL的預(yù)編譯

    一文說(shuō)透什么是MySQL的預(yù)編譯

    這篇文章主要介紹了一文說(shuō)透什么是MySQL的預(yù)編譯,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • MySQL擴(kuò)展VARCHAR長(zhǎng)度遭遇問(wèn)題匯總分析

    MySQL擴(kuò)展VARCHAR長(zhǎng)度遭遇問(wèn)題匯總分析

    這篇文章主要為大家介紹了MySQL擴(kuò)展VARCHAR長(zhǎng)度遭遇問(wèn)題匯總分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-02-02
  • MYSQL數(shù)據(jù)庫(kù)中cmd命令操作詳解

    MYSQL數(shù)據(jù)庫(kù)中cmd命令操作詳解

    今天我們就來(lái)看一下數(shù)據(jù)庫(kù)的各種命令,以下命令全部是從CMD命令窗口下的命令行輸入指令,首先如果如果輸入mysql,系統(tǒng)提示“mysql不是內(nèi)部命 令或外部命令
    2016-04-04

最新評(píng)論

丹凤县| 屏边| 乌拉特中旗| 和龙市| 海丰县| 宝鸡市| 易门县| 柳林县| 南丹县| 丹寨县| 崇义县| 灯塔市| 鲁甸县| 贵定县| 新沂市| 贺兰县| 安远县| 沂水县| 承德县| 巴南区| 磴口县| 双牌县| 出国| 紫阳县| 休宁县| 蕲春县| 曲阳县| 久治县| 庆元县| 揭西县| 濉溪县| 江安县| 盐亭县| 承德县| 左云县| 临汾市| 固原市| 巧家县| 宁国市| 措勤县| 济宁市|