主頁 > 資料庫 > 最全 SQL 欄位型別(4種)、屬性(6種)總結

最全 SQL 欄位型別(4種)、屬性(6種)總結

2021-07-31 09:10:48 資料庫

文章目錄

  • 欄位型別
    • 整數型別
    • 小數型別(2種)
    • 字串型別(5種)
    • 時間日期型別(5種)
  • 屬性
    • NULL屬性
    • Default屬性
    • 主鍵
    • 自增長屬性
    • 唯一鍵
    • comment屬性
  • 資料庫記錄長度

欄位型別

欄位型別:MySQL中用來規定實際存盤的資料格式

  • 欄位型別在定義表結構時設定
  • 設定好欄位型別后,插入資料時必須與欄位型別對應,否則資料錯誤
  • 欄位型別的作用就是強制規范錄入的資料格式
    • 規范資料的格式
    • 保證資料的有效性
  • MySQL有四大資料型別
    • 整數型別:只能存盤整數
    • 小數型別:可以存盤有效數值
    • 字串型別:存盤字串資料
    • 時間日期型別:存盤時間日期格式資料

整數型別

整數型別:有效的整數資料

  • MySQL中為了資料空間的有效使用,設定了五種整數型別
    • 迷你整型:tinyint,使用1個位元組存盤整數,最多存盤256個整數(-128~127)
    • 短整型:smallint,使用2個位元組存盤整數
    • 中整型:mediumint,使用3個位元組存盤整數
    • 標準整型:int,使用4個位元組存盤整數
    • 大整型:bigint,使用8個位元組存盤
  • 數值型存盤在MySQL中分為有符號(有負數)和無符號(純正數)需要unsigned 修飾整型

示例:設計一個表記錄個人資訊:年齡、頭發數量

# 年齡:沒有負數,正常年齡也不超過200歲,迷你整型無符號即可
# 頭發數量:沒有負數,大概在幾百萬根,所以標準整型無符號即可
create table t_7(
	age tinyint unsigned, # unsigned修飾整數,表示無符號(從0開始)
    haircount int unsigned
)charset utf8;

顯示寬度:int(L),整數在資料庫中顯示的符號(數字+符號)個數

  • 顯示寬度一般是型別能表示的最大值對應的數字個數(通過desc查看表欄位顯示)
  • 顯示寬度包含符號(如果允許為負數,-負號會增加一個寬度)
  • 顯示寬度可以主動控制:創建欄位時加括號確定
  • 顯示寬度不會影響型別能表示的最大數值
  • 可以通過zerofill讓不夠寬度的數值補充到對應寬度:在欄位型別后使用zerofill

小數型別(2種)

1、浮點型float / double,存盤不是特別精確的數值資料

  • 浮點數又稱之為精度資料,分為兩種
    • 單精度:float,使用4個位元組存盤,精度范圍為6-7位有效數字
    • 雙精度:double,使用8個位元組存盤,精度范圍為14-15位有效數字
  • 浮點數超過精度范圍會自動進行四舍五入
  • 精度可以指定整數和小數部分
    • 默認不指定,整數部分不超過最大值,小數部分保留2位
    • 可以指定:float/double(總長度,小數部分長度)
  • 可以使用科學計數法插入資料:AEB,A * 10 ^ B
  • 因為浮點數會自動四舍五入,所以不要使用浮點數來存盤對精度要求較高的數值

示例:記錄商品的價格

# 商品名字字串
# 商品價格一般都允許帶小數
create table t_11(
	goods_name varchar(20),
    goods_price float
)charset utf8;
insert into t_11 values('Nokia3310',199.99);
insert into t_11 values('Nokia6100',1999.9999);

2、定點型decimal,能夠保證精度的小數

  • 定點數的存盤模式不是固定長度,所以資料越大占用的存盤空間越長
  • 每9個數字使用4個位元組存盤
  • 定點型可以指定整數部分長度和小數部分長度
    • 默認不指定,10位有效整數,0位小數
    • 可以指定:decimal(有效數位,小數部分數位)
    • 有效數位不超過65個
  • 資料規范
    • 整數部分超出報錯
    • 小數部分超出四舍五入

示例:記錄個人資產情況:資產和負債

# 資產和負債應該都是精確的,小數部分可以到分
create table t_12(
    money decimal(14,2),
    bet decimal(10,2)
)charset utf8;

insert into t_12 values(1111111111.12,1111111.999);
insert into t_12 values(1111111111.12,99999999.999); # 錯誤:進位導致正數部分超過指定范圍

字串型別(5種)

1、定長型char(L),指定固定長度的存盤空間存盤字串

  • 定長是指定存盤長度
  • 定長的長度是字符而不是位元組
    • L的最大值是255
    • 實際存盤空間:L字符數 * 字符集對應位元組數
  • 定長里存盤的資料不能超過指定長度,但是可以小于指定長度
  • 字串資料使用單引號或者雙引號包裹
  • 定長的訪問效率較高,但是空間利用率較低

示例:記錄個人資訊:身份證資訊和手機號碼

# 身份證為固定長度18位(數字)
# 手機號碼是11位固定長度(數字)
create table t_13(
	id_number char(18),
    phone_number char(11)
)charset utf8;
insert into t_13 values('440111999912120304','13512345678');

2、變長型varchar(L),根據實際存盤的資料變化存盤空間

  • 變長型的存盤空間是由實際存盤資料決定的
  • 變長型的L也是指字符而不是位元組
    • L指定的是最大存盤的資料長度
    • L最大值理論是65535
    • 變長需要額外產生1-2個位元組,用來記錄實際資料的長度
      • 資料長度小于256個,多1個位元組
      • 資料長度大于256個,多2個位元組
    • 實際存盤空間:實際字符數 * 字符集對應位元組數 + 記錄長度
  • 變長資料不能超過定義的最大長度
  • 變長字串在讀取時需要進行長度計算,所以效率沒有定長字串高
  • 變長字串能夠更好的利用存盤空間

示例:記錄個人資訊:用戶名、密碼、姓名、身份證

# 用戶名不確定長度,最長不超過50個字符
# 密碼不確定長度,最長超過15個字符
# 姓名不確定長度,最長不超過10個字符
# 身份證固定長度,18個字符
create table t_14(
	username varchar(50),
    password varchar(15),
    name varchar(10),
    id_number char(18)
)charset utf8;

insert into t_14 values('username','password','name','444111999912121111');

3、文本字串text/blob,專門用來存盤較長的文本

  • 文本字串通常在超過255個字符時使用
  • 文本字串包含兩大類
    • text:普通字符
      • tinytext:迷你文本,不超過2 ^ 8 -1個字符
      • text:普通文本,不超過 2 ^ 16 - 1個字符
      • mediumtext:中型文本,不超過 2 ^ 24 - 1 個字符
      • longtext:長文本,不超過 2 ^ 32 - 1 個字符(4G)
    • blob:二進制字符(與text類似)
      • tinyblob
      • blob
      • mediumblob
      • longblob
  • 文本字串會自動根據文本長度選擇適合的具體型別
  • 一般在文本超過255個字符時,都會使用text(blob現在極少使用)

示例:記錄新聞資訊:標題、作者和內容

# 標題一般不會超過50個字符,varchar
# 作者一般不會超過10個字符:varchar
# 內容通常都很長,使用text
create table t_15(
	author varchar(10),
    title varchar(50),
    content text
)charset utf8;

insert into t_15 values('佚名','給聯合國的一封信','給聯合國的一封信...');

4、列舉型enum, 一種映射存盤方式,以較小的空間存盤較多的資料

  • 列舉是在定義時確定可能出現的可能,而后資料只能出現定義時其中的一種的資料型別
  • 列舉類似一種單選框
  • 列舉使用1-2個位元組存盤,最多可以設計65535個選項
  • 列舉實際存盤是使用數值,映射對應的元素資料,從1開始
  • 列舉語法:enum(元素1,元素2,...元素N)
  • 使用列舉的作用:
    • 規范資料模型
    • 優化存盤空間

示例:記錄人群型別:小朋友、少年、青年、中年、老年,每個人實際只屬于一種類別

# 要保證未來資料只能出現在某種可能中,所以要先列出來,可以使用enum
create table t_16(
	type enum('小朋友','少年','青年','中年','老年')
)charset utf8;

insert into t_16 values('少年');
insert into t_16 values('仙人');	# 不存在的資料不能插入

列舉定義原理:

列舉資料映射值
資料11
資料22
資料NN(小于65535)

資料存盤(讀取反過來):

<style>#mermaid-svg-pOdm8Tyl0MVp7hio .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-pOdm8Tyl0MVp7hio .label text{fill:#333}#mermaid-svg-pOdm8Tyl0MVp7hio .node rect,#mermaid-svg-pOdm8Tyl0MVp7hio .node circle,#mermaid-svg-pOdm8Tyl0MVp7hio .node ellipse,#mermaid-svg-pOdm8Tyl0MVp7hio .node polygon,#mermaid-svg-pOdm8Tyl0MVp7hio .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-pOdm8Tyl0MVp7hio .node .label{text-align:center;fill:#333}#mermaid-svg-pOdm8Tyl0MVp7hio .node.clickable{cursor:pointer}#mermaid-svg-pOdm8Tyl0MVp7hio .arrowheadPath{fill:#333}#mermaid-svg-pOdm8Tyl0MVp7hio .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-pOdm8Tyl0MVp7hio .flowchart-link{stroke:#333;fill:none}#mermaid-svg-pOdm8Tyl0MVp7hio .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-pOdm8Tyl0MVp7hio .edgeLabel rect{opacity:0.9}#mermaid-svg-pOdm8Tyl0MVp7hio .edgeLabel span{color:#333}#mermaid-svg-pOdm8Tyl0MVp7hio .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-pOdm8Tyl0MVp7hio .cluster text{fill:#333}#mermaid-svg-pOdm8Tyl0MVp7hio div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-pOdm8Tyl0MVp7hio .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-pOdm8Tyl0MVp7hio text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-pOdm8Tyl0MVp7hio .actor-line{stroke:grey}#mermaid-svg-pOdm8Tyl0MVp7hio .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-pOdm8Tyl0MVp7hio .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-pOdm8Tyl0MVp7hio #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-pOdm8Tyl0MVp7hio .sequenceNumber{fill:#fff}#mermaid-svg-pOdm8Tyl0MVp7hio #sequencenumber{fill:#333}#mermaid-svg-pOdm8Tyl0MVp7hio #crosshead path{fill:#333;stroke:#333}#mermaid-svg-pOdm8Tyl0MVp7hio .messageText{fill:#333;stroke:#333}#mermaid-svg-pOdm8Tyl0MVp7hio .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-pOdm8Tyl0MVp7hio .labelText,#mermaid-svg-pOdm8Tyl0MVp7hio .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-pOdm8Tyl0MVp7hio .loopText,#mermaid-svg-pOdm8Tyl0MVp7hio .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-pOdm8Tyl0MVp7hio .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-pOdm8Tyl0MVp7hio .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-pOdm8Tyl0MVp7hio .noteText,#mermaid-svg-pOdm8Tyl0MVp7hio .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-pOdm8Tyl0MVp7hio .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-pOdm8Tyl0MVp7hio .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-pOdm8Tyl0MVp7hio .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-pOdm8Tyl0MVp7hio .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pOdm8Tyl0MVp7hio .section{stroke:none;opacity:0.2}#mermaid-svg-pOdm8Tyl0MVp7hio .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-pOdm8Tyl0MVp7hio .section2{fill:#fff400}#mermaid-svg-pOdm8Tyl0MVp7hio .section1,#mermaid-svg-pOdm8Tyl0MVp7hio .section3{fill:#fff;opacity:0.2}#mermaid-svg-pOdm8Tyl0MVp7hio .sectionTitle0{fill:#333}#mermaid-svg-pOdm8Tyl0MVp7hio .sectionTitle1{fill:#333}#mermaid-svg-pOdm8Tyl0MVp7hio .sectionTitle2{fill:#333}#mermaid-svg-pOdm8Tyl0MVp7hio .sectionTitle3{fill:#333}#mermaid-svg-pOdm8Tyl0MVp7hio .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pOdm8Tyl0MVp7hio .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-pOdm8Tyl0MVp7hio .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pOdm8Tyl0MVp7hio .grid path{stroke-width:0}#mermaid-svg-pOdm8Tyl0MVp7hio .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-pOdm8Tyl0MVp7hio .task{stroke-width:2}#mermaid-svg-pOdm8Tyl0MVp7hio .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pOdm8Tyl0MVp7hio .taskText:not([font-size]){font-size:11px}#mermaid-svg-pOdm8Tyl0MVp7hio .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pOdm8Tyl0MVp7hio .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-pOdm8Tyl0MVp7hio .task.clickable{cursor:pointer}#mermaid-svg-pOdm8Tyl0MVp7hio .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-pOdm8Tyl0MVp7hio .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-pOdm8Tyl0MVp7hio .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-pOdm8Tyl0MVp7hio .taskText0,#mermaid-svg-pOdm8Tyl0MVp7hio .taskText1,#mermaid-svg-pOdm8Tyl0MVp7hio .taskText2,#mermaid-svg-pOdm8Tyl0MVp7hio .taskText3{fill:#fff}#mermaid-svg-pOdm8Tyl0MVp7hio .task0,#mermaid-svg-pOdm8Tyl0MVp7hio .task1,#mermaid-svg-pOdm8Tyl0MVp7hio .task2,#mermaid-svg-pOdm8Tyl0MVp7hio .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-pOdm8Tyl0MVp7hio .taskTextOutside0,#mermaid-svg-pOdm8Tyl0MVp7hio .taskTextOutside2{fill:#000}#mermaid-svg-pOdm8Tyl0MVp7hio .taskTextOutside1,#mermaid-svg-pOdm8Tyl0MVp7hio .taskTextOutside3{fill:#000}#mermaid-svg-pOdm8Tyl0MVp7hio .active0,#mermaid-svg-pOdm8Tyl0MVp7hio .active1,#mermaid-svg-pOdm8Tyl0MVp7hio .active2,#mermaid-svg-pOdm8Tyl0MVp7hio .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-pOdm8Tyl0MVp7hio .activeText0,#mermaid-svg-pOdm8Tyl0MVp7hio .activeText1,#mermaid-svg-pOdm8Tyl0MVp7hio .activeText2,#mermaid-svg-pOdm8Tyl0MVp7hio .activeText3{fill:#000 !important}#mermaid-svg-pOdm8Tyl0MVp7hio .done0,#mermaid-svg-pOdm8Tyl0MVp7hio .done1,#mermaid-svg-pOdm8Tyl0MVp7hio .done2,#mermaid-svg-pOdm8Tyl0MVp7hio .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-pOdm8Tyl0MVp7hio .doneText0,#mermaid-svg-pOdm8Tyl0MVp7hio .doneText1,#mermaid-svg-pOdm8Tyl0MVp7hio .doneText2,#mermaid-svg-pOdm8Tyl0MVp7hio .doneText3{fill:#000 !important}#mermaid-svg-pOdm8Tyl0MVp7hio .crit0,#mermaid-svg-pOdm8Tyl0MVp7hio .crit1,#mermaid-svg-pOdm8Tyl0MVp7hio .crit2,#mermaid-svg-pOdm8Tyl0MVp7hio .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-pOdm8Tyl0MVp7hio .activeCrit0,#mermaid-svg-pOdm8Tyl0MVp7hio .activeCrit1,#mermaid-svg-pOdm8Tyl0MVp7hio .activeCrit2,#mermaid-svg-pOdm8Tyl0MVp7hio .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-pOdm8Tyl0MVp7hio .doneCrit0,#mermaid-svg-pOdm8Tyl0MVp7hio .doneCrit1,#mermaid-svg-pOdm8Tyl0MVp7hio .doneCrit2,#mermaid-svg-pOdm8Tyl0MVp7hio .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-pOdm8Tyl0MVp7hio .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-pOdm8Tyl0MVp7hio .milestoneText{font-style:italic}#mermaid-svg-pOdm8Tyl0MVp7hio .doneCritText0,#mermaid-svg-pOdm8Tyl0MVp7hio .doneCritText1,#mermaid-svg-pOdm8Tyl0MVp7hio .doneCritText2,#mermaid-svg-pOdm8Tyl0MVp7hio .doneCritText3{fill:#000 !important}#mermaid-svg-pOdm8Tyl0MVp7hio .activeCritText0,#mermaid-svg-pOdm8Tyl0MVp7hio .activeCritText1,#mermaid-svg-pOdm8Tyl0MVp7hio .activeCritText2,#mermaid-svg-pOdm8Tyl0MVp7hio .activeCritText3{fill:#000 !important}#mermaid-svg-pOdm8Tyl0MVp7hio .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pOdm8Tyl0MVp7hio g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-pOdm8Tyl0MVp7hio g.classGroup text .title{font-weight:bolder}#mermaid-svg-pOdm8Tyl0MVp7hio g.clickable{cursor:pointer}#mermaid-svg-pOdm8Tyl0MVp7hio g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-pOdm8Tyl0MVp7hio g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-pOdm8Tyl0MVp7hio .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-pOdm8Tyl0MVp7hio .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-pOdm8Tyl0MVp7hio .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-pOdm8Tyl0MVp7hio .dashed-line{stroke-dasharray:3}#mermaid-svg-pOdm8Tyl0MVp7hio #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-pOdm8Tyl0MVp7hio #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-pOdm8Tyl0MVp7hio #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-pOdm8Tyl0MVp7hio #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-pOdm8Tyl0MVp7hio #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-pOdm8Tyl0MVp7hio #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-pOdm8Tyl0MVp7hio #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-pOdm8Tyl0MVp7hio #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-pOdm8Tyl0MVp7hio .commit-id,#mermaid-svg-pOdm8Tyl0MVp7hio .commit-msg,#mermaid-svg-pOdm8Tyl0MVp7hio .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pOdm8Tyl0MVp7hio .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pOdm8Tyl0MVp7hio .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pOdm8Tyl0MVp7hio g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pOdm8Tyl0MVp7hio g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-pOdm8Tyl0MVp7hio g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-pOdm8Tyl0MVp7hio g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-pOdm8Tyl0MVp7hio g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-pOdm8Tyl0MVp7hio g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-pOdm8Tyl0MVp7hio .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-pOdm8Tyl0MVp7hio .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-pOdm8Tyl0MVp7hio .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-pOdm8Tyl0MVp7hio .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-pOdm8Tyl0MVp7hio .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-pOdm8Tyl0MVp7hio .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-pOdm8Tyl0MVp7hio .edgeLabel text{fill:#333}#mermaid-svg-pOdm8Tyl0MVp7hio .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-pOdm8Tyl0MVp7hio .node circle.state-start{fill:black;stroke:black}#mermaid-svg-pOdm8Tyl0MVp7hio .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-pOdm8Tyl0MVp7hio #statediagram-barbEnd{fill:#9370db}#mermaid-svg-pOdm8Tyl0MVp7hio .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-pOdm8Tyl0MVp7hio .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-pOdm8Tyl0MVp7hio .statediagram-state .divider{stroke:#9370db}#mermaid-svg-pOdm8Tyl0MVp7hio .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-pOdm8Tyl0MVp7hio .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-pOdm8Tyl0MVp7hio .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-pOdm8Tyl0MVp7hio .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-pOdm8Tyl0MVp7hio .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-pOdm8Tyl0MVp7hio .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-pOdm8Tyl0MVp7hio .note-edge{stroke-dasharray:5}#mermaid-svg-pOdm8Tyl0MVp7hio .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-pOdm8Tyl0MVp7hio .error-icon{fill:#522}#mermaid-svg-pOdm8Tyl0MVp7hio .error-text{fill:#522;stroke:#522}#mermaid-svg-pOdm8Tyl0MVp7hio .edge-thickness-normal{stroke-width:2px}#mermaid-svg-pOdm8Tyl0MVp7hio .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-pOdm8Tyl0MVp7hio .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-pOdm8Tyl0MVp7hio .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-pOdm8Tyl0MVp7hio .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-pOdm8Tyl0MVp7hio .marker{fill:#333}#mermaid-svg-pOdm8Tyl0MVp7hio .marker.cross{stroke:#333} :root { --mermaid-font-family: "trebuchet ms", verdana, arial;}</style> <style>#mermaid-svg-pOdm8Tyl0MVp7hio { color: rgba(0, 0, 0, 0.75); font: ; }</style>
指令開始
插入資料
讀取映射關系
元素==數值
數值==數值
數值存盤到欄位
結束

5、集合型set,一種映射存盤方式,以較小的空間存盤較多的資料

  • 集合是在定義時確定可能出現的元素進行窮舉,而后資料只能出現定義時其中的元素(可以是多個
  • 集合類似一種多選框
  • 集合使用1-8個位元組存盤資料,最多可以設計64個元素
  • 集合實際存盤是使用數值(二進制位),映射對應的元素資料,每個元素對應一個位元位
    • 資料存在:對應位為 1
    • 資料不存在:對應位為 0
  • 集合語法:set(元素1,元素2,...元素N)
  • 使用集合的作用:
    • 規范資料模型
    • 優化存盤空間

示例:記錄個人的球類愛好,有籃球、足球、羽毛球、網球、乒乓球、排球、臺球、冰球

# 愛好可以是多種,并非固定的,但是只能從規定的型別中選擇
create table t_17(
	hobby set('足球','籃球','羽毛球','網球','乒乓球','排球','臺球','冰球')
)charset utf8;

insert into t_17 values('足球');
insert into t_17 values('冰球,臺球,籃球');

集合定義原理:

集合資料映射位
資料100000001
資料200000010
資料810000000

資料存盤(讀取反過來):

<style>#mermaid-svg-B9LsSxQjVZngFetJ .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-B9LsSxQjVZngFetJ .label text{fill:#333}#mermaid-svg-B9LsSxQjVZngFetJ .node rect,#mermaid-svg-B9LsSxQjVZngFetJ .node circle,#mermaid-svg-B9LsSxQjVZngFetJ .node ellipse,#mermaid-svg-B9LsSxQjVZngFetJ .node polygon,#mermaid-svg-B9LsSxQjVZngFetJ .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-B9LsSxQjVZngFetJ .node .label{text-align:center;fill:#333}#mermaid-svg-B9LsSxQjVZngFetJ .node.clickable{cursor:pointer}#mermaid-svg-B9LsSxQjVZngFetJ .arrowheadPath{fill:#333}#mermaid-svg-B9LsSxQjVZngFetJ .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-B9LsSxQjVZngFetJ .flowchart-link{stroke:#333;fill:none}#mermaid-svg-B9LsSxQjVZngFetJ .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-B9LsSxQjVZngFetJ .edgeLabel rect{opacity:0.9}#mermaid-svg-B9LsSxQjVZngFetJ .edgeLabel span{color:#333}#mermaid-svg-B9LsSxQjVZngFetJ .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-B9LsSxQjVZngFetJ .cluster text{fill:#333}#mermaid-svg-B9LsSxQjVZngFetJ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-B9LsSxQjVZngFetJ .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-B9LsSxQjVZngFetJ text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-B9LsSxQjVZngFetJ .actor-line{stroke:grey}#mermaid-svg-B9LsSxQjVZngFetJ .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-B9LsSxQjVZngFetJ .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-B9LsSxQjVZngFetJ #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-B9LsSxQjVZngFetJ .sequenceNumber{fill:#fff}#mermaid-svg-B9LsSxQjVZngFetJ #sequencenumber{fill:#333}#mermaid-svg-B9LsSxQjVZngFetJ #crosshead path{fill:#333;stroke:#333}#mermaid-svg-B9LsSxQjVZngFetJ .messageText{fill:#333;stroke:#333}#mermaid-svg-B9LsSxQjVZngFetJ .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-B9LsSxQjVZngFetJ .labelText,#mermaid-svg-B9LsSxQjVZngFetJ .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-B9LsSxQjVZngFetJ .loopText,#mermaid-svg-B9LsSxQjVZngFetJ .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-B9LsSxQjVZngFetJ .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-B9LsSxQjVZngFetJ .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-B9LsSxQjVZngFetJ .noteText,#mermaid-svg-B9LsSxQjVZngFetJ .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-B9LsSxQjVZngFetJ .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-B9LsSxQjVZngFetJ .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-B9LsSxQjVZngFetJ .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-B9LsSxQjVZngFetJ .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B9LsSxQjVZngFetJ .section{stroke:none;opacity:0.2}#mermaid-svg-B9LsSxQjVZngFetJ .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-B9LsSxQjVZngFetJ .section2{fill:#fff400}#mermaid-svg-B9LsSxQjVZngFetJ .section1,#mermaid-svg-B9LsSxQjVZngFetJ .section3{fill:#fff;opacity:0.2}#mermaid-svg-B9LsSxQjVZngFetJ .sectionTitle0{fill:#333}#mermaid-svg-B9LsSxQjVZngFetJ .sectionTitle1{fill:#333}#mermaid-svg-B9LsSxQjVZngFetJ .sectionTitle2{fill:#333}#mermaid-svg-B9LsSxQjVZngFetJ .sectionTitle3{fill:#333}#mermaid-svg-B9LsSxQjVZngFetJ .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B9LsSxQjVZngFetJ .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-B9LsSxQjVZngFetJ .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B9LsSxQjVZngFetJ .grid path{stroke-width:0}#mermaid-svg-B9LsSxQjVZngFetJ .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-B9LsSxQjVZngFetJ .task{stroke-width:2}#mermaid-svg-B9LsSxQjVZngFetJ .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B9LsSxQjVZngFetJ .taskText:not([font-size]){font-size:11px}#mermaid-svg-B9LsSxQjVZngFetJ .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B9LsSxQjVZngFetJ .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-B9LsSxQjVZngFetJ .task.clickable{cursor:pointer}#mermaid-svg-B9LsSxQjVZngFetJ .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-B9LsSxQjVZngFetJ .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-B9LsSxQjVZngFetJ .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-B9LsSxQjVZngFetJ .taskText0,#mermaid-svg-B9LsSxQjVZngFetJ .taskText1,#mermaid-svg-B9LsSxQjVZngFetJ .taskText2,#mermaid-svg-B9LsSxQjVZngFetJ .taskText3{fill:#fff}#mermaid-svg-B9LsSxQjVZngFetJ .task0,#mermaid-svg-B9LsSxQjVZngFetJ .task1,#mermaid-svg-B9LsSxQjVZngFetJ .task2,#mermaid-svg-B9LsSxQjVZngFetJ .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-B9LsSxQjVZngFetJ .taskTextOutside0,#mermaid-svg-B9LsSxQjVZngFetJ .taskTextOutside2{fill:#000}#mermaid-svg-B9LsSxQjVZngFetJ .taskTextOutside1,#mermaid-svg-B9LsSxQjVZngFetJ .taskTextOutside3{fill:#000}#mermaid-svg-B9LsSxQjVZngFetJ .active0,#mermaid-svg-B9LsSxQjVZngFetJ .active1,#mermaid-svg-B9LsSxQjVZngFetJ .active2,#mermaid-svg-B9LsSxQjVZngFetJ .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-B9LsSxQjVZngFetJ .activeText0,#mermaid-svg-B9LsSxQjVZngFetJ .activeText1,#mermaid-svg-B9LsSxQjVZngFetJ .activeText2,#mermaid-svg-B9LsSxQjVZngFetJ .activeText3{fill:#000 !important}#mermaid-svg-B9LsSxQjVZngFetJ .done0,#mermaid-svg-B9LsSxQjVZngFetJ .done1,#mermaid-svg-B9LsSxQjVZngFetJ .done2,#mermaid-svg-B9LsSxQjVZngFetJ .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-B9LsSxQjVZngFetJ .doneText0,#mermaid-svg-B9LsSxQjVZngFetJ .doneText1,#mermaid-svg-B9LsSxQjVZngFetJ .doneText2,#mermaid-svg-B9LsSxQjVZngFetJ .doneText3{fill:#000 !important}#mermaid-svg-B9LsSxQjVZngFetJ .crit0,#mermaid-svg-B9LsSxQjVZngFetJ .crit1,#mermaid-svg-B9LsSxQjVZngFetJ .crit2,#mermaid-svg-B9LsSxQjVZngFetJ .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-B9LsSxQjVZngFetJ .activeCrit0,#mermaid-svg-B9LsSxQjVZngFetJ .activeCrit1,#mermaid-svg-B9LsSxQjVZngFetJ .activeCrit2,#mermaid-svg-B9LsSxQjVZngFetJ .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-B9LsSxQjVZngFetJ .doneCrit0,#mermaid-svg-B9LsSxQjVZngFetJ .doneCrit1,#mermaid-svg-B9LsSxQjVZngFetJ .doneCrit2,#mermaid-svg-B9LsSxQjVZngFetJ .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-B9LsSxQjVZngFetJ .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-B9LsSxQjVZngFetJ .milestoneText{font-style:italic}#mermaid-svg-B9LsSxQjVZngFetJ .doneCritText0,#mermaid-svg-B9LsSxQjVZngFetJ .doneCritText1,#mermaid-svg-B9LsSxQjVZngFetJ .doneCritText2,#mermaid-svg-B9LsSxQjVZngFetJ .doneCritText3{fill:#000 !important}#mermaid-svg-B9LsSxQjVZngFetJ .activeCritText0,#mermaid-svg-B9LsSxQjVZngFetJ .activeCritText1,#mermaid-svg-B9LsSxQjVZngFetJ .activeCritText2,#mermaid-svg-B9LsSxQjVZngFetJ .activeCritText3{fill:#000 !important}#mermaid-svg-B9LsSxQjVZngFetJ .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B9LsSxQjVZngFetJ g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-B9LsSxQjVZngFetJ g.classGroup text .title{font-weight:bolder}#mermaid-svg-B9LsSxQjVZngFetJ g.clickable{cursor:pointer}#mermaid-svg-B9LsSxQjVZngFetJ g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-B9LsSxQjVZngFetJ g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-B9LsSxQjVZngFetJ .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-B9LsSxQjVZngFetJ .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-B9LsSxQjVZngFetJ .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-B9LsSxQjVZngFetJ .dashed-line{stroke-dasharray:3}#mermaid-svg-B9LsSxQjVZngFetJ #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B9LsSxQjVZngFetJ #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B9LsSxQjVZngFetJ #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-B9LsSxQjVZngFetJ #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-B9LsSxQjVZngFetJ #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B9LsSxQjVZngFetJ #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B9LsSxQjVZngFetJ #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B9LsSxQjVZngFetJ #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-B9LsSxQjVZngFetJ .commit-id,#mermaid-svg-B9LsSxQjVZngFetJ .commit-msg,#mermaid-svg-B9LsSxQjVZngFetJ .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B9LsSxQjVZngFetJ .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B9LsSxQjVZngFetJ .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B9LsSxQjVZngFetJ g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B9LsSxQjVZngFetJ g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-B9LsSxQjVZngFetJ g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-B9LsSxQjVZngFetJ g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-B9LsSxQjVZngFetJ g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-B9LsSxQjVZngFetJ g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-B9LsSxQjVZngFetJ .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-B9LsSxQjVZngFetJ .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-B9LsSxQjVZngFetJ .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-B9LsSxQjVZngFetJ .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-B9LsSxQjVZngFetJ .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-B9LsSxQjVZngFetJ .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-B9LsSxQjVZngFetJ .edgeLabel text{fill:#333}#mermaid-svg-B9LsSxQjVZngFetJ .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-B9LsSxQjVZngFetJ .node circle.state-start{fill:black;stroke:black}#mermaid-svg-B9LsSxQjVZngFetJ .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-B9LsSxQjVZngFetJ #statediagram-barbEnd{fill:#9370db}#mermaid-svg-B9LsSxQjVZngFetJ .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-B9LsSxQjVZngFetJ .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-B9LsSxQjVZngFetJ .statediagram-state .divider{stroke:#9370db}#mermaid-svg-B9LsSxQjVZngFetJ .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-B9LsSxQjVZngFetJ .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-B9LsSxQjVZngFetJ .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-B9LsSxQjVZngFetJ .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-B9LsSxQjVZngFetJ .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-B9LsSxQjVZngFetJ .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-B9LsSxQjVZngFetJ .note-edge{stroke-dasharray:5}#mermaid-svg-B9LsSxQjVZngFetJ .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-B9LsSxQjVZngFetJ .error-icon{fill:#522}#mermaid-svg-B9LsSxQjVZngFetJ .error-text{fill:#522;stroke:#522}#mermaid-svg-B9LsSxQjVZngFetJ .edge-thickness-normal{stroke-width:2px}#mermaid-svg-B9LsSxQjVZngFetJ .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-B9LsSxQjVZngFetJ .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-B9LsSxQjVZngFetJ .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-B9LsSxQjVZngFetJ .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-B9LsSxQjVZngFetJ .marker{fill:#333}#mermaid-svg-B9LsSxQjVZngFetJ .marker.cross{stroke:#333} :root { --mermaid-font-family: "trebuchet ms", verdana, arial;}</style> <style>#mermaid-svg-B9LsSxQjVZngFetJ { color: rgba(0, 0, 0, 0.75); font: ; }</style>
指令開始
插入資料
讀取映射關系
元素選中==位值為1
元素未選中==位值為0
轉化成十進制存盤
結束

時間日期型別(5種)

1、年year,MySQL中用來存盤年份的型別

  • MySQL中使用1個位元組存盤年份
  • year能夠表示的范圍是1901-2155年(256年)
    • year的特殊值是:0000
  • year允許用戶使用兩種方式設計(效果一樣)
    • year
    • year(4)
  • 因為year欄位表示的范圍有限,所以通常會使用字串來存盤(犧牲空間換安全)

示例:記錄個人的出生年份

create table t_18(
	y1 year,
    y2 year(4)
)charset utf8;
insert into t_18 values(1901,2155);

2、時間戳timestamp,基于格林威治時間的時間記錄

  • MySQL中時間戳表現形式不是秒數,而是年月日時分秒格式
    • YYYY-MM-DD HH:II::SS
    • YYYYMMDDHHIISS
  • timestamp使用4個位元組存盤
    • 表示范圍是 1971年1月1日0時0分0秒-2155年12月31日23是59分59秒
    • timestamp可以使用 0000-00-00 00:00:00
  • 所對應的記錄不論哪個欄位被更新,該欄位都會更新到當前時間
  • 但在MySQL8中需要主動使用on update current_timestamp才會自動更新

示例:記錄商品庫存的最后更新時間

create table t_19(
	goods_name varchar(10),
    goods_inventory int unsigned,
    change_time timestamp
)charset utf8;

insert into t_19 values('Nokia3110',100,'1971-01-01 00:00:00');
insert into t_19 values('Nokia7100',100,'19710101000000');

注意:在MySQL8以后,取消了timestamp的默認自動更新,如果需要使用,需要額外使用屬性: on update current_timestamp

alter table t_19 add c_time timestamp on update current_timestamp;

update t_19 set goods_inventory = 80;

3、日期date,用來記錄年月日資訊

  • 使用3個位元組存盤資料
  • 存盤日期的格式為:YYYY-MM-DD
  • 存盤的范圍跨度很大,存盤區間是1000 - 9999年:1001-01-01~9999-12-31

示例:記錄個人生日

create table t_20(
	name varchar(10),
    birth date
)charset utf8;

insert into t_20 values('Jim','2000-12-12');
insert into t_20 values('Tom','10011212');

4、日期時間datetime,用來綜合存盤日期和時間

  • 使用8個位元組存盤資料
  • 存盤格式為:YYYY-MM-DD HH:II:SS
  • 存盤區間為:1000-01-01 00:00:00 到9999-12-31 23:59:59

示例:記錄個人具體的出生時間

create table t_21(
	name varchar(10),
    birth datetime
)charset utf8;

insert into t_21 values('Jim','2000-12-12 12:12:12');
insert into t_21 values('Tom','10011212182323');

5、時間time,用來記錄時間或者時間段

  • 使用3個位元組存盤資料
  • 資料范圍是 -838:59:59 - 838:59:59
  • 資料插入的格式分為兩種
    • 時間格式:[H]HH:II:SS([ ]表示可以沒有)
    • 時間段格式:D HH:II:SS(D表示天)
    • time型別通常被用來做時間段計算:如多少天后的什么時間點(可以理解為過期檢查)

示例:記錄用戶登錄的具體時間

# 具體登錄時間可以使用時間戳(包含年月日時分秒資訊)
# 也可以時間datetime格式,或者date+time雙欄位格式(具體后面學習范式時會知道該怎么用)
create table t_22(
	login_time1 int unsigned,
    login_time2 datetime,
    login_date date,
    login_time3 time
)charset utf8;

insert into t_22 values(12345678,'2000-12-12 12:12:12','2000-12-12','12:12:12');
insert into t_22 values(1234567,'2000-12-12 12:12:12','2000-12-12','3 12:12:12');

屬性

屬性:建立在欄位型別之后,對欄位除型別之外的其他約束

  • 屬性是在定義表欄位的時候針對每個欄位進行屬性設定,是MySQL用來增加欄位規范和約束
  • 設定好的屬性可以通過查看表欄位desc進行查看
  • 資料在進行增刪改(寫)操作時需要在滿足欄位型別屬性的要求
  • 用好屬性能夠提升資料的有效性,方便未來進行資料操作和資料分析(資料真實性和有效性)

查看表屬性:desc 表名;

desc t_1;
# Field:欄位名字
# Type:資料型別
# Null:是否為空(屬性)
# Key:索引型別(屬性)
# Default:默認值(屬性)
# Extra:額外屬性

NULL屬性

NULL:資料是否允許為空

  • Null/Not Null屬性 是用來限定資料是否為Null值

  • 默認情況下資料是允許為Null的,不為空設計:Not Null

  • 一般有效的資料都必須設定為Not Null來保證資料的有效性,資料為空一般不具備運算和分析價值

示例:用戶資訊表:用戶名、密碼、姓名、年齡、注冊時間

create table t_23(
	username varchar(50) not null,
    password char(32) not null,
    name varchar(20),
    age tinyint unsigned,
    reg_time int unsigned not null
)charset utf8;

Default屬性

默認值default,在設計表欄位的時候給定默認資料,在后續欄位操作(資料新增)的時候系統沒有檢測到欄位有資料的時候自動使用的值

  • 默認值在欄位設定的時候使用(默認值需要滿足資料型別規范)
  • 默認值通常設計的是欄位容易出現的資料
    • 一般欄位的默認值 默認是Null
  • 默認值觸發
    • 在系統進行資料插入時自動檢測觸發
    • 主動使用default關鍵字觸發默認值

示例:用戶開戶:銀行卡賬號、身份證號碼、姓名、賬戶余額

create table t_24(
	account varchar(19) not null,
    id_card char(18) not null,
    name varchar(20) not null,
    money decimal(16,2) default 0.00 not null
)charset utf8;

主鍵

主鍵primary key,用來保證整張表中對應的欄位永遠不會出現重復資料(唯一性

  • 主鍵在一張表中只能有一個
  • 主鍵的另外一個特性是能夠提升主鍵欄位作為查詢條件的效率(索引)
  • 主鍵不能為空:Not Null(默認)
  • 邏輯主鍵:資料沒有具體業務意義,純粹是一種數值資料
    • 邏輯主鍵通常是整數:int
    • 邏輯主鍵目的是方便檢索和資料安全(不暴露資料真實資訊)
  • 復合主鍵:多個欄位共同組成不能重復的資料
    • primary key(欄位1,欄位2,…欄位N)
    • 聯合主鍵使用不多,一般也不會超過2個欄位

示例:銀行賬戶資訊:賬戶、姓名、余額

# 銀行賬戶具有唯一性,不能重復,也不允許為空
create table t_25(
    account varchar(17) primary key,
    name varchar(20) not null,
    money decimal(16,2) not null default 0.00
)charset utf8;

# 復合主鍵
create table t_26(
	account varchar(17),
    name varchar(20),
    money decimal(16,2) not null default 0.00,
    primary key(account,name)
)charset utf8;

# 一般使用邏輯主鍵
create table t_27(
	id int unsigned primary key,
    account varchar(17) not null,
    name varchar(20) not null,
    money decimal(16,2) not null default 0.00
)charset utf8;

主鍵管理:在創建表并且已經有資料后的維護

  • 洗掉主鍵
  • 追加主鍵
  • 修改主鍵(先洗掉后新增)

1、洗掉主鍵:主鍵只有一個,所以洗掉語法也比較特殊

alter table t_26 drop primary key;

2、后期新增主鍵:如果是針對業務主鍵需要保證欄位資料沒有Null資料且沒有資料重復(一般主鍵都會在表創建時維護好)

alter table t_26 add primary key(account,name);

自增長屬性

自增長auto_increment,被修飾的欄位在新增時,自動增長資料

  • 自增長只能是整數型別,而且對應的欄位必須是一個索引(通常邏輯主鍵)
  • 一張表只能有一個自動增長
  • 自增長一般是配合邏輯主鍵實作自動增長
    • 整型欄位
    • 存在索引(主鍵)
  • 自增長資料可以理解為一種默認值,如果主動給值,那么自動增長不會觸發
  • 自增長由兩個變數控制
    • 初始值:auto_increment_offset,默認是1
    • 步長:auto_increment_increment,默認值也是1
    • 查看自增長控制:show variables like 'auto_increment%';

示例:記錄學生資訊:學號和姓名

# 學生資訊:學號自動增長
create table t_28(
    id int primary key auto_increment,
	stu_no int(8) zerofill not null,
    stu_name varchar(20) not null
)charset utf8;

自增長管理:在某些特殊使用下,需要自增長按照需求實作

  • 修改表中自增長的值:讓下次自增長按照指定值開始
  • 修改自增長控制:調整自增長的變化

1、修改表中自增長的值:跳過一些值,直接從下次開始按照新的目標值出現

alter table t_28 auto_increment = 50;

注意:奇數會保留原值,偶數會自動加1(可能出現的情況)

2、修改自增長控制:步長和起始值(修改針對的是整個資料庫,而非單張表)

set auto_increment_increment = 2;	# 當前用戶當前連接有效(區域)
set @auto_increment_increment = 2;	# 所有用戶一直有效(全域)

唯一鍵

唯一鍵unique key,用來維護資料的唯一性

  • 一個表中可以有多個唯一鍵
  • 唯一鍵與主鍵的區別在于 唯一鍵允許資料為Null(而且Null的數量不限)
  • 唯一鍵與主鍵一樣,可以提升欄位資料當做條件查詢的效率(索引)
  • 復合唯一鍵:多個欄位共同組成
    • unique key(欄位1,欄位2,…欄位N)
    • 一般不會出現,最多2個欄位組成

示例:學生成績表:一個學生只能有一個學科成績,但是可以有多個學科

# 學號和學科編號共同組成唯一
create table t_30(
	id int primary key auto_increment,
    stu_name varchar(20) not null,
    course varchar(20) not null,
    score decimal(5,2),
    unique key(stu_name,course)
)charset utf8;

insert into t_30 values(null,'Jim','Math',50);
insert into t_30 values(null,'Jim','English',80);

唯一鍵管理:在表創建后對唯一鍵的管理

  • 洗掉唯一鍵相對麻煩,一張表中不止一個唯一鍵

  • 新增唯一鍵要保證欄位里的資料具有唯一性

  • 洗掉唯一鍵:alter table 表名 drop index 唯一鍵名字;

  • 新增唯一鍵: alter table 表名 add unique key(欄位串列);

1、洗掉表中已有的唯一鍵

alter table t_30 drop index stu_name;

2、追加唯一鍵

alter table t_30 add unique key stu_course (stu_name,course);

comment屬性

描述comment,是用文字描述欄位的作用的

  • comment代表的內容是對欄位的描述
    • 方便以后自己了解欄位的作用
    • 方便團隊了解欄位的作用
  • 描述如果涉及到字符集(中文)一定要在創建表之前 設定好客戶端字符集(否則會出現描述亂碼)

示例:學生成績表

# 學生成績表中通常是存盤學生學號
# 學科通常也是學科代碼
create table t_31(
	id int primary key auto_increment,
    stu_no varchar(10) not null comment '學號',
    course_no varchar(10) not null comment '課程號',
    score decimal(5,2) comment '考試成績',
    unique key stu_course (stu_no,course_no) comment '學號和課程號組成唯一鍵'
)charset utf8;

資料庫記錄長度

資料庫記錄長度:MySQL中規定一條記錄所占用的存盤長度最長不超過65535個位元組

  • 記錄長度為表中所有欄位預計占用的長度之和
  • 所有欄位只有允許Null存在,系統就會預留一個位元組存盤Null(多個Null也只要一個就好)
  • 因為MySQL記錄長度的存在,varchar永遠達不到理論長度
    • GBK存盤:65535(字符) * 2 + 2 = 131072(位元組)
    • UTF8存盤:65535(字符) * 3 + 2 = 196607(位元組)
  • 一般資料長度超過255個字符都會使用 text/blob 進行存盤(資料存盤不占用記錄長度)

1、GBK表能存盤的最大varchar字串長度

create table t_32(
	content varchar(65535)
)charset gbk;	# 錯誤

create table t_32(
	content varchar(32767)
)charset gbk;	# 錯誤

create table t_32(
	content varchar(32766)
)charset gbk;	

2、UTF8表能存盤的最大varchar字串長度

create table t_33(
	content varchar(65535)
)charset utf8;	# 錯誤

create table t_33(
	content varchar(21844)
)charset utf8;

3、Null也要占用一個位元組

create table t_34(
    id tinyint,
	content varchar(21844)
)charset utf8;	# 錯誤

create table t_34(
    id tinyint not null,
	content varchar(21844) not null
)charset utf8;

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/291108.html

標籤:其他

上一篇:MacBook解壓安裝MongoDB

下一篇:Redis高可用架構設計以及常見問題分析

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more