tft每日頭條

 > 科技

 > mysql日期和時間類型的用法

mysql日期和時間類型的用法

科技 更新时间:2024-12-03 01:48:57
目錄
  • 列類型(字段類型)
  • 無符号标識設定
  • 顯示長度
  • 小數類型
  • 浮點型
  • Float
  • Double
  • 定點數
  • Decimal
  • 時間日期類型
  • Mysql記錄長度
  • 字符串型
  • Text
  • enum
  • Set
  • 列屬性
  • Null屬性
  • 列描述
  • 主鍵
  • 随表創建
  • 表後增加
  • 查看主鍵
  • 删除主鍵
  • 複合主鍵
  • 主鍵約束
  • 自動增長
  • 修改自動增長
  • 删除自動增長
  • 唯一鍵
  • 創建唯一鍵
  • 查看唯一鍵
  • 删除唯一鍵
  • 複合唯一鍵
  • 表關系
  • 一對一
  • 一對多
  • 多對多
列類型(字段類型)整數類型Tinyint

迷你整形,系統采用一個字節來保存的整形:一個字節 = 8位,最大能表示的數值是0-255

Smallint

小整形,系統采用兩個字節來保存的整形:能表示0-65535之間

Mediumint

中整形,采用三個字節來保存數據。

Int

整形(标準整形),采用四個字節來保存數據。

Bigint

大整形,采用八個字節來保存數據。

1、 創建數據表

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)1

2、 插入合理數據

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)2

3、 插入錯誤數據(超出對應的數據範圍)

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)3

4、 錯誤原因:并不是說tinyint沒有這麼大的空間,而是因為mysql默認的為整形增加負數。

實際表示的區間為-128,127

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)4

實際應用中,應該根據對應的數據的範圍來選定對應的整形類型:通常使用的比較多的TINYINT和int。

無符号标識設定

無符号:表示存儲的數據在當前字段中,沒有負數(隻有正數,區間為0-255)

基本語法:在類型之後加上一個 unsigned

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)5

顯示長度

顯示長度:指數據(整型)在數據顯示的時候,到底可以顯示多長位。

Tinyint(3): 表示最長可以顯示3位,unsigned說明隻能是正數,0-255永遠不會超過三個長度

Tinyint(4):表示最長可以顯示4位,-128~127

顯示長度隻是代表了數據是否可以達到指定的長度,但是不會自動滿足到指定長度:如果想要數據顯示的時候,保持最高位(顯示長度),那麼還需要給字段增加一個zerofill屬性才可以。

Zerofill:從左側開始填充0(左側不會改變數值大小),所以負數的時候就不能使用zerofill,一旦使用zerofill就相當于确定該字段為unsigned

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)6

數據顯示的時候,zerofill會在左側填充0到指定位:如果不足3位,那麼填充到3位,如果本身已經夠了或者超出,那麼就不在填充。

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)7

顯示長度可以自己設定:超出長度(但是不超出範圍)不會影響,隻會對不夠長度的進行補充(顯示長度)

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)8

小數類型

專門用來存儲小數的

在Mysql中将小數類型又分為兩類:浮點型和定點型

浮點型

浮點型又稱之為精度類型:是一種有可能丢失精度的數據類型,數據有可能不那麼準确(由其是在超出範圍的時候)

浮點型之所以能夠存儲較大的數值(不精确),原因就是利用存儲數據的位來存儲指數

整型:所有位都為1

1

1

1

1

1

1

1

1

計算結果:

浮點型:有部分用于存儲數據,有部分用于存指數

1

1

1

1

1

1

1

1

前三位轉換成十進制之後用作10的指數: 10^7 * 數據值

Float

Float又稱之為單精度類型:系統提供4個字節用來存儲數據,但是能表示的數據範圍比整型大的多,大概是10^38;隻能保證大概7個左右的精度(如果數據在7位數以内,那麼基本是準确的,但是如果超過7位數,那麼就是不準确的)

基本語法

Float:表示不指定小數位的浮點數

Float(M,D):表示一共存儲M個有效數字,其中小數部分占D位

Float(10,2):整數部分為8位,小數部分為2位

1、 創建一個數據表保存浮點數據

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)9

2、 存入數據:合法數據

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)10

注意:如果數據精度丢失,那麼浮點型是按照四舍五入的方式進行計算

3、 插入數據,超出大小

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)11

4、 數據長度剛好滿足條件,但是會超出精度

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)12

說明:用戶不能插入數據直接超過指定的整數部分長度,但是如果是系統自動進位導緻,系統可以承擔。

5、浮點數可以采用科學計數法來存儲數據

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)13

浮點數的應用:通常是用來保存一些數量特别大,大到可以不用那麼精确的數據。

Double

Double又稱之為雙精度:系統用8個字節來存儲數據,表示的範圍更大,10^308次方,但是精度也隻有15位左右。

定點數

定點數:能夠保證數據精确的小數(小數部分可能不精确,超出長度會四舍五入),整數部分一定精确

Decimal

Decimal定點數:系統自動根據存儲的數據來分配存儲空間,每大概9個數就會分配四個字節來進行存儲,同時小數和整數部分是分開的。

Decimal(M,D):M表示總長度,最大值不能超過65,D代表小數部分長度,最長不能超過30。

1、 創建表:與浮點數對比

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)14

2、 插入正常數據

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)15

3、 插入最大數據

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)16

4、 嘗試定點數進行四舍五入

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)17

定點數的應用:如果涉及到錢的時候有可能使用定點數

時間日期類型Date

日期類型:系統使用三個字節來存儲數據,對應的格式為:YYYY-mm-dd,能表示的範圍是從1000-01-01 到9999-12-12,初始值為0000-00-00

Time

時間類型:能夠表示某個指定的時間,但是系統同樣是提供3個字節來存儲,對應的格式為:HH:ii:ss,但是mysql中的time類型能夠表示時間範圍要大的多,能表示從-838:59:59~838:59:59,在mysql中具體的用處是用來描述時間段。

Datetime

日期時間類型:就是将前面的date和time合并起來,表示的時間,使用8個字節存儲數據,格式為YYYY-mm-dd HH:ii:ss,能表示的區間1000-01-01 00:00:00 到9999-12-12 23:59:59,其可以為0值:0000-00-00 00:00:00

Timestamp

時間戳類型:mysql中的時間戳隻是表示從格林威治時間開始,但是其格式依然是:YYYY-mm-dd HH:ii:ss

Year

年類型:占用一個字節來保存,能表示1900~2155年,但是year有兩種數據插入方式:0~99和四位數的具體年

1、 創建對應的時間日期類型的數據表

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)18

2、 插入數據:正常數據

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)19

3、 year的特殊性:可以采用兩位數的數據插入,也可以采用四位數的年份插入

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)20

4、 year進行兩位數插入的時候,有一個區間劃分,零界點為69和70:當輸入69以下,那麼系統時間為20 數字,如果是70以上,那配系統時間為19 數字

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)21

5、 timestamp當對應的數據被修改的時候,會自動更新(這個被修改的數據不是自己)

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)22

6、 time類型特殊性:本質是用來表示時間區間(當前時間之後的多少個小時),能表示的範圍比較大

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)23

7、 在進行時間類型錄入的時候(time)還可以使用一個簡單的日期代替時間,在時間格式之前加一個空格,然後指定一個數字(可以是負數):系統會自動将該數字轉換成天數 * 24小時,再加上後面的時間。

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)24

PHP中有着非常強大的時間日期轉換函數:date将時間戳轉換成想要的格式,strtotime又可以将很多格式轉換成對應的時間戳。PHP通常不需要數據庫來幫助處理這麼複雜的時間日期,所以通常配合PHP的時候,時間的保存通常使用時間戳(真正),從而用整型來保存。字符串型

Mysql記錄長度

在mysql中,有一項規定:mysql的記錄長度(record == 行row)總長度不能超過65535個字節。

Varchar能夠存儲的理論值為65535個字符:字符在不同的字符集下可能占用多個字節。

1、 創建表:證明varchar在mysql中能夠達到的理論值(utf8和GBK)

Varchar除了存儲的數據本身要占用空間:還需要額外的空間來保存記錄長度

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)25

2、 計算在utf8和GBK下對應的varchar能夠存儲的長度

Utf8 最多隻能存儲21844個字符

GBK最多隻能存儲32766個字符

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)26

字符串型Char

定長字符:指定長度之後,系統一定會分配指定的空間用于存儲數據

基本語法:char(L),L代表字符數(中文與英文字母一樣),L長度為0到255

Varchar

變長字符:指定長度之後,系統會根據實際存儲的數據來計算長度,分配合适的長度(數據沒有超出長度)

基本語法:Varchar(L),L代表字符數,L的長度理論值位0到65535

因為varchar要記錄數據長度(系統根據數據長度自動分配空間),所以每個varchar數據産生後,系統都會在數據後面增加1-2個字節的額外開銷:是用來保存數據所占用的空間長度

如果數據本身小于127個字符:額外開銷一個字節;如果大于127個,就開銷兩個字節

Char和varchar數據存儲對比(utf8,一個字符都會占用3個字節)

存儲數據

Char(2)

Varchar(2)

Char所占字節

Varchar所占字節

A

A

A

2 * 3 = 6

1 * 3 1 = 4

AB

AB

AB

2 * 3 = 6

2 * 3 1 = 7

Char和varchar的區别

1、 char一定會使用指定的空間,varchar是根據數據來定空間

2、 char的數據查詢效率比varchar高:varchar是需要通過後面的記錄數來計算

如果确定數據一定是占指定長度,那麼使用char類型;

如果不确定數據到底有多少,那麼使用varchar類型;

如果數據長度超過255個字符,不論是否固定長度,都會使用text,不再使用char和varchar

Text

文本類型:本質上mysql提供了兩種文本類型

Text:存儲普通的字符文本

Blob:存儲二進制文本(圖片,文件),一般都不會使用blob來存儲文件本身,通常是使用一個鍊接來指向對應的文件本身。

Text:系統中提供的四種text

Tinytext:系統使用一個字節來保存,實際能夠存儲的數據為:2 ^ 8 1

Text:使用兩個字節保存,實際存儲為:2 ^ 16 2

Mediumtext:使用三個字節保存,實際存儲為:2 ^ 24 3

Longtext:使用四個字節保存,實際存儲為:2 ^ 32 4

注意:

1、 在選擇對應的存儲文本的時候,不用刻意去選擇text類型,系統會自動根據存儲的數據長度來選擇合适的文本類型。

2、 在選擇字符存儲的時候,如果數據超過255個字符,那麼一定選擇text存儲

Enum

枚舉類型:在數據插入之前,先設定幾個項,這幾個項就是可能最終出現的數據結果。

如果确定某個字段的數據隻有那麼幾個值:如性别,男、女、保密,系統就可以在設定字段的時候規定當前字段隻能存放固定的幾個值:使用枚舉

基本語法:enum(數據值1,數據值2…)

系統提供了1到2個字節來存儲枚舉數據:通過計算enum列舉的具體值來選擇實際的存儲空間:如果數據值列表在255個以内,那麼一個字節就夠,如果超過255但是小于65535,那麼系統采用兩個字節保存。

1、 創建表

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)27

2、 插入數據:合法數據,字段對應的值必須是設定表的時候所确定的值

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)28

3、 錯誤數據:enum有規範數據的功能,能夠保證插入的數據必須是設定的範圍,其他類型都不可以

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)29

4、 枚舉enum的存儲原理:實際上字段上所存儲的值并不是真正的字符串,而是字符串對應的下标:當系統設定枚舉類型的時候,會給枚舉中每個元素定義一個下标,這個下标規則從1開始

Enum(1=>‘男’,2=>’女’,3=>’保密’)

特性:在mysql中系統是自動進行類型轉換的:如果數據碰到“ 、-、*、/”系統就會自動将數據轉換成數值:而普通字符串轉換成數值為0

Select 字段名 0 from 表名;

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)30

5、 既然實際enum字段存儲的結果是數值:那麼在進行數據插入的時候,就可以使用對應的數值來進行。

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)31

枚舉的意義:

1、 規範數據本身,限定隻能插入規定的數據項

2、 節省存儲空間

Set

集合:是一種将多個數據選項可以同時保存的數據類型,本質是将指定的項按照對應的二進制位來進行控制:1表示該選項被選中,0表示該選項沒有被選中。

基本語法:set(‘值1’,’值2’,’值3’…)

系統為set提供了多個字節進行保存,但是系統會自動計算來選擇具體的存儲單元

1個字節:set隻能有8個選項

2個字節:set隻能有16個選項

3個字節:set隻能表示24個選項

8個字節:set可以表示64個選項

Set和enum一樣,最終存儲到數據字段中的依然是數字而不是真實的字符串

1、 創建表

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)32

2、 插入數據:可以插入多個數據,就是在數據插入的字符串中,使用對應的逗号“,”将選項進行隔開

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)33

3、 數據選項所在的數據與數據插入的順序無關:最終都會變成選項對應的順序

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)34

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)35

4、 分析數據存儲的方式

4.1 系統将對應的數據選項(設計)按照順序進行編排:從第一個開始進行占位,每一個都對應一個二進制位。

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)36

4.2 數據在存儲的時候,如果被選中,那麼對應的位的值就為1,否則為0

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)37

4.3 系統在進行存儲的時候會自動将得到的最終的二進制颠倒過來,然後再進行轉換成十進制存儲

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)38

5、 查看數據:按照自動轉換成數值來查看

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)39

6、 既然是數值,那麼就可以插入數值來代替實際插入數據

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)40

注意:數字插入的前提是對應的二進制位上都有對應的數據項

Set集合的意義:

1、 規範數據

2、 節省存儲空間

Enum:單選框

Set:複選框

列屬性

列屬性又稱之為字段屬性,在mysql中一共有6個屬性:null,默認值,列描述,主鍵,唯一鍵和自動增長

Null屬性

NULL屬性:代表字段為空

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)41

如果對應的值為YES表示該字段可以為NULL

注意:

1、 在設計表的時候,盡量不要讓數據為空

2、 Mysql的記錄長度為65535個字節,如果一個表中有字段允許為NULL,那麼系統就會設計保留一個字節來存儲NULL,最終有效存儲長度為65534個字節。

默認值

Default:默認值,當字段被設計的時候,如果允許默認條件下,用戶不進行數據的插入,那麼就可以使用事先準備好的數據來填充:通常填充的是NULL

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)42

測試:不給當前字段提供數據值

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)43

Default關鍵字的另外一層使用:顯示的告知字段使用默認值:在進行數據插入的時候,對字段值直接使用default

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)44

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)45

列描述

列描述:comment,是專門用于給開發人員進行維護的一個注釋說明

基本語法:comment ‘字段描述’;

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)46

查看Comment:必須通過查看表創建語句

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)47

主鍵

顧名思義:主要的鍵,primary key,在一張表中,有且隻有一個字段,裡面的值具有唯一性

創建主鍵随表創建

系統提供了兩種增加主鍵的方式

1、 方案1:直接在需要當做主鍵的字段之後,增加primary key屬性來确定主鍵

2、 方案2:在所有字段之後增加primary key選項:primary key(字段信息)

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)48

表後增加

基本語法:alter table 表名 add primary key(字段);

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)49

查看主鍵

方案1:查看表結構

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)50

方案2:查看表的創建語句

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)51

删除主鍵

基本語法:alter table 表名 drop primary key;

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)52

複合主鍵

案例:有一張學生選修課表:一個學生可以選修多個選修課,一個選修課也可以由多個學生來選:但是一個學生在一個選修課中隻有一個成績。

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)53

主鍵約束

主鍵一旦增加,那麼對對應的字段有數據要求

1、 當前字段對應的數據不能為空;

2、 當前字段對應的數據不能有任何重複

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)54

主鍵分類

主鍵分類采用的是主鍵所對應的字段的業務意義分類

業務主鍵:主鍵所在的字段,具有業務意義(學生ID,課程ID)

邏輯主鍵:自然增長的整型(應用廣泛)

自動增長

自動增長:auto_increment,當給定某個字段該屬性之後,該列的數據在沒有提供确定數據的時候,系統會根據之前已經存在的數據進行自動增加後,填充數據。

通常自動增長用于邏輯主鍵。

原理

自動增長的原理:

1、 在系統中有維護一組數據,用來保存當前使用了自動增長屬性的字段,記住當前對應的數據值,再給定一個指定的步長

2、 當用戶進行數據插入的時候,如果沒有給定值,系統在原始值上再加上步長變成新的數據

3、 自動增長的觸發:給定屬性的字段沒有提供值

4、 自動增長隻适用于數值

使用自動增長

基本語法:在字段之後增加一個屬性auto_increment

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)55

插入數據:觸發自動增長,不能給定具體值

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)56

修改自動增長

1、 查看自增長:自增長一旦觸發使用之後,會自動的在表選項中增加一個選項(一張表最多隻能擁有一個自增長)

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)57

2、 表選項可以通過修改表結構來實現

Alter table 表名 auto_increment = 值;

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)58

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)59

删除自動增長

删除自增長:就是在字段屬性之後不再保留auto_increment,當用戶修改自增長所在字段時,如果沒有看到auto_increment屬性,系統會自動清除該自增長

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)60

初始設置

在系統中,有一組變量用來維護自增長的初始值和步長

Show variables like ‘auto_increment%’;

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)61

細節問題

1、 一張表隻有一個自增長:自增長會上升到表選項中

2、 如果數據插入中沒有觸發自增長(給定了數據),那麼自增長不會表現

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)62

3、 自增長修改的時候,值可以較大,但是不能比當前已有的自增長字段的值小

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)63

唯一鍵

唯一鍵:unique key,用來保證對應的字段中的數據唯一的。

主鍵也可以用來保證字段數據唯一性,但是一張表隻有一個主鍵。

1、 唯一鍵在一張表中可以有多個。

2、 唯一鍵允許字段數據為NULL,NULL可以有多個(NULL不參與比較)

創建唯一鍵

創建唯一鍵與創建主鍵非常類似

1、 直接在表字段之後增加唯一鍵标識符:unique[ key]

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)64

2、 在所有的字段之後使用unique key(字段列表);

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)65

3、 在創建完表之後也可以增加唯一鍵alter table 表名 add unique key(字段列表);

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)66

查看唯一鍵

唯一鍵是屬性,可以通過查看表結構來實現

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)67

唯一鍵效果:在不為空的情況下,不允許重複

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)68

在查看表創建語句的時候,會看到與主鍵不同的一點:多出一個“名字”

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)69

删除唯一鍵

一個表中允許存在多個唯一鍵:假設命令為主鍵一樣:alter table 表名 drop unique key;//錯誤的

Index關鍵字:索引,唯一鍵是索引一種(提升查詢效率)

删除的基本語法:alter table 表名 drop index 唯一鍵名字;

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)70

修改唯一鍵:先删除後增加

複合唯一鍵

唯一鍵與主鍵一樣可以使用多個字段來共同保證唯一性;

一般主鍵都是單一字段(邏輯主鍵),而其他需要唯一性的内容都是由唯一鍵來處理。

表關系

表關系:表與表之間(實體)有什麼樣的關系,每種關系應該如何設計表結構。

一對一

一對一:一張表中的一條記錄與另外一張表中最多有一條明确的關系:通常,此設計方案保證兩張表中使用同樣的主鍵即可

學生表

學生ID(PRI)

姓名

年齡

性别

籍貫

婚否

住址

表的使用過程中:常用的信息會經常去查詢,而不常用的信息會偶爾才會用到。

解決方案:将兩張表拆分,常見的放一張表,不常見的放一張表

常用表

學生ID(PRI)

姓名

年齡

性别

不常用表

學生ID(PRI)

籍貫

婚否

住址

一對多

一對多,通常也叫作多對一的關系。通常一對多的關系設計的方案,在“多”關系的表中去維護一個字段,這個字段是“一”關系的主鍵。

母親表

母親ID

姓名

年齡

身高

M1

M2

孩子表

孩子ID

姓名

年齡

身高

母親ID

K1

M1

K2

M1

多對多

多對多:一張表中的一條記錄在另外一張表中可以匹配到多條記錄,反過來也一樣。

多對多的關系如果按照多對一的關系維護:就會出現一個字段中有多個其他表的主鍵,在訪問的時候就會帶來不便。

既然通過兩張表自己增加字段解決不了問題,那麼就通過第三張表來解決。

師生關系

1、 一個老師教過多個班級的學生;

2、 一個學生聽過多個老師講的課;

首先得有兩個實體:老師表和學生表

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)71

從中間設計一張表:維護兩張表對應的每一種聯系都包含

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)72

mysql日期和時間類型的用法(5天玩轉MySQL整數小數類型..時間日期類型)73

多對多解決方案;增加一個中間表,讓中間表與對應的其他表形成兩個多對一的關系:多對一的解決方案是在“多”表中增加“一”表對應的主鍵字段。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved