一、整數型:存放整型數據
tinyint:迷你整型,使用1個字節存儲,表示的狀態最多為256種
smallint:小整型,使用2個字節存儲,表示的狀態最多為65536種
mediumint:中整型,使用3個字節存儲
int:標準整型,使用4個字節存儲
bigint:大整型,使用8個字節存儲
有符號:signed;
無符號:unsigned;
二、小數型:帶有小數點或者范圍超出整型的數值類型
浮點型:小數點浮動,精度有限,而且會丟失精度
定點型:小數點固定,精度固定,不會丟失精度
三、datetime:時間日期,格式是YYYY-mm-dd HH:ii:ss,表示的范圍是從1000到9999年,有0值(0000-00-00 00:00:00)
date:日期,就是datetime中的date部分
time:時間(段),指定的某個區間之間,比如-時間到+時間,或者過去的某個時間到將來的某個時間
timestamp:時間戳,但并不是時間戳,只是從1970年開始的,YYYY-mm-dd HH:ii:ss格式與datetime完全一致
year:年份,有兩種形式:year(2)和year(4)
四、字符串類型分為:char、varchar、text、blob、enum、set
char(定長字符串):磁盤(二維表)在定義結構的時候,就已經確定了最終數據的存儲長度
char(L):L代表Length,可以存儲的長度,單位為字符,最大長度值可以為255
varchar(變長字符串):在分配空間的時候,按照最大的空間分配,但是實際上最終用了多少,是根據具體的數據來確定
varchar(L):L表示字符長度,理論長度是65536個字符,但是會多出1到2個字節,來確定存儲的實際長
定長與變長的存儲實際空間(UTF8)
五、文本字符串:如果數據量非常大,通常超過255個字符就會使用文本字符串
文本字符串根據存儲的數據的格式分為:
text:存儲文字、存儲二進制數據的文件路徑
blob:存儲二進制數據(通常不用)
六、枚舉字符串(enum):事先把所有可能出現的結果都設計好,實際上存儲的數據必須是規定好的數據中的一個
枚舉的使用方式:
enum(可能出現的元素列表);
例如:enum('男','女','不男不女','妖怪','保密');
使用:存儲數據,只能存儲上面定義好的數據
七、集合字符串:跟枚舉類似,實際存儲的是數值,而不是字符串,但集合是多選
集合使用方式:
set(元素列表)
可以使用元素列表中的多個元素,使用逗號分隔
列屬性:真正約束字段的是數據類型,但是這種約束很單一,需要有一些額外的約束,來更加保證數據的合法性,這就需要列屬性
列屬性包括:NULL/NOT NULL、default、Primary key、unique key、auto_increment、comment
空屬性:
兩個值:NULL(默認的)、NOT NULL(不為空
主鍵:primary key,主要的鍵,一張表只能有一個字段可以使用對應的鍵,用來唯一的約束該字段里面的數據,不能重復,這種稱之為主鍵
增加主鍵:
方案一:在創建表的時候,直接在字段之后,跟primary key關鍵字(主鍵本身不允許為空)
方案二:在創建表的時候,在所有的字段之后,使用primary key(主鍵字段列表)來創建主鍵,如果有多個字段作為主鍵,可以是復合主鍵
方案三:當表已經創建好之后,額外追加主鍵,可以通過修改表字段屬性,也可以直接追加
alter table 表名 add primary key(字段列表);
————————————————————————————
一、創建整型表
-- 創建整型表
create table my_int(
int_1 tinyint,
int_2smallint,
int_3int,
int_4 bigint
)charset utf8;
-- 插入數據
insert into my_int
values(100,100,100,100);-- 有效數據
insert into my_int
values('a','b','199','f');-- 無效數據:類型限制
insert into my_int
values(255,10000,100000,1000000);-- 錯誤 :超出范圍
-- 給表增加一個無符號的類型
alter table my_intadd int_5
tinyint unsigned;-- 無符號類型
-- 插入數據
insert into my_int
values(127,10000,100000,1000000,255);
-- 指定顯示寬度為1
alter table my_intadd int_6
tinyint(1) unsigned;
-- 插入數據
insert into my_int
values(127,0,0,0,255,255);
-- 顯示寬度為2,0填充
alter table my_intadd int_7
tinyint(2) zerofill;
-- 插入數據
insert into my_int
values(1,1,1,1,1,1,1);
insert into my_int
values(100,100,100,100,100,100,100);
-- 刪除字段
alter table my_intdrop int_6;
二、浮點數表
-- 浮點數表
create table my_float(
f1float,
f2float(10,2),-- 10位在精度范圍之外
f3float(6,2)-- 6位在精度范圍之內
);
-- 插入數據
insert into my_float
values(1000.10,1000.10,1000.10);
insert into my_float
values(1234567890,12345678.90,1234.56);
insert into my_float
values(3e38,3.01e7,1234.56);
insert into my_float
values(9999999999,99999999.99,9999.99);-- 后兩個是最大值
-- 超出長讀插入數據
insert into my_float
values(123456,1234.12345678,123.9876543);-- 小數部分可以超出長度
insert into my_float
values(123456,1234.12,12345.56);-- 最后一個整數部分超出
三、創建定點數表
-- 創建定點數表
create table my_decimal(
f1float(10,2),
d1decimal(10,2)
);
-- 插入數據
insert into my_decimal
values(12345678.90,12345678.90);-- 有效數據
insert into my_decimal
values(1234.123456,1234.123456);-- 小數部分是可以超出
-- 查看警告
show warnings;
-- 插入數據
insert into my_decimal
values(99999999.99,99999999.99);-- 沒有問題
insert into my_decimal
values(99999999.99,99999999.999);-- 進位超出范圍
四、時間日期表
-- 創建時間日期的表
create table my_date(
d1 datetime,
d2date,
d3time,
d4timestamp,
d5year
);
-- 插入數據
insert into my_date
values('2019-11-21 13:38:46','2019-11-21','13:38:46','2019-11-21 13:38:46',2015);
-- 時間使用負數
insert into my_date
values('2019-11-21 13:38:46','2019-11-21','-13:38:46','2019-11-21 13:38:46',2015);
insert into my_date
values('2019-11-21 13:38:46','2019-11-21','-213:38:46','2019-11-21 13:38:46',2015);
insert into my_date
values('2019-11-21 13:38:46','2019-11-21','-2 13:38:46','2019-11-21 13:38:46',2015);-- -2表示過去兩天,是48小時
-- year可以使用2位或者4位
insert into my_date
values('2019-11-21 13:38:46','2019-11-21','13:38:46','2019-11-21 13:38:46',69);
insert into my_date
values('2019-11-21 13:38:46','2019-11-21','13:38:46','2019-11-21 13:38:46',70);
-- timestamp:修改記錄
update my_dateset d1=
'2019-11-21 13:46:45' where d5=2069;
五、枚舉表
-- 創建枚舉表? ? -- 枚舉實際上存的是數值
create table my_enum(
gender enum('男','女','保密')
);
-- 插入數據
insert into my_enum
values('男'),('保密');-- 有效數據
insert into my_enum
values('male');-- 錯誤數據,沒有該元素
-- 將字段結果取出來進行+0運算
select gender +0, gender
from my_enum;
-- 數值插入枚舉元素
insert into my_enum
values(1),(2);
-- 創建一個班級表
create table my_class(
namevarchar(20)not null,
roomvarchar(20)null -- 代表允許為空,不寫默認就是允許為空
);
-- 創建表
create table my_teacher(
namevarchar(20)not null comment'姓名',
moneydecimal(10,2)not null
comment'工資'
);
-- 默認值
create table my_default(
namevarchar(20)not null,
age tinyint unsigneddefault 0,
gender enum('男','女','保密')
default '男'
);
-- 插入數據
insert into my_default(name)
values('哦吼');
insert into my_default
values('男閨蜜',18,default);
六、主鍵
-- 增加主鍵
create table my_pri1(
namevarchar(20)not null comment'姓名',
numberchar(10)primary key
comment'學號: be2019+0001, 不能重復'
);
-- 復合主鍵
create table my_pri2(
numberchar(10) comment
'學號: bc20190001',
coursechar(10) comment
'課程代碼:bc25890001',
score tinyint unsigneddefault 60
comment'成績',
-- 增加主鍵的限制:學號與課程號應該是對應的,具有唯一性
primary key(number, course)
);
-- 追加主鍵
create table my_pri3(
coursechar(10)not null comment
'課程代碼:bc25890001',
namevarchar(10)not null comment
'課程名字'
);
-- 第一種方式
alter table my_pri3 modify coursechar(10)primary
key comment
'課程代碼:bc25890001'
;
-- 刪除表
drop table my_pri3;
-- 第二種方式
alter table my_pri3add primary
key(course);