資料庫 MySQL mysql資料型別的用法介紹

2021-09-11 11:17:20 字數 4129 閱讀 4944

【語法】

create

table[if

notexists

]`表名`

(欄位名 字段型別 [

null

|not

null][

default 值]

[auto_increment][

primary

key]

[comment 備註]

,欄位名 字段型別,..

...欄位名 字段型別)[

engine

=儲存引擎]

[charset

=編碼]

[collate

=校對集]

;【說明】[if

notexists

]`表名` 判斷表是否存在:存在-不管,不存在-建立

[null

|not

null

] 宣告字段值是否可以插入null資料

[default 值] 宣告字段值如果沒有錄入資料則使用預設值

[primary

key] 主鍵(特點:字段值不能重複且不能為null)

[auto_increment

] 自增(該屬性必須配合primary

key效果字段值自動增長1、2、3)

[comment 備註] 宣告欄位的作用

[engine

=儲存引擎] 儲存引擎

[charset

=編碼] 資料儲存編碼

1位元組(byte)= 8位(bit)

1kb = 1024 byte(位元組)

英文:1個字元 = 1個位元組

中文:1個字元 = 等於3個位元組(utf-8) 等於2個位元組(gbk)

注意字串型別對應的中文為字元。

型別位元組

範圍(有符號)

範圍(無符號)

tinyint

1-128 ~ 127

0 ~ 255

smallint

2-32768 ~ 32767

0 ~ 65535

mediumint

3-8388608 ~ 8388607

0 ~ 16777215

int4

-2147483648 ~ 2147483647

0 ~ 4294967295

bigint

8-9223372036854775808 ~ 9223372036854775807

0 ~ 18446744073709551615

無符號數(unsigned)

create table tint2 (num tinyint(10) unsigned) charset=utf8;

insert into tint2 values (0);

insert into tint2 values (255);

...

tinyint(10)其中10表示儲存寬度(儲存寬度指:當插入資料位數不夠則自動從左側補0,必須加zerofill屬性寬度才會生效)

浮點數語法

占用位元組

範圍精度範圍

單精度float(總長度,小數長度)

4-3.4e+38~3.4e+38

大概為7位左右

雙精度double(總長度,小數長度)

8-1.79e+308~1.79e+308

大概為15位左右

定點數decimal(最大65,最大30)

依賴於m和d的值

實際業務中的選擇:

資料型別

描述格式

占用位元組

datetime

日期時間

年-月-日 小時:分鐘:秒

8date

日期年-月-日

4time

時間小時:分鐘:秒

3year年份年

1timestamp

時間戳年-月-日 小時:分鐘:秒

4datetime(佔8個位元組)和timestamp(佔4個位元組)在表現上是一樣。

timestamp和datetime的區別

儲存範圍:

timestamp所能儲存的時間範圍為:『1970-01-01 00:00:01.000000』 到 『2038-01-19 03:14:07.999999』。(原因是timestamp只占用了4個位元組,而2023年01月19日11:14:07秒後就超過了4個位元組的長度)

datetime所能儲存的時間範圍為:『1000-01-01 00:00:00.000000』 到 '9999-12-31 23:59:59.999999』。

儲存方式不同

timestamp,它把客戶端插入的時間從當前時區轉化為utc(世界標準時間)進行儲存。查詢時,將其又轉化為客戶端當前時區進行返回。

datetime,不做任何改變,基本上是原樣輸入和輸出。

timestamp會自動初始化和更新

插入乙個timestamp的字段後,字段屬性會顯示timestamp not null default current_timestamp on update current_timestamp

(自動初始化指的是如果對該字段沒有顯性賦值,則自動設定為當前系統時間。

自動更新指的是如果修改了其它字段,則該字段的值將自動更新為當前系統時間。)

實際業務中的選擇:

參考文章:should-i-use-the-datetime-or-timestamp-data-type-in-mysql

mysql中的timestamp通常用於跟蹤記錄的更改,並且通常在每次更改記錄時進行更新。如果要儲存特定值,則應使用datetime欄位。 如果您想在使用unix時間戳還是本機mysql日期時間字段之間做出選擇,請採用本機格式。您可以通過這種方式在mysql中進行計算, ("select date_add(my_datetime, interval 1 day)")並且("select unix_timestamp(my_datetime)")如果要使用php對記錄進行查詢,則可以很容易地將值的格式更改為unix時間戳。

ps. 在實際運用中時間型別使用int型別,但是也有公司使用datetime

說明:選擇int型別原因:int比datetime更節省空間

選擇datetime型別原因:int同timestamp最大儲存時間為2023年

為什麼選擇int的公司比datetime多

專案不同頁面所需格式

int型別

datetime型別

2017/3/8

date('y/m/d』,時間戳)

先轉時間戳,再date函式

2048-3-16

date('y-m-d』,時間戳)

先轉時間戳,再date函式

2014/03/33 12:30:02

date(『y/m/d h:i:s』,時間戳)

直接顯示

剛剛、24小時前…

呼叫函式傳遞時間戳先轉時間戳,再呼叫函式

資料型別

描述char(長度)

定長字元(最多255個字元)

varchar(長度)

可變長度字元(65535個字元)

tinytext

大段文字(大塊資料) 2^8-1=255個字元

text

大段文字(大塊資料) 2^16-1=65535個字元

mediumtext

2^24-1 = 16777215個字元

longtext

2^32-1 = 4294967295個字元

char的執行效率比varchar高(varchar**空間、char不**)

實際業務中的選擇:

明確資料長度選擇char反之用varchar,如:性別char(1) 標題varchar(60)

文章內容或者大塊文字時選擇text

只能從集合資料中獲取乙個值(單選)

語法:*** enum(『男』, 『女』)

mysql列舉值是通過整型的數字來管理的,第乙個值對應1,第二個值對應2依次類推

資料庫 MYSQL MySql資料庫使用者密碼的修改

環境 作業系統 win2003 mysql mysql ver 12.22 distrib 4.0.18,for win95 win98 i32 思想 為了安全加密需要設定mysql資料庫相關使用者的密碼 mysql資料庫的密碼都是儲存在mysql資料庫例項的user表中的password欄位裡,通...

資料庫mysql MySQL軟體安裝

軟體名稱及版本 mysql installer community 5.7.20.0 是可以同時支援32位和64位系統的 軟體名稱及版本 mysql installer community 5.7.20.0 a 雙擊開啟安裝程式 勾選 i accept the license terms 選擇 cu...

MySQL MySQL資料管理DML 資料庫02

alter table 表 add constraint 約束名 foreign key 作為外健的列 references 那個表 哪個字段 物理外健,不建議使用 避免資料庫過多造成困擾 最佳實踐 資料庫就是單純的表,只要用存資料 想使用多張表的資料,想使用外健用業務邏輯解決 insert int...