婷婷久久综合九色综合,欧美成色婷婷在线观看视频,偷窥视频一区,欧美日本一道道一区二区

<tt id="bu9ss"></tt>
  • <span id="bu9ss"></span>
  • <pre id="bu9ss"><tt id="bu9ss"></tt></pre>
    <label id="bu9ss"></label>

    當(dāng)前位置:首頁 >  站長 >  數(shù)據(jù)庫 >  正文

    MySQL 如何處理隱式默認(rèn)值

     2020-12-18 16:27  來源: 腳本之家   我來投稿 撤稿糾錯

      阿里云優(yōu)惠券 先領(lǐng)券再下單

    這篇文章主要介紹了MySQL 處理隱式默認(rèn)值的相關(guān)資料,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下

    有同學(xué)說遇到了主從不一致的問題。

    大概情況是,從庫是用mysqldump導(dǎo)出導(dǎo)入數(shù)據(jù)的方式創(chuàng)建的。創(chuàng)建成功后,在用mysqldump驗證主從的表結(jié)構(gòu)是否一致的時候,發(fā)現(xiàn)有些表定義不一致:

    從他的比較結(jié)果可以看到,在從庫端,有三個列的定義中被加入了“default null”。

    懷疑環(huán)境被人人為修改過,但是最終確認(rèn)環(huán)境沒有被動過。然后又做了一邊測試,使用mysqldump導(dǎo)出數(shù)據(jù),使用source將數(shù)據(jù)導(dǎo)入從庫后,發(fā)現(xiàn)還是有這個現(xiàn)象,問是不是source命令有bug!

    其實,這個跟MySQL內(nèi)部如何處理隱式默認(rèn)值有關(guān)。

    如果數(shù)據(jù)類型沒有包含顯式的default值,MySQL會按照如下的規(guī)則確定默認(rèn)值:

    ·如果該列可以采用NULL值作為值,該列在定義的時候會被加上一個顯式的default null子句

    ·如果該列不可以采用NULL值作為值,該列在定時候就不會加上一個顯式的default子句

    對于將數(shù)據(jù)輸入沒有顯式DEFAULT子句的NOT NULL列的情況,如果INSERT或REPLACE語句不包含該列的值,或者UPDATE語句將該列設(shè)置為NULL,屆時則MySQL將根據(jù)有效的SQL Mode處理該列:

    ·如果啟用了嚴(yán)格的SQL模式(strict SQL mode),則事務(wù)表將發(fā)生錯誤,并且該語句將回滾。對于非事務(wù)表,會發(fā)生錯誤,但是如果此錯誤發(fā)生在多行語句的第二行或后續(xù)行中,則該錯誤之前的所有行均已插入。

    ·如果未啟用嚴(yán)格模式,則MySQL將列設(shè)置為列數(shù)據(jù)類型的隱式默認(rèn)值。

    假設(shè)表t定義如下:

    mysql> create table t(i int not null);

    這里,i沒有顯式的默認(rèn)值。

    在嚴(yán)格的sql mode下,下面的語句都會產(chǎn)生錯誤,插入失敗。

    mysql> show variables like '%sql_mode%';
    +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
    | Variable_name | Value                                                                                                                                     |
    +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
    | 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 |
    +---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.01 sec)
     
    mysql> INSERT INTO t VALUES();
    ERROR 1364 (HY000): Field 'i' doesn't have a default value
    mysql> INSERT INTO t VALUES(DEFAULT);
    ERROR 1364 (HY000): Field 'i' doesn't have a default value
    mysql> INSERT INTO t VALUES(DEFAULT(i));
    ERROR 1364 (HY000): Field 'i' doesn't have a default value
    mysql>

    在非嚴(yán)格的sql mode下:

    mysql> SET @@sql_mode='';
    Query OK, 0 rows affected, 1 warning (0.00 sec)
     
    mysql> show variables like '%sql_mode%';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | sql_mode      |       |
    +---------------+-------+
    1 row in set (0.00 sec)
     
    mysql> INSERT INTO t VALUES();
    Query OK, 1 row affected, 1 warning (0.00 sec)
     
    mysql> INSERT INTO t VALUES(DEFAULT);
    Query OK, 1 row affected, 1 warning (0.01 sec)
     
    mysql> INSERT INTO t VALUES(DEFAULT(i));
    ERROR 1364 (HY000): Field 'i' doesn't have a default value
    mysql> select * from t;
    +---+
    | i |
    +---+
    | 0 |
    | 0 |
    +---+
    2 rows in set (0.01 sec)
     
    mysql>

    對于給定的表,SHOW CREATE TABLE語句顯示哪些列具有顯式的DEFAULT子句。對于隱式的默認(rèn)值定義如下:

    ·對于numeric類型,默認(rèn)值為0,但對于用AUTO_INCREMENT屬性聲明的整數(shù)或浮點類型,默認(rèn)值為序列中的下一個值。

    ·對于除TIMESTAMP以外的date和time類型,默認(rèn)值為該類型的"零"值。如果啟用了explicit_defaults_for_timestamp系統(tǒng)變量,對于TIMESTAMP也是如此。否則,對于表中的第一個TIMESTAMP列,默認(rèn)值為當(dāng)前日期和時間。

    ·對于ENUM以外的其他字符串類型,默認(rèn)值為空字符串。對于ENUM,默認(rèn)值為第一個枚舉值。

    mysql> create table t1(id int,name varchar(20));
    Query OK, 0 rows affected (0.04 sec)
     
    mysql> show create table t1\G
    *************************** 1. row ***************************
           Table: t1
    Create Table: CREATE TABLE `t1` (
      `id` int(11) DEFAULT NULL,
      `name` varchar(20) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
    1 row in set (0.00 sec)
     
    mysql>

    以上就是MySQL 如何處理隱式默認(rèn)值的詳細(xì)內(nèi)容,更多關(guān)于MySQL 隱式默認(rèn)值的資料請關(guān)注腳本之家其它相關(guān)文章!

    來源:腳本之家

    鏈接:https://www.jb51.net/article/202339.htm

    申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!

    相關(guān)標(biāo)簽
    mysql

    相關(guān)文章

    • MySQL5.7 集群配置的步驟

      這篇文章主要介紹了MySQL5.7集群配置的步驟,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下

      標(biāo)簽:
      mysql
    • MySQL中觸發(fā)器和游標(biāo)的介紹與使用

      這篇文章主要給大家介紹了關(guān)于MySQL中觸發(fā)器和游標(biāo)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

      標(biāo)簽:
      mysql
    • MySQL中exists、in及any的基本用法

      這篇文章主要給大家介紹了關(guān)于MySQL中exists、in及any的基本用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

      標(biāo)簽:
      mysql
    • MySQL正確修改最大連接數(shù)的3種方案

      這篇文章主要給大家介紹了關(guān)于MySQL正確修改最大連接數(shù)的3種方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

      標(biāo)簽:
      mysql
    • 教你怎么在Windows系統(tǒng)上手動搭建MySql數(shù)據(jù)庫

      1.已經(jīng)購買好的騰訊云輕量應(yīng)用服務(wù)器。2.作者本次演示使用的系統(tǒng)是WindowsServer2019,其他windows版本也可以,操作流程大同小異。3.使用Windows遠(yuǎn)程桌面連接騰訊云輕量服務(wù)器。

    熱門排行

    信息推薦