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

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

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

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

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

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

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

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

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

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

對于給定的表,SHOW CREATE TABLE語句顯示哪些列具有顯式的DEFAULT子句。對于隱式的默認(rèn)值定義如下:
·對于numeric類型,默認(rèn)值為0,但對于用AUTO_INCREMENT屬性聲明的整數(shù)或浮點(diǎn)類型,默認(rèn)值為序列中的下一個(gè)值。
·對于除TIMESTAMP以外的date和time類型,默認(rèn)值為該類型的"零"值。如果啟用了explicit_defaults_for_timestamp系統(tǒng)變量,對于TIMESTAMP也是如此。否則,對于表中的第一個(gè)TIMESTAMP列,默認(rèn)值為當(dāng)前日期和時(shí)間。
·對于ENUM以外的其他字符串類型,默認(rèn)值為空字符串。對于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)值的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    這篇文章主要介紹了MySQL?意向共享鎖、意向排他鎖、死鎖,包括InnoDB表級鎖,意向共享鎖和意向排他鎖及操作方法,本文給大家介紹的非常詳細(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ì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 分析MySQL中優(yōu)化distinct的技巧

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

    這篇文章主要介紹了分析MySQL中優(yōu)化distinct的技巧,主要是通過減少本地掃描的次數(shù)來進(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

最新評論

托克托县| 铜山县| 孟津县| 宁强县| 九江市| 奉新县| 自治县| 尚志市| 盐城市| 综艺| 临桂县| 伊金霍洛旗| 开封市| 瓦房店市| 织金县| 滕州市| 蒙山县| 绥中县| 怀宁县| 治多县| 长岭县| 肥城市| 聂拉木县| 射阳县| 闵行区| 昌图县| 利辛县| 高尔夫| 汉中市| 博野县| 兰溪市| 汽车| 西贡区| 澎湖县| 永寿县| 绥芬河市| 定结县| 乃东县| 淳安县| 徐闻县| 龙海市|