-- 創建整型表
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,100000,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;-- zerofill; 自動變成 unsigned無符號
-- 插入數據
insert into my_int
values (1,1,1,1,1,1,1);
insert into my_int
values (100,100,100,100,100,100,100);
-- 浮點數表
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,123.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 (132456,1324.12,123456.56);-- 最后一個整數部分超出
-- 創建定點數表
create? table my_decimal(
f1float (10,2),
d1decimal (10,2)
);
-- 插入數據
insert into my_decimal
values (12345678.90,12346578.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:36',
'2019-11-21','13:38:36',
'2019-11-21 13:38:36','2019');
-- 時間使用負數
insert into my_date
values ('2019-11-21 13:38:36',
'2019-11-21','-13:38:36',
'2019-11-21 13:38:36','2019');
insert into my_date
values ('2019-11-21 13:38:36',
'2019-11-21','-213:38:36',
'2019-11-21 13:38:36','2019');
insert into my_date
values ('2019-11-21 13:38:36',
'2019-11-21','-2:38:36',
'2019-11-21 13:38:36','2019');--? -2表示過去2天,就是48小時? -- year可以使用2位或者4位
insert into my_date
values ('2019-11-21 13:38:36',
'2019-11-21','13:38:36',
'2019-11-21 13:38:36','69');
insert into my_date
values ('2019-11-21 13:38:36',
'2019-11-21','13:38:36',
'2019-11-21 13:38:36','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(
name varchar (20)not null,
roomvarchar (20)null -- 代表允許為空,不寫默認就是允許為空
);
-- 創建表
create table my_teacher(
name varchar (20)not null comment
'姓名',
moneydecimal (10,2)not null
comment'工資'
);
-- 默認值
create table my_default(
name varchar (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(
name varchar (20)not null comment
'姓名',
number char (10)primary? key
comment'學號:bc2019+0001,不能重復'
);
-- 復合主鍵
create table my_pri2(
number char (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',
name varchar (10)not null comment
'課程名字'
);
-- 第一種方式
alter table my_pri3 modify course
char(10)primary key comment
'課程代碼:bc25890001';
-- 把第一種用drop table my_pri3; 刪除然后在創建一個在用第二種方式
-- 刪除表
drop table my_pri3;
-- 第二種方式
alter table my_pri3add primary
key(course);
alter table my_pri3add primary
key(course);-- 也可以是復合主鍵
********************************************************************************************
數值型
整數型:存放整型數據
tinyint:迷你整型,使用1個字節存儲,表示的狀態最多為256種
smallint:小整型,使用2個字節存儲,表示的狀態最多為65536種
mediumint:中整型,使用3個字節存儲
int:標準整型,使用4個字節存儲
bigint:大整型,使用8個字節存儲
小數型:帶有小數點或者范圍超出整型的數值類型
浮點型:小數點浮動,精度有限,而且會丟失精度
定點型:小數點固定,精度固定,不會丟失精度
時間日期類型
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個字節,來確定存儲的實際長度
文本字符串:如果數據量非常大,通常超過255個字符就會使用文本字符串
文本字符串根據存儲的數據的格式分為:
text:存儲文字、存儲二進制數據的文件路徑
blob:存儲二進制數據(通常不用)
枚舉字符串(enum):事先把所有可能出現的結果都設計好,實際上存儲的數據必須是規定好的數據中的一個
枚舉的使用方式:
enum(可能出現的元素列表);
例如:enum('男','女','不男不女','妖怪','保密');
使用:存儲數據,只能存儲上面定義好的數據
集合字符串:跟枚舉類似,實際存儲的是數值,而不是字符串,但集合是多選
集合使用方式:
set(元素列表)
可以使用元素列表中的多個元素,使用逗號分隔