mysql的數據類型和欄位屬性

来源:https://www.cnblogs.com/progor/archive/2018/04/08/8745690.html
-Advertisement-
Play Games

本文內容: 數據類型 數值類型 整數型 浮點型 定點型 日期時間類型 字元串類型 補充: 顯示寬度與zerofll 記錄長度 欄位屬性 空\不為空值:NULL、NOT NULL 主鍵:primary key 唯一鍵:unique key 自增長:auto_increment 預設值:default ...


 


本文內容:

 

  • 數據類型
    • 數值類型
      • 整數型
      • 浮點型
      • 定點型
    • 日期時間類型
    • 字元串類型
    • 補充:
      • 顯示寬度與zerofll
      • 記錄長度
  • 欄位屬性
    • 空\不為空值:NULL、NOT NULL
    • 主鍵:primary key
    • 唯一鍵:unique key
    • 自增長:auto_increment
    • 預設值:default
    • 欄位描述:comment
    • 補充:
      • 複合鍵

 

首發日期:2018-04-08


數據類型:

 

mysql的數據類型就是存儲數據的類型。

 

數值類型:

  • 整數類型
    • 預設是有符號,如果需要使用無符號的數據類型要在後面加"UNSIGNED"
類型 簡寫 位元組大小 (signed)範圍 (unsigned)範圍 備註
整數型:          
TINYINT   1 0~255 -128~127  
SMALLINT   2 0~65535 -32768~32767  
MEDIUMINT   3 0~16777215 -8388608~8388607  
INTEGER INT 4 0~4294967295 -2147483648~2147483647  
BIGINT   8 0~264-1 -263263-1  

 

 

  • 小數類型:
    • 浮點類型:
      • size是數值的最大位數,d是小數點右側的位數(即使你沒輸夠那麼多位也會補全那麼多位)。
      • FLOAT的精度為6~7位(依據情況不同?畢竟機器是以二進位存儲的),DOUBLE的精度為14~15位
      • 整數部分的個數為SIZE-D,直接存入的值的個數不能多於這個,但如果浮點數四捨五入導致整數進位而溢出超過最大位數的,系統允許成立(某些版本貌似已經不允許了,所以一般小數位也不要超過
      • 很多時候沒必要關註兩個浮點的數值範圍大小(是極大的),註重點應該是它的精度。
      • imageimage
    • 定點型:
      • size是數值的最大位數,最大為65,d是小數點右側的最大位數,最大為30
      • 定點型不允許因為小數部分四捨五入導致整數部分長度超出範圍。
      • DECIMAL是不會損失精度的可以理解成使用“字元串”存儲(MYSQL權威指南這麼說)。
      • image
    • 直接不帶括弧的數據類型float、double、decimal代表沒有小數部分

 

 

 

 

時間日期類型:

時間日期類型包括date,time,datetime,timestamp,year;

  • Datetime:時間日期,格式是YYYY-MM-DD HH:II:SS,表示的範圍是從1000到9999年(有些版本以及允許0-9999?不確定)
    • image

 

  • Date:日期,格式是YYYY-MM-DD ,表示的範圍是從1000到9999年
    • image
  • Time:時間段,格式是HH:II:SS, 指定的某個區間之間,有正負。表示的範圍 -838:59:59~838:59:59
    • image
  • Timestamp:格式是YYYY-MM-DD HH:II:SS,表示的範圍從1970-01-01 00:00:00到2038-01-19 03:14:07 【一旦該行記錄被修改,那麼timestamp會修改成當前時間。】
    • image
  • Year:年份,表示的範圍1901-2156
    • image
    • 原本有兩種格式,year(2)和year(4),但5.7中移除了year(2)。

 

     

字元串類型  :

    • set  :集合字元串。將一個個特定的字元串放到集合裡面。

      • 定義了集合之後,不能插入集合元素之外的字元串,(可以插入多個符合條件的字元串)
      • 集合字元串實際上也是僅僅存儲數值,系統自動轉換成對應的字元串。
      • 集合中每一個元素對應一個二進位位,被選中的為1,沒選中的為0,左邊為二進位中的低位,右邊為高位,從右到左得到二進位結果
create table my_set(
hobby set('football','basketball','pingpong','computer')
)charset utf8;

insert into my_set values('basketball,computer');
insert into my_set values(3);-- 3=0011
insert into my_set values(5);-- 5=0101

image

 

    • enum  :枚舉字元串

      • 有點類似set,但這裡只能插入一個字元串
      • 將可能出現的數據列舉出來,實際存儲的數據只能是列舉出來的數據。
      • 使用枚舉有利於統一數據,以及節省存儲空間(枚舉只是存儲數值,系統轉換成字元串)。
      • 枚舉元素實際上按定義的順序標號,從1開始,所以可以直接插入枚舉元素對應的數值。
      • 如:
create table my_enum(
gender enum('male','female','unknown')
)charset utf8;

image

 

 

 

  • blob  :二進位數據字元串

    • 存儲二進位數據(少用)

 

  • text  :文字字元串

    • 存儲文字,當字元大於255時,一般使用text;

 

  • varchar  :變長字元串

    • varchar(L),L代表字元長度,單位為字元,最大長度為65536。在實際存儲中需要1到2個位元組來存儲長度(1還是2由實際大小決定,216=35536,<=255的一般一個位元組),在使用時根據定義的大小來分配空間,但會根據實際需要使用的縮小空間(比如規定60大小,實際只有30,那麼實際空間就是31~32)。
    • 當L大於255時,建議使用Text,而不是varchar;
    • image_thumb1

 

  • char  :定長字元串

    • char(L),L代表字元長度,單位為字元,最大長度為255,不使用L時預設為1
    • 不同環境中根據字元大小,實際占有的空間不同;在UTF8環境下,char(4)所用的位元組數為4*3=12;

 

 

補充:

    • 顯示寬度 與填充 :

      • 在列類型後面顯示的數值,代表數據最終顯示的最少位數(包含符號)。
      • 一般不夠顯示寬度的數據都會採用空格填充,也可以使用zerofill來使用零填充(零填充會導致數據類型自動變成無符號的)。
      • tiny(3)的空格填充效果:image,zerofill效果:image
create table myInt(t1 TINYINT(3));
drop table myInt;
insert into myInt values(127),(1);
select * from myInt;
alter table myInt modify t1 tinyint(3) zerofill;
select * from myInt;

 

 

  • 不要輕易的使用最大限度來存儲字元串,因為涉及記錄長度問題  :

    • MySQL中規定任何一條數據最長不能超過65535個位元組
    • 如果有任何一個欄位允許為空,那麼系統會自動從整個記錄中保存一個位元組來存儲NULL;
    • text文本不占用記錄長度,額外存儲。
    • UTF8中varchar的最大限度:65535-2(需要兩個位元組來存儲長度)  /3=21844,所以最大字元數為21844
    • GBK中varchar的最大限度:65535-2(需要兩個位元組來存儲長度) /2=32766

 

 


欄位屬性:

欄位屬性是欄位除數據類型外的屬性,一般有空\不為空值、主鍵、唯一鍵、自增長、預設值、描述等屬性。

 

 

空\不為空值:NULL、NOT NULL

  • 欄位的數據預設情況下是允許為空的(非為鍵情況下),比如說一條人的信息記錄中可以沒有郵箱(或許有些地方用空字元串來代表),我們允許可以不填入數據的欄位可以設置為null;但比如說某些必填數據,我們不想填入的時候留空,可以設置這個欄位為not null
  • 允許為空時的數據,空的數據顯示為null:image
  • 不為空的欄位,插入null時,會報錯:image
  • null\not null屬性的定義方式(因為預設允許空,所以主要關註not null):image;當然也可以通過修改欄位的形式來給欄位定義not null屬性

 

主鍵:primary key

  • 主鍵用於唯一標識每一條記錄(每個人都有自己唯一的身份證)
  • 每一張表只能有一個主鍵。
  • 因為唯一標識,所以主鍵欄位的數據不能為空,並且主鍵欄位的數據值不能重覆
  • 主鍵也是一種索引,可以提高查找速率。
  • 主鍵的定義:
    • 1.定義表結構的時候定義成欄位的屬性。imageimage
    • 2.修改表結構,增加一個帶主鍵的欄位。
    • 3.修改表結構,給某一欄位增加主鍵屬性。image
  • 主鍵的用途:主鍵的主要用途是用來唯一標識每一條記錄,比如我們想將兩個表(學生表跟老師表)的多對多關係封裝到一個表中,這個抽取的映射欄位一般都是各自的主鍵。image;並且由於主鍵的數據的不可重覆性,也用來約束數據的唯一性。
  • 主鍵的刪除:
    alter table 表名 drop primary key;

 

唯一鍵:unique key

  • 唯一鍵的功能與主鍵有點類型,但不同的是主鍵只能有一個,唯一鍵可以有多個,而且唯一鍵的欄位的數據允許為空。
  • 唯一鍵可以約束欄位,使得欄位的數據不能重覆
  • 如果唯一鍵同時也有not null,並且表中沒有主鍵的話,在desc查看表結構中會顯示成主鍵
  • 如果唯一鍵也不允許為空,那麼功能與主鍵相同
  • 唯一鍵的定義方法可以參考主鍵的。
  • 唯一鍵的刪除:
    alter table 表名 drop index 唯一鍵名; -- 唯一鍵預設使用欄位名來定義名字

 

自增長:auto_increment

  • 自增長的功能是可以使某個欄位的數據隨著記錄的插入而進行增長(不給這個欄位插入數據的情況下)
  • 自增長的前提是這個欄位必須是一個“索引”,比如主鍵、唯一鍵
  • 自增長的前提這個欄位的數據類型是一個數值型的,(如果給了float,也不會增長成小數,而僅僅是整數)
  • 一個表只能有一個自增長。
  • 只有不給值,或者給null的情況下,才能正確自增長;如果某一次自增長失敗了,那麼下一次會從當前欄位的最大值開始繼續自增長。
  • 自增長的定義方法:image;當然也可以通過修改欄位的形式來給欄位定義not null屬性
  • 自增長的修改:
    • 修改增長速度:set auto_increment = 值;
    • 修改下次增長的值:alter table 表名 auto_increment = 值; 【修改的值只能變大,不能變小,因為可能導致數據重覆問題】
  • 自增長的查看:show vairable like "auto_increment%";
  • 自增長的刪除:利用alter來刪除,alter修改欄位屬性的時候如果不帶上原來的屬性就會被刪掉:

 

 

預設值:default

  • 預設值的功能是當我們不給一個欄位賦值的時候,使用預設值作為數據,比如不選擇性別的時候,預設使用“保密”;
  • 預設值的定義方式:image
  • image

 

 

欄位描述:comment

  • 欄位描述是用來描述欄位的,能在查看數據表創建語句的時候顯示出來(不會再select結果中顯示出來),可以幫助我們瞭解某一個欄位的意義。
  • 定義方式:image
  • image

 

 

 

 

補充:

  • 複合鍵:可以將多個欄位組成一個鍵,比如學生可以選多門課,但學生號跟課程號一起的時候應該是唯一的(不然一個學生重覆選了一門課?)
    • 定義方法(複合以主鍵為例):image
    • 數據約束(以上面的表為例):image

 

 



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、刪除重覆記錄 ①先查詢出重覆的數據,然後通過ID號批量刪除,ID號可以導出到Excel,在Excel中,整理好ID順序. select name from users group by name having count(1)>1;提取ID號 ...
  • 保護對象的屬性 如果有一個對象,當需要對其進行修改屬性時,有2鐘方法: 對象名.屬性名 = 數據 >直接修改 對象名.方法名() >間接修改 為了更好的保存屬性的安全,即不能隨意修改,一般的處理方式為: 將屬性定義為私有屬性 添加一個可以調用的方法,供調用 運行結果為: 修改代碼: 運行結果: 總結 ...
  • crontab是每個運維一線人員必須掌握的技術,熟練運用crontab可以自動幫助我們執行重覆性的工作,提高運維的工作效率。它就像一個鬧鐘,在特定的時間,準時響應並執行相應的任務。如果你的工作經常與Linux打交道,那麼你可以繼續往下看,瞭解crontab的一般性故障排查。 本次的故障發生在生產環境 ...
  • 基於公司git版本控制,搭建jenkins實現php集成部署 一.安裝jenkins相關依賴 二.jenkins配置和啟動 service jenkins start 輸入localhost:8080即可訪問。 三.插件安裝 系統管理-插件設置 安裝以下插件 Phing(php構建工具) Publi ...
  • 在阿裡雲找到主功能變數名稱 進入主功能變數名稱之後,右上角添加解析,添加子功能變數名稱, 記錄類型選擇cname,主機記錄填寫子功能變數名稱的名稱,記錄值為主功能變數名稱,至此阿裡雲已經配置好了。 進入伺服器nginx目錄下,進入備用的填寫nginx配置文件的地方, 新建配置文件,如 如果不存在test文件,則自動創建(這裡註意,要sud ...
  • Centos7 系統下搭建.NET Core2.0+Nginx+Supervisor+Mysql環境 ...
  • 1.ORACLE介紹 ORACLE資料庫系統是以分散式資料庫為核心的一組軟體產品,是客戶/伺服器(CLIENT/SERVER)或B/S 體繫結構的資料庫之一。 ORACLE資料庫是目前世界上使用最為廣泛的資料庫管理系統,作為一個通用的資料庫系統,它具有完整的數據管理功能。2.ORACLE資料庫具有的 ...
  • 1、數據備份:a、mdf是數據文件,資料庫系統的可實時操作/讀取的數據文件,也可作為物理備份文件使用。分離--附加;b、ldf 是日誌文件,用於存儲資料庫的邏輯日誌信息。c、bak是備份文件,是資料庫邏輯備份和增量備份的輸出格式。BAK文件還原的數據更加全面 備份--還原 2、資料庫自動定時備份 在 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...