欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql中怎樣使用合適的字段和字段長度

 更新時間:2023年11月03日 10:12:02   作者:銘記T  
這篇文章主要介紹了mysql中怎樣使用合適的字段和字段長度問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

下面是mysql一個字段中含有哪些信息

一般重要的字段為類型,長度,屬性,非空,索引,自增等等。

注:A_I:auto_increment,代表自增。

字段的類型有好多種,先說下字段中比較常用的類型和長度

整數(shù)型

1、整數(shù)型的數(shù)值類型已經限制了取值范圍,有符號整型和無符號整型都有,而M值并不代表可以存儲的數(shù)值字符長度,它代表的是數(shù)據(jù)在顯示時顯示的最小長度;

2、當存儲的字符長度超過M值時,沒有任何的影響,只要不超過數(shù)值類型限制的范圍;

3、當存儲的字符長度小于M值時,只有在設置了zerofill用0來填充,才能夠看到效果,換句話就是說,沒有zerofill,M值就是無用的。

舉例子,如果你設置int(11),那么有個字段值是123,那么這個值在顯示寬度上是3位,而設計的是顯示的是11位,所以這時候,你如果在字段設計的時候,選擇zerofill就可以發(fā)現(xiàn),123變成了00000000123,也就是剩下的8位用0補足了。

所以我們在設計mysql數(shù)據(jù)庫時,建表時,mysql會自動分配長度:int(11)、tinyint(4)、smallint(6)、mediumint(9)、bigint(20)。

所以,就用這些默認的顯示長度就可以了。不用再去自己填長度,比如搞個int(10)、tinyint(1)之類的,基本沒用。而且導致表的字段類型多樣化。

字符串型

CHAR(M), VARCHAR(M)

CHAR(M)定義的列的長度為固定的,M取值可以為0~255之間,當保存CHAR值時,在它們的右邊填充空格以達到指定的長度。當檢索到CHAR值時,尾部的空格被刪除掉。在存儲或檢索過程中不進行大小寫轉換。CHAR存儲定長數(shù)據(jù)很方便,CHAR字段上的索引效率級高,比如定義char(10),那么不論你存儲的數(shù)據(jù)是否達到了10個字節(jié),都要占去10個字節(jié)的空間,不足的自動用空格填充。

VARCHAR(M)定義的列的長度為可變長字符串,M取值可以為0~65535之間,(VARCHAR的最大有效長度由最大行大小和使用的字符集確定。整體最大長度是65,532字節(jié))。VARCHAR值保存時只保存需要的字符數(shù),另加一個字節(jié)來記錄長度(如果列聲明的長度超過255,則使用兩個字節(jié))。VARCHAR值保存時不進行填充。當值保存和檢索時尾部的空格仍保留,符合標準SQL。varchar存儲變長數(shù)據(jù),但存儲效率沒有CHAR高。如果一個字段可能的值是不固定長度的,我們只知道它不可能超過10個字符,把它定義為 VARCHAR(10)是最合算的。

CHAR和VARCHAR最大的不同就是一個是固定長度,一個是可變長度。

總結一下,從空間上考慮,用varchar合適;從效率上考慮,用char合適,關鍵是根據(jù)實際情況找到權衡點,所有當需要大量查詢需求的時候,用char。當對于保存數(shù)據(jù)量過大的需求時,為了節(jié)省儲存空間用varchar。

TEXT

最大長度為65,535(2的16次方–1)字符的TEXT列。

Text主要是用來存放非二進制的文本,如論壇帖子,題目,或者百度知道的問題和回答之類。TEXT列不能有默認值,存儲或檢索過程中,不存在大小寫轉換,后面如果指定長度,不會報錯誤,但是這個長度是不起作用的,意思就是你插入數(shù)據(jù)的時候,超過你指定的長度還是可以正常插入。其實可以總結為用來儲存大批量的文本信息的時候,使用TEXT。

總結

1,長度的區(qū)別,char范圍是0~255,varchar最長是64k,如果遇到了大文本,考慮使用text,最大能到4G。

2,效率來說基本是char>varchar>text。

3,char和varchar可以有默認值,text不能指定默認值。

時間型

  • DATETIME:類型用在你需要同時包含日期和時間信息的值時。MySQL檢索并且以'YYYY-MM-DD HH:MM:SS'格式顯示DATETIME值,支持的范圍是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。
  • DATE:類型用在你僅需要日期值時,沒有時間部分。MySQL檢索并且以'YYYY-MM-DD'格式顯示DATE值,支持的范圍是'1000-01-01'到'9999-12-31'。
  • TIMESTAMP:列類型提供一種類型,你可以使用它自動地用當前的日期和時間標記INSERT或UPDATE的操作。
  • TIME:數(shù)據(jù)類型表示一天中的時間。MySQL檢索并且以"HH:MM:SS"格式顯示TIME值。支持的范圍是'00:00:00'到'23:59:59'。

datetime和timestamp的區(qū)別:

1.datetime 的日期范圍比較大;如果有1970年以前的數(shù)據(jù)還是要用datetime.但是timestamp 所占存儲空間比較小。

2.timestamp 類型的列還有個特性:默認情況下,在 insert, update 數(shù)據(jù)時,timestamp 列會自動以當前時間(CURRENT_TIMESTAMP)填充/更新。

3.timestamp比較受時區(qū)timezone的影響以及MYSQL版本和服務器的SQL MODE的影響。

字段的屬性值及用處

  • BINARY:不是函數(shù),是類型轉換運算符,它用來強制它后面的字符串為一個二進制字符串,可以理解為在字符串比較的時候區(qū)分大小寫。
  • UNSIGNED:既為非負數(shù),用此類型可以增加一倍數(shù)據(jù)長度!

UNSIGNED ZEROFILL:剛說過了,數(shù)字型字段當存儲的字符長度小于INT(M)中的M值時,只有在設置了zerofill用0來填充,才能夠看到效果,換句話就是說,沒有zerofill,M值就是無用的。

timestamp有兩個屬性,分別是CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP兩種,使用情況分別如下

1,CURRENT_TIMESTAMP 

當要向數(shù)據(jù)庫執(zhí)行insert操作時,如果有個timestamp字段屬性設為

 CURRENT_TIMESTAMP,則無論這個字段有沒有set值都插入當前系統(tǒng)時間

2,ON UPDATE CURRENT_TIMESTAMP

當執(zhí)行update操作是,并且字段有ON UPDATE CURRENT_TIMESTAMP屬性。則字段無論值有沒有變化,它的值也會跟著更新為當前UPDATE操作時的時間。

字段的索引以及設置

先說下對索引的最簡單的理解:

如果你給一個唯一性的字段加上索引,比如一個字段是房間號,你不設置字段的情況下去搜索RoomNumber=101,那么數(shù)據(jù)庫會去一條一條的搜索數(shù)據(jù)庫中的RoomNumber字段,直到找到101給你返回,但如果你把RoomNumber設置為索引,那么數(shù)據(jù)庫就會直接找到RoomNumber=101這條信息給你返回。

所以索引的作用是加快數(shù)據(jù)庫搜索的效率,但是同樣的,你給一個字段設置為索引,是要消耗資源的。

  • 普通索引(INDEX):最基本的索引,沒有任何限制。
  • 唯一索引(UNIQUE):與"普通索引"類似,不同的就是:索引列的值必須唯一,但允許有空值。
  • 主鍵索引(PRIMARY):它 是一種特殊的唯一索引,不允許有空值。
  • 全文索引(FULLTEXT ):僅可用于 MyISAM 表, 用于在一篇文章中,檢索文本信息的, 針對較大的數(shù)據(jù),生成全文索引很耗時耗空間。

說一下字段的長度問題

  • 位(bit):數(shù)據(jù)存儲的最小單位。每個二進制數(shù)字0或者1就是1個位;
  • 字節(jié)(byte): 8個位構成一個字節(jié);即:1 byte (字節(jié))= 8 bit(位);
  • 字符:是指計算機中使用的字母、數(shù)字、字和符號。

比如不同的酒店的房間號的方式是不同的,可能是101,或者是FD101,再或者是亞特蘭蒂斯101,這樣不確定的字段,為了提高表的復用性,我們可以給出一個長度,比如char(32),我們可以確定酒店的房間號無論如何都會超過這個長度,這樣就可以在節(jié)省空間的情況下適應所有的情況,

但是還有一種情況比如數(shù)據(jù)庫中要存MAC地址,MAC地址格式為XX-XX-XX-XX-XX-XX,一共為12個數(shù)字和五個分隔符,那么我們就可以直接char(17)來定死這個字段的長度,因為無論如何MAC地址都不會超過17位。

其實也會有人覺得我定為char(32)那能比char(17)的查詢效率低多少?確實微乎其微,但是從習慣的角度來說,建表要養(yǎng)成一種好的習慣,所以當我們可以確定一個字段的長度的時候,就要直接用規(guī)則定死,避免掉后期可能出現(xiàn)的優(yōu)化。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Linux下編譯安裝Mysql 5.5的簡單步驟

    Linux下編譯安裝Mysql 5.5的簡單步驟

    Linux下面因為從MySQL 5.5開始使用cmake來做config了,所以編譯安裝的會和5.1版本有些區(qū)別。不過總體來說還是差別不大
    2015-08-08
  • Mysql之SQL執(zhí)行流程全面解析

    Mysql之SQL執(zhí)行流程全面解析

    MySQL的執(zhí)行流程包括查詢緩存、解析器、優(yōu)化器和執(zhí)行器,首先,查詢緩存檢查是否存在查詢結果,如果存在則直接返回;如果不存在,則進入解析器進行語法和語義分析,解析器將SQL語句轉換為語法樹,并進行詞法和語法分析,接著,優(yōu)化器確定最佳執(zhí)行路徑
    2024-12-12
  • 深入講解數(shù)據(jù)庫中Decimal類型的使用以及實現(xiàn)方法

    深入講解數(shù)據(jù)庫中Decimal類型的使用以及實現(xiàn)方法

    MySQL?DECIMAL數(shù)據(jù)類型用于在數(shù)據(jù)庫中存儲精確的數(shù)值,我們經常將DECIMAL數(shù)據(jù)類型用于保留準確精確度的列,例如會計系統(tǒng)中的貨幣數(shù)據(jù),下面這篇文章主要給大家介紹了關于數(shù)據(jù)庫中Decimal類型的使用以及實現(xiàn)方法的相關資料,需要的朋友可以參考下
    2022-02-02
  • 實現(xiàn)數(shù)據(jù)庫水平切分的兩個思路

    實現(xiàn)數(shù)據(jù)庫水平切分的兩個思路

    今天小編就為大家分享一篇關于實現(xiàn)數(shù)據(jù)庫水平切分的兩個思路,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • 詳細聊聊MySQL中慢SQL優(yōu)化的方向

    詳細聊聊MySQL中慢SQL優(yōu)化的方向

    由于在MySQL日常查詢中,查詢類型的語句占慢sql的大部分,所以下面這篇文章主要給大家介紹了關于MySQL中慢SQL優(yōu)化方向的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • 深入理解MySQL中的行級鎖

    深入理解MySQL中的行級鎖

    行級鎖加鎖規(guī)則比較復雜,不同的場景,加鎖的形式是不同的,本文主要介紹了深入理解MySQL中的行級鎖,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Mysql中正則表達式Regexp常見用法及說明

    Mysql中正則表達式Regexp常見用法及說明

    這篇文章主要介紹了Mysql中正則表達式Regexp常見用法及說明,具有很好的參考價值,希望對大家有所幫助。
    2022-12-12
  • MySql服務未知原因消失解決方法

    MySql服務未知原因消失解決方法

    這篇文章主要介紹了MySql服務未知原因消失解決方法的相關資料,需要的朋友可以參考下
    2017-04-04
  • 淺談mysql 自定義函數(shù)

    淺談mysql 自定義函數(shù)

    本文主要是分析了一下在工作中寫的一個mysql的自定義函數(shù),很簡單,僅僅是希望能對大家理解mysql自定義函數(shù)有所幫助。
    2014-09-09
  • mysql自動增量備份的實例方法(本地備份與遠程備份)

    mysql自動增量備份的實例方法(本地備份與遠程備份)

    mysql自動增量備份的例子(本地備份與遠程備份),有需要的朋友可以參考下
    2013-02-02

最新評論