mysql常用資料型別以及約束

2021-10-04 11:46:44 字數 4344 閱讀 9744

資料型別

1. 數值型別

整數型別:tinyint smallint mediumint int bigint

作用:儲存年齡,id,等級,各種號碼等。

強調:整型的寬度指的是顯示寬度,並不是儲存寬度,且沒必要指定寬度。

ps:create table t3(id int unsigned); 建立int型別預設有正負數,如果要去掉符號,在int 後加 unsigned限制。

浮點型別:float double

作用:儲存薪資、身高、體重、體質引數等

定點數型別:dec等同於decimal  

浮點型別:

float:#float[(m,d)] [unsigned] [zerofill]

定義:單精度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。m最大值為255,d最大值為30

精確度: 隨著小數的增多,精度變得不準確

ps:create table t1(weight float(255,30) unsigned);

double:#double[(m,d)] [unsigned] [zerofill]

定義:雙精度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。m最大值為255,d最大值為30

精確度:隨著小數的增多,精度比float要高,但也會變得不準確

decimal:decimal[(m[,d])] [unsigned] [zerofill]

定義:準確的小數值,m是數字總個數(負號不算),d是小數點後個數。

m最大值為65,d最大值為30, 但整數為35位。

精確度:隨著小數的增多,精度始終準確

對於精確數值計算時需要用此型別

decimal能夠儲存精確值的原因在於其內部按照字串儲存。

2.日期型別

date:2017-11-12 出生年月日 : yyyy-mm-dd(1000-01-01/9999-12-31)

time:10:10:56 上課時間 :hh:mm:ss('-838:59:59'/'838:59:59')

datetime:2017-11-12 10:10:56 註冊時間,發布時間 : yyyy-mm-dd hh:mm:ss(1000-01-01 00:00:00/9999-12-31 23:59:59 y)

year:2017 大事件時間

在實際應用的很多場景中,mysql的這兩種日期型別(datetime,timestamp)都能夠滿足我們的需要,儲存精度都為秒,但在某些情況下,

會展現出他們各自的優劣。下面就來總結一下兩種日期型別的區別。

1.datetime的日期範圍是1001——2023年,timestamp的時間範圍是1970——2023年。

2.datetime儲存時間與時區無關,timestamp儲存時間與時區有關,顯示的值也依賴於時區。在mysql伺服器,

作業系統以及客戶端連線都有時區的設定。

3.datetime使用8位元組的儲存空間,timestamp的儲存空間為4位元組。因此,timestamp比datetime的空間利用率更高。

4.datetime的預設值為null;timestamp的字段預設不為空(not null),預設值為當前時間(current_timestamp),

如果不做特殊處理,並且update語句中沒有指定該列的更新值,則預設更新為當前時間。

3.字元型別:char 與 varchar

#char型別:定長,簡單粗暴,浪費空間,訪問速度快

#varchar型別:變長,精準,節省空間,訪問速度慢

4.列舉與集合型別:列舉型別(enum)和 集合型別(set)

作用:欄位的值只能在給定範圍中選擇,如單選框,多選框

- enum 單選 只能在給定的範圍內選乙個值,如性別 *** 男male/女female

ps: create table t1(id int, name char(10), *** enum('male', 'female', 'none'));

alter table t1 modify *** enum('male', 'female', 'none') not null default 'male';

insert into t1(id,name) values(1,'egon');

- set 多選框

ps: create table t1(id int,name char(10), hobby set('music', 'read','basketball','football'));

insert into t1(id, hobby) values(1, 'zhangliang','music,read, basketball');

約束

key:

唯一:unique

主鍵:primary key

ps:create table t2(id int primary key auto_increment, name char(10));

create table t2(id int not null unique auto_increment, name char(10));

create table t2(id int, name char(10), constraint pri_id primary key(id));

其中第三種寫法在後面加關鍵字緊跟名字然後是約束條件, 第四種也可以直接省略關鍵字。

create table t2(id int, name char(10), primary key(id));

not null unique 可以有多個,而primary key 只能有乙個,在沒有primary key的時候,not null unique的第乙個

會設定成為主鍵,其他的為不為空且唯一。

聯合唯一:限制資料重複,例如電腦的ip和埠繫結到一起後代表乙個服務,不能重複,單個ip跟埠可以重複。

ps1:電腦服務ip和port(不合理)

create table t3(id int, ip char(15), port int, primary key(ip,port));

insert into t3(id, ip, port) values(1,'1.1.1.1',3306);

insert into t3(id, ip, port) values(1,'1.1.1.2',3306);

ps2:

create table t6(id int primary key auto_increment,

ip char(15) not null,

port int not null,

unique(ip,port));

insert into t6(ip,port) values('1.1.1.1',3306);

insert into t6(ip,port) values('1.1.1.2',3306);

表關聯關係:多對多、多對

一、一對一

foreign key:表關聯

多對一:

先建立被關聯的表。

...在建立需要關聯其他的表.

create table emp(

id int primary key auto_increment,

name char(10) not null,

*** enum('male','female') not null default 'male',

dep_id int,

foreign key(dep_id) references dep(id)

on delete cascade

on update cascade

);外來鍵插入內容的時候,內容必須來自於被關聯表的內容

on delete cascade,on update cascade :加入這兩個欄位後被關聯的表修改(同步更新,同步刪除)。

多對多:(先建兩張表,然後在建乙個表來將兩張表關聯起來)

能夠相互關聯且能夠相互多對一。

create table user2role(

id int primary key auto_increment,

user_id int,

role_id int,

foreign key(user_id) references user(id)

on update cascade

on delete cascade,

foreign key(role_id) references role(id)

on update cascade

on delete cascade

);一對一:

foreign key 的字段唯一加 unique

mysql中的資料型別以及常見約束

mysql中的資料型別以及常見約束 一 常見約束 1.介紹 一種限制,用來限制表中的資料,為了保證表中的資料的準確性和可靠性 2.約束的分類 一共有六大約束 not null 非空約束,用來保證該字段的值不能為空 defaul 預設約束,用來保證該字段有預設值t primary key 主鍵約束,用...

MySQL資料型別和約束

常用資料型別如下 資料型別說明 資料型別附錄表 整數型別 型別位元組大小 有符號範圍 signed 無符號範圍 unsigned tinyint 128 127 0 255 smallint 32768 32767 0 65535 mediumint 8388608 8388607 0 167772...

MySQL 資料型別和約束

資料庫中的資料儲存在資料表中,在表中為了更加準確的儲存資料,保證資料的正確有效,可以在建立表的時候,為表新增一些強制性的驗證,比如 資料型別和約束。資料型別是指在建立表的時候為表中字段指定資料型別,只有資料符合型別要求才能儲存起來,使用資料型別的原則是 夠用就行,盡量使用取值範圍小的,而不用大的,這...