——————————————————————————————————————————————————
整形类型:
create database db37; 创建一个db37的表来验证
二 基本数据类型之整型:
1、作用:id号,各种号码,年龄,等级
2、分类:
(1)tinyint(**)
(2)int (*****)
(3)bigint(***)
3、测试:默认整型都是有符号的
验证(1)
create table t1(x tinyint);
insert into t1 values(128),(-129);
create table t2(x tinyint unsigned);
insert into t2 values(-1),(256);
验证(2)
create table t3(x int unsigned);
#4294967295
insert into t3 values(4294967296);
create table t4(x int(12) unsigned);
insert into t4 values(4294967296123);
4、强调:对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制(其他所有数据类型都是存储限制)
所以在创建表示,如果字段采用的是整型类型,完全无需指定显示宽度,
默认的显示宽度,足够显示完整当初存放的数据
# 显示时,不够8位用0填充,如果超出8位则正常显示
create table t5(x int(8) unsigned zerofill);
insert into t5 values(4294967296123);
insert into t5 values(1);
————————————————————————————————————————————————————————
补充说明:
# 查看sql_mode
mysql> show variables like "%sql_mode%";
+----------------------------+---------------------+
| Variable_name | Value |
+----------------------------+---------------------+
| binlogging_impossible_mode | IGNORE_ERROR |
| block_encryption_mode | aes-128-ecb |
| gtid_mode | OFF |
| innodb_autoinc_lock_mode | 1 |
| innodb_strict_mode | OFF |
| pseudo_slave_mode | OFF |
| slave_exec_mode | STRICT |
| sql_mode | STRICT_TRANS_TABLES |
+----------------------------+---------------------+
8 rows in set (0.00 sec)
#修改sql_mode为严格模式:在该模式下,如果插入的数据超过限制,则会立即报错
mysql> set global sql_mode="strict_trans_tables";
PS:程序能干的事情尽量不要让数据库干!!!!
——————————————————————————————————————————————————————————————
浮点类型:
作用:存储身高、体重、薪资
分类:
float (*****)
double (**)
decimal (**)
测试:
#相同点
#1、对于三者来说,都能存放30位小数,
#不同点:
1、精度的排序从低到高:float,double,decimal
2、float与double类型能存放的整数位比decimal更多
create table t9(x float(255,30));
create table t10(x double(255,30));
create table t11(x decimal(65,30));
insert into t9 values(1.111111111111111111111111111111);
insert into t10 values(1.111111111111111111111111111111);
insert into t11 values(1.111111111111111111111111111111);
mysql> select * from t9;
+----------------------------------+
| x |
+----------------------------------+
| 1.111111164093017600000000000000 |
+----------------------------------+
1 row in set (0.00 sec)
mysql> select * from t10;
+----------------------------------+
| x |
+----------------------------------+
| 1.111111111111111200000000000000 |
+----------------------------------+
1 row in set (0.00 sec)
mysql> select * from t11;
+----------------------------------+
| x |
+----------------------------------+
| 1.111111111111111111111111111111 |
+----------------------------------+
1 row in set (0.00 sec)
——————————————————————————————————————————————————类型————
字符串类型:
1、作用:姓名,地址,描述类的信息
2、分类:
char 定长
varchar 变长
3、测试:字符的宽度限制单位是字符个数
create table t12(x char(4)); # 超出4个字符则报错,不够4个字符则用空格补全成4个字符
create table t13(y varchar(4));# 超出4个字符则报错,不够4个字符那么字符有几个就存几个
insert into t12 values('hello');
insert into t13 values('hello');
insert into t12 values('a'); #'a '
insert into t13 values('a'); #'a'
set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
select char_length(x) from t12; #4
select char_length(y) from t13; #1
# 注意:
针对char类型,mysql在存储时会将数据用空格补全存放到硬盘中
但会在读出结果时自动去掉末尾的空格,因为末尾的空格在以下场景中是无用
mysql> select * from t14 where name="lxx"; # name字段明确地等于一个值,该值后填充空格是没有用
mysql> select * from t14 where name like "lxx"; # name字段模糊匹配一个值,该值后填充空格是有用的
# 对比char与varchar
name char(5)
# 缺点:浪费空间
# 优点:存取速度都快
egon alex lxx wxx yx
name varchar(5)
# 缺点:存取速度都慢
# 优点:节省空间
(1bytes+egon)(1bytes+alex)(1bytes+lxx)
——————————————————————————————————————————————————————————————
日期类型:
1、作用:时间相关
2、分类:
date:1999-01-27
time: 11:11:11
datetime:1999-01-27 11:11:11
year:1999
3、测试
create table student(
id int,
name char(16),
born_year year,
birth date,
class_time time,
reg_time datetime
);
insert into student values(1,'egon','2000','2000-01-27','08:30:00','2013-11-11 11:11:11');
————————————————————————————————————————————————————
枚举与集合类型:
作用与分类:
枚举enum,多选一个
集合set,多选多
测试
create table teacher(
id int,
name char(16),
sex enum('male','female','others'),
hobbies set('play','read','music','piao')
);
——————————————————————————————————————————————————