1.常用数据类型
1.1数字型
1.1.1.整数型
重要: tinyint int(数据类型不同,表示范围也不同)
tinyint 一个字节
int 四个字节
例子:
create table `student1`(
`id` int unsigned,
`name` varchar(20),
`score` tinyint unsigned
)engine=innodb charset=utf8 comment='学生表1';
unsigned:(无符号)确定为正整数
insert into `student1` values(1,'吕布',100);#成功
insert into `student1` values(-1,'吕布',100);#失败
insert into `student1` values(4294967295,'吕布',100);#成功
insert into `student1` values(4294967296,'吕布',100);#失败
insert into `student1` values(1,'吕布',255);#成功
insert into `student1` values(1,'吕布',256);#失败
1.1.2.小数型
浮点数: float,double
定点数: decimal
数据类型(M,D)
M:总长度
D:小数位长度
1.2字符串类型
1.2.1.char定长字符串
char(M):定的长度是多少就占多少
注意:如果是char类型,长度确定,占用空间就确定
1.2.2.varchar可变字符串
varchar(M):随着保存数量大小,改变空间占用大小
注意:如果是varchar类型,随着存储数据而改变占用空间
如何选择:
如果保存长度小于255,且长度固定,则使用char()
如果保存长度小于255,且长度不固定,则使用varchar(),如果超过255,则使用"文本"类型
1.3.文本内容
常用的:
text 2个字节 表示65535个
longtext 4个字节 表示42亿个
1.4.时间日期
datetime 日期与时间 范围: 0001-9999年
timestamp 时间戳 范围: 1970-2038年
create table `student2`(
`id` int unsigned,
`name` varchar(20),
`birthday` datetime,
`end_time` timestamp
)engine=innodb charset=utf8 comment='学生表';
datetime:时间固定
timestamp:时间根据修改时间自动生成
2.字段属性
2.1.null属性
null 允许为空
notnull 不能为空
2.2.default属性
默认值
2.3.主键 primary key
1.用于唯一标识一条记录
2.一个表只能有一个主键
3.主键不能为空
4.主键值不能重复
2.4.自动增长 auto_increment
跟主键一起使用
2.5.唯一 unique key
一个表有一个主键,但一个表可以有多个唯一键
create table `student2`(
`id` int unsigned primary key auto_increment,
`name` varchar(20) not null comment '姓名',
`Nick_name` varchar(20) not null unique key comment '昵称',
`age` int default 20 comment '年龄'
)engine=innodb charset=utf8 comment='学生表3';
3.查询select
3.1.select查询
all 选项(默认的)
distinct 选项(去重)
针对查询结果进行去重
注意:只有全部字段的值全部一样,才算重复
3.2.字段表达式
通配符 *
* 匹配所有字段
select * from `表名`;
别名 as
select name as '姓名' from `stu`;
select name '姓名' from `stu`;
聚合函数
count() 统计,计数
sum() 求和
avg() 求平均值
max() 求最大值
min() 求最小值
create table `stu`(
id int,
age int
)engine=innodb charset=utf8 comment='年龄表';
insert into `stu` values(1,10),(2,15),(3,18),(4,30),(5,20);
4.连接查询
连接查询分类:
内连接: inner join 简写为 join
将左右两张表中能匹配上的记录查询出来
外连接:
左外连接 left join
select * from `class` left join `student0` on `student0`.`class_id`=`class`.`class_id`;
将左表中与右表匹配不上的记录也查询出来.
右外连接 right join
select * from `student0` right join `class` on `student0`.`class_id`=`class`.`class_id`;
将右表中与左表匹配不上的记录也查询出来.
using
使用一个字段来作为连接条件,两张表的同名字段
select * from `student0` right join `class` using(class_id);