一、整形
1、分類:tinyint smallint mediumint int bigint
(1)有符號:有正負數
(2)無符號:沒有負數 類型後面使用unsigned 和zerofill修飾符
存儲數據大小範圍:
1個字節 2個字節 3個字節 4個字節 8個字節
8bit 16 24 32 64
11111111 2^16-1
無符號:範圍運算公式 0到2^n-1
比如:
tinyint:0到255
bigint:0到2^64-1
有符號:範圍運算公式-2^(n-1)到2^(n-1)-1
比如:
tinyint:-128到127
(3)顯示寬度
類型後的小括號內的數字是顯示寬度,不能限制插入數值的大小
比如:bigint(2) 2是顯示寬度
(4)定義無符號整型:
unsigned:
mysql>create table t1(id bigint(2) unsigned);
zerofill:
mysql>create table t2( id1 int zerofill, id2 int(6) zerofill);
mysql>insert into t2 values(2,2);
mysql>select * from t2;
+------------+--------+
| id1 | id2 |
+------------+--------+
| 0000000002 | 000002 |
+------------+--------+
1 row in set (0.00 sec)
二、浮點型
1. 單精度:float(5.3) 5寬度(總共長度) 3精度(小數點後三位)
mysql>create table t3(id float(6,2));
2.雙精度:double(5.3)
mysql>create table t4(id double(5,3));
3.定點型
定點數在Mysql內部以字符串形式存儲,比浮點數更精確,適合用來表示貨幣等精度高的數據。
decimal(5,3)
4.位類型BIT(M)
M範圍從1—64,如果不寫默認爲0
bit( ) 顯示爲二進制
mysql>create table t3(id bit(4)); 4bit 能存儲的最大值是15
三、字符串類型
1.字符類型 char varchar
(1)char(10) 根據小括號中的10,佔10個。
列的長度固定爲創建表時的聲明的長度:0~255
(2)varchar(10) 根據實際字符串長度佔空間,最多10個
列中的值爲可變長字符串,長度:0~65535
2.總結字符類型使用:
(1)經常變化的字段用varchar
(2)知道固定長度的用char
(3)儘量用varchar
(4)超過255字符的只能用varchar或者text
(5)能用varchar的地方不用text(text是i當varchar長度不夠時再使用text)
3.枚舉類型 enum (enumerate[ɪˈnju:məreɪt])
作用:在給的固定範圍內多選一
mysql>create table t3(name enum('wing','tom'));
mysql>insert into t3 values('wing');
只能從給的wing和tom兩個中2選1
4.集合類型 set
作用:在給的固定範圍內可選多個
mysql>create table t3(name set('wing','tom','haha'));
mysql>insert into t3 set anme="wing,haha";
四、時間類型
時間和日期類型:year date time datetime timestamp(時間戳)
作用:用於存儲用戶的註冊時間、文件的發佈時間、文章的更新時間、員工的入職時間deng
(1)date
06/04
06-04
(2)year
00到69 爲21世紀
70到99 爲20世紀
(3)time
050510
(4)datetime 不給默認值爲null
180509221810
(5)timestamp 默認把當前時間自動加上
180509221810
和datetime不同的是:當插入值爲null時,顯示值也會是當前的時間。
例題1:mysql>create table t(date timestamp);
mysql>insert into t values(null);
mysql>select * from t;
+---------------------+
| id |
+---------------------+
| 2013-12-18 00:08:41 |
+---------------------+
1 row in set (0.00 sec)
2. mysql>create table t6(d date,t time,dt datetime);
mysql>insert into t6 values(now(),nwo(),nwo()); -----引用now( )函數
mysql> select * from t6;
+------------+----------+---------------------+
| d | t | dt |
+------------+----------+---------------------+
| 2018-01-11 | 10:59:57 | 2018-01-11 10:59:57 |
+------------+----------+---------------------+
五、約束(修飾符)
1.當一個字段被設置不能爲空(not null)但是又沒有給它設置值的時候,系統會按照不同的類型給予默認值
(1)數值 0
(2)字符串 空
(3)枚舉類型enum 第一個預定義值
(4)時間戳timestamp 當前時間
2.設置系統默認值default
mysql>alter table t2 modify id int not null default 8; 修改表t2的id字段的默認值爲8
3.unique (key)唯一
(唯一性不能重複:如果id=1已經被設置則不能再設置爲id=1)
mysql>alter table t2 modify id int unique;
4.auto_increment 自增 (額外的屬性)
mysql>create table t2(id int unique auto_increment,name varchar(10));
刪除時先modify修改屬性再drop刪除掉
5.primary key (key) 主鍵 ----->not null + unique(key) 類似身份證ID
每張表中只能有一個主鍵
主鍵不能爲空,而且唯一
方法一:mysql>create table t4(hostname char(20) primary key,ip char(150));
方法二:mysql>create table t3(hostname char(20),ip char(150),primary key(hostname));
6.聯合主鍵(把多列設置爲一個主鍵)
(1)設置主鍵:mysql>create table t4(hostname char(10),ip char(150),primary key(hostname,ip));
(2)刪除主鍵:mysql>alter table t3 drop primary key;
7.index(key) 把某一個字段(列)設置成index
索引 優化查詢速度,便於查詢
(1)創建索引的三種方法:
mysql> create table t4(hostname char(20) primary key,ip char(150),index (ip));
mysql> create table t3(hostname char(20) primary key,ip char(150),index dazhi(ip));
mysql> create index index_name on t3(ip);
語法:CREATE INDEX index_name ON table_name (column_list)
不設置index_name默認把該字段(列)的名字作爲索引名
(2)刪除索引
mysql>alter table t3 drop index index_name;
(3)查看索引
mysql> SHOW INDEX FROM table_name\G
· Key_name
索引的名稱。
· Column_name
列名稱。
8.查看key
查看:mysql>desc t2\G
PRI主鍵約束;
UNI唯一約束;
MUL非唯一的索引。
9.外鍵foreign key (key)
mysql> create table t1(id int,manager char(10) primary key) engine = innodb;
mysql> create table t2(id int,admin char(10),foreign key (admin) references t1 (manager)) engine = innodb ;
帶關聯刪除的外鍵:on delete cascade
mysql> create table xingzheng(id int,admin char(10),foreign key (admin) references t4(manager) on delete cascade) engine = innodb;