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

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

 更新時(shí)間:2020年12月17日 10:20:04   作者:abce  
這篇文章主要介紹了MySQL 處理隱式默認(rèn)值的相關(guān)資料,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下

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

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

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

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

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

如果數(shù)據(jù)類型沒(méi)有包含顯式的default值,MySQL會(huì)按照如下的規(guī)則確定默認(rèn)值:
·如果該列可以采用NULL值作為值,該列在定義的時(shí)候會(huì)被加上一個(gè)顯式的default null子句
·如果該列不可以采用NULL值作為值,該列在定時(shí)候就不會(huì)加上一個(gè)顯式的default子句

對(duì)于將數(shù)據(jù)輸入沒(méi)有顯式DEFAULT子句的NOT NULL列的情況,如果INSERT或REPLACE語(yǔ)句不包含該列的值,或者UPDATE語(yǔ)句將該列設(shè)置為NULL,屆時(shí)則MySQL將根據(jù)有效的SQL Mode處理該列:
·如果啟用了嚴(yán)格的SQL模式(strict SQL mode),則事務(wù)表將發(fā)生錯(cuò)誤,并且該語(yǔ)句將回滾。對(duì)于非事務(wù)表,會(huì)發(fā)生錯(cuò)誤,但是如果此錯(cuò)誤發(fā)生在多行語(yǔ)句的第二行或后續(xù)行中,則該錯(cuò)誤之前的所有行均已插入。
·如果未啟用嚴(yán)格模式,則MySQL將列設(shè)置為列數(shù)據(jù)類型的隱式默認(rèn)值。

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

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

這里,i沒(méi)有顯式的默認(rèn)值。
在嚴(yán)格的sql mode下,下面的語(yǔ)句都會(huì)產(chǎn)生錯(cuò)誤,插入失敗。

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>

對(duì)于給定的表,SHOW CREATE TABLE語(yǔ)句顯示哪些列具有顯式的DEFAULT子句。對(duì)于隱式的默認(rèn)值定義如下:
·對(duì)于numeric類型,默認(rèn)值為0,但對(duì)于用AUTO_INCREMENT屬性聲明的整數(shù)或浮點(diǎn)類型,默認(rèn)值為序列中的下一個(gè)值。
·對(duì)于除TIMESTAMP以外的date和time類型,默認(rèn)值為該類型的"零"值。如果啟用了explicit_defaults_for_timestamp系統(tǒng)變量,對(duì)于TIMESTAMP也是如此。否則,對(duì)于表中的第一個(gè)TIMESTAMP列,默認(rèn)值為當(dāng)前日期和時(shí)間。
·對(duì)于ENUM以外的其他字符串類型,默認(rèn)值為空字符串。對(duì)于ENUM,默認(rèn)值為第一個(gè)枚舉值。

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)值的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 通過(guò)緩存+SQL修改優(yōu)雅地優(yōu)化慢查詢

    通過(guò)緩存+SQL修改優(yōu)雅地優(yōu)化慢查詢

    本文通過(guò)介紹緩存的基本原理和SQL語(yǔ)句的優(yōu)化手段,以及實(shí)際案例的分析,為讀者提供了一種簡(jiǎn)單而有效的優(yōu)化思路。讀者可以通過(guò)本文了解到如何在不修改程序代碼的情況下,通過(guò)巧妙地運(yùn)用緩存和SQL優(yōu)化技巧,提高程序的性能和響應(yīng)速度。
    2023-04-04
  • linux/mac安裝mysql忘記密碼的解決辦法

    linux/mac安裝mysql忘記密碼的解決辦法

    這篇文章主要給大家介紹了關(guān)于linux/mac安裝mysql忘記密碼的解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • 解決MySQL時(shí)區(qū)日期時(shí)差8個(gè)小時(shí)的問(wèn)題

    解決MySQL時(shí)區(qū)日期時(shí)差8個(gè)小時(shí)的問(wèn)題

    本文主要介紹了解決MySQL時(shí)區(qū)日期時(shí)差8個(gè)小時(shí)的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 在Mysql數(shù)據(jù)庫(kù)里通過(guò)存儲(chǔ)過(guò)程實(shí)現(xiàn)樹(shù)形的遍歷

    在Mysql數(shù)據(jù)庫(kù)里通過(guò)存儲(chǔ)過(guò)程實(shí)現(xiàn)樹(shù)形的遍歷

    關(guān)于多級(jí)別菜單欄或者權(quán)限系統(tǒng)中部門上下級(jí)的樹(shù)形遍歷,oracle中有connect by來(lái)實(shí)現(xiàn),mysql沒(méi)有這樣的便捷途徑,所以MySQL遍歷數(shù)據(jù)表是我們經(jīng)常會(huì)遇到的頭痛問(wèn)題,下面給大家介紹在Mysql數(shù)據(jù)庫(kù)里通過(guò)存儲(chǔ)過(guò)程實(shí)現(xiàn)樹(shù)形的遍歷,一起看看吧
    2016-11-11
  • 一文學(xué)習(xí)MySQL?意向共享鎖、意向排他鎖、死鎖

    一文學(xué)習(xí)MySQL?意向共享鎖、意向排他鎖、死鎖

    這篇文章主要介紹了MySQL?意向共享鎖、意向排他鎖、死鎖,包括InnoDB表級(jí)鎖,意向共享鎖和意向排他鎖及操作方法,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • MySQL 事務(wù)概念與用法深入詳解

    MySQL 事務(wù)概念與用法深入詳解

    這篇文章主要介紹了MySQL 事務(wù)概念與用法,結(jié)合實(shí)例形式深入分析了MySQL 事務(wù)基本概念、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-05-05
  • MAC上Mysql忘記Root密碼或權(quán)限錯(cuò)誤的快速解決方案

    MAC上Mysql忘記Root密碼或權(quán)限錯(cuò)誤的快速解決方案

    這篇文章主要介紹了MAC上Mysql忘記Root密碼或權(quán)限錯(cuò)誤的快速解決方案的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • linux使用mysqldump+expect+crontab實(shí)現(xiàn)mysql周期冷備份思路詳解

    linux使用mysqldump+expect+crontab實(shí)現(xiàn)mysql周期冷備份思路詳解

    這篇文章主要介紹了linux使用mysqldump+expect+crontab實(shí)現(xiàn)mysql周期冷備份,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 分析MySQL中優(yōu)化distinct的技巧

    分析MySQL中優(yōu)化distinct的技巧

    這篇文章主要介紹了分析MySQL中優(yōu)化distinct的技巧,主要是通過(guò)減少本地掃描的次數(shù)來(lái)進(jìn)行優(yōu)化的方法,需要的朋友可以參考下
    2015-05-05
  • mysql 8.0 錯(cuò)誤The server requested authentication method unknown to the client解決方法

    mysql 8.0 錯(cuò)誤The server requested authentication method unkno

    在本篇文章里小編給大家整理的是關(guān)于mysql 8.0 錯(cuò)誤The server requested authentication method unknown to the client解決方法,有此需要的朋友們可以學(xué)習(xí)下。
    2019-08-08

最新評(píng)論

什邡市| 五寨县| 屯门区| 浦江县| 白水县| 财经| 徐汇区| 永福县| 綦江县| 千阳县| 和田市| 达日县| 新闻| 永寿县| 东兰县| 江津市| 宁乡县| 太白县| 定陶县| 晋江市| 新巴尔虎右旗| 克东县| 阳原县| 威信县| 老河口市| 许昌市| 葫芦岛市| 抚松县| 阿坝县| 长泰县| 宁陕县| 顺昌县| 静宁县| 天门市| 和田县| 孙吴县| 和平县| 新晃| 汨罗市| 峨边| 南京市|