1绒怨、表字段類型之整型
強(qiáng)調(diào):整型的寬度是顯示寬度,無需設(shè)置,存儲寬度是固定死的
mysql> create table t5(id tinyint)
mysql> desc t4;
+-------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| id | tinyint(4) | YES | | NULL | |
+-------+------------+------+-----+---------+-------+
1 row in set (0.01 sec)
mysql> insert t4 values(128);
ERROR 1264 (22003): Out of range value for column 'id' at row 1
mysql>
mysql>
mysql> insert t4 values(127);
Query OK, 1 row affected (0.05 sec)
mysql> select * from t4;
+------+
| id |
+------+
| 127 |
+------+
1 row in set (0.00 sec)
mysql>
2、表字段類型之浮點(diǎn)類型
create table t7(x float(255,30),y double(255,30),z decimal(65,30));
insert t7 values
(1.111111111111111111111111111111,1.111111111111111111111111111111,1.111111111111111111111111111111);
3缓醋、表字段類型之日期類型
year(1901/2155)
time 時:分:秒 ('-838:59:59'/'838:59:59')
date 年:月:日 (1000-01-01/9999-12-31)
datetime 年:月:日 時:分:秒 1000-01-01 00:00:00/9999-12-31 23:59:59
timestamp 年:月:日 時:分:秒 1970-01-01 00:00:00/2037
create table t8(y year,t time,d date,dt datetime,ts timestamp);
insert t8 values(now(),now(),now(),now(),now());
create table student(
id int,
name char(10),
born_year year,
bitrh date,
reg_time datetime
);
insert student values
(1,"xiaoming","1911","1911-11-11","1911-11-11 11:11:11"),
(2,"xiaohong","1988","1988-11-11","1988-11-11 11:11:11");
insert student values
(3,"xiaolong","1999","19991010","199910101010");
注意:timestamp應(yīng)該用于記錄更新時間
在sql語句中--
是注釋的意思颁褂,如果想用datetime記錄更新時間應(yīng)該在定義該字段時在后面加上not null default now() on update now()
create table t3(
id int,
name varchar(16),
-- update_time datetime not null default now() on update now(),
update_time timestamp,
reg_time datetime not null default now()
);
insert into t3(id,name) values(1,"xiaox");
測試效果
修改之后
4席里、表字段類型之字符類型
char 定長签则,不夠則補(bǔ)全空格
看起來的特點(diǎn):
浪費(fèi)空間
讀取速度快varchar 變長,預(yù)留1-2bytes來存儲真實(shí)數(shù)據(jù)的長度
看起來的特點(diǎn):
節(jié)省空間
讀取速度慢
ps:在存儲的數(shù)據(jù)量剛好達(dá)到存儲寬度限制時拇泣,其實(shí)varchar更費(fèi)空間
總結(jié):大多數(shù)情況下存儲的數(shù)據(jù)量都達(dá)不到寬度限制噪叙,所以大多數(shù)情況下varchar更省空間,但省空間不是關(guān)鍵霉翔,關(guān)鍵是省空間 會帶來io效率的提升构眯,進(jìn)而提升了查詢效率。
ab |abc |abcd |
1bytes+ab|1bytes+abc|1bytes+abcd|
<<<<<>>>>>驗(yàn)證
create table t11(x char(5));
create table t12(x varchar(5));
insert t11 values("我擦嘞 "); -- "我擦嘞 "
insert t12 values("我擦嘞 "); -- "我擦嘞 "
t11=>字符個數(shù) 5 字節(jié)個數(shù) 11
t12=>字符個數(shù) 4 字節(jié)個數(shù) 10
set sql_mode="pad_char_to_full_length"; # 設(shè)置這個模式現(xiàn)出原形
select char_length(x) from t11;
select char_length(x) from t12;
select length(x) from t11;
select length(x) from t12;
5早龟、表字段類型之枚舉類型與集合
枚舉類型enum("a","b","c","d") 多選1
集合類型set("a","b","c","d") 多選
CREATE TABLE shirts (
name VARCHAR(40),
size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);
INSERT INTO shirts(name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');
CREATE TABLE user (
name VARCHAR(16),
hobbies set("read","jump","drink","lol")
);
insert user values("xiaoming","lol,jump");
insert user values("hhh","drink");