简介
MySQL是最流行的关系型数据库管理(relational Database Management Sysmtem)简称RDBMS
作用:
用来存储数据
结构:
数据组成表,表组成库。
登录
doc窗口登录MySQL:
mysql -uroot -ppassword
root本地登录,password数据库密码
退出MySQL:
quit;
注意:
数据库的大小写不敏感,也就是大写小写都一样
数据库操作
显示所有的数据库:
show databases;
创建数据库:
create database db_name charset=utf8; charset解决中文乱码
删除数据库:
drop database db_name;
使用某个数据库:
use db_name;
查看当前使用的数据库:
select database();
查看表结构:
desc table_name;
表操作
创建表:
create table t_name(列名 数据类型 约束条件,列名2 ...)engine innodb default charset=utf8 auto_increment=1;
t_name 表名
engine innodb 设置引擎为innodb
default charset=utf8 设置编码格式
auto_increment=1 设置自增的起始值,
上面的都可以直接用默认值的
数据类型
整型
类型名称 | 大小 | 用途 |
---|---|---|
tinyint | 1字节 | 极小整数值 |
smallint | 2字节 -32768 32767 | 小整数值 |
mediumint | 3字节 | 大整数值 |
int或integer | 4字节 -2147483648 2147483647 | 大整数值 |
bigint | 8字节 | 极大整数值 |
float | 4字节 | 单精度 浮点数值 |
double | 8字节 | 双精度 浮点数值 |
decimal | decimal(m,n) 无固定大小 | decimal(8,3) 小数 |
字符类型
类型名称 | 大小 | 用途 |
---|---|---|
char | 0-255字节 | 定长字符串 char(10)固定占用10字节 |
varchar | 0-65535字节 | 变长字符串 varchar(20) 表示最大长度 |
tinyblob | 0-255字节 | 不超过255个字符的二进制字符串 |
tinytext | 0-255字节 | 短文本字符串 |
blob | 0-65535字节 | 二进制形式的长文本数据 |
text | 0-65535字节 | 长文本数据 |
mediumblob | 0-16777215字节 | 二进制形式的中等长度文本数据 |
mediumtext | 0-16777215字节 | 中等长度文本数据 |
longblob | 0-4294967295字节 | 二进制形式的极大文本数据 |
longtext | 0-4294967295字节 | 极大文本数据 |
日期和时间类型
类型名称 | 格式 | 用途 |
---|---|---|
DATE | YYYY-MM-DD | 日期 |
TIME | HH:MM:SS | 时间 |
DATETIME | YYYY-MM-DD HH:MM:SS | 混合日期和时间 |
TIMESTAMP | YYYY-MM-DD HH:MM:SS | 混合日期和时间,时间戳 |
计算字符大小:
x**(size*8byte)/2
size:字节数,byte:位数。1字节=8byte 因为正负数,所以除2
timestamp:
格林威治时间,也就是只能表示从1970年到2038年。
表约束
对列中的数据做修饰:
primary key 主键,表中每条记录的唯一标识,一个表中必须有一个,唯一且不为空,可以联合使用
not null 非空,也就是数据不能为空
null 可空,默认是空
unique 唯一,但可为空,可联合使用
列选项:
auto_increment 自增,可与其他的联合使用
default 默认值
联合约束:
也就是上面的约束条件,可以 联合起来使用,如primary key(name,age)把name和age作为主键。
对于列的约束可以写在创建列的时候写,也可以单独写出来
如:
create table user(id int auto_increment primary key,
name varchar(20));
也可以:
create table user(id int auto_increment,
name varchar(20),
primary key(id));
表选项
engine 引擎选择,一般是innodb
default charset=utf8 设置表的字符集
auto_increment=1 设置自增的起始值
联合约束
就是表约束中数据修饰:
primary key(id,name) 以id和name做为主键
unique(id,name) 是id,name是唯一的
insert 插入数据
insert into table_name(表属性1,2,3...) values(值1,2,3...);
注意分号,每个sql语句后面都有分号
select 查询数据
select * from table_name;
*代表所有值,也可以单独写值,但必须是表中的列名
多个列名用逗号(,)隔开
可视化工具navicat
对数据库进行操作的软件。
列操作
算数运算:
+ - * / 对列的数据进行运算
列拼接:
concat(col_name,'值')
列别名:
select name as 别名 from table_name;
as可省略
列去重:
select distinct age distinct(独特的)
where子句
作用:
对数据进行筛选
语法:
where 表达式
例:
select * from table_name where age>20;
查找年龄大于二十的人的信息
表达式:
比较运算符:
= != > < >= <= <>(不等于,等同!=)
逻辑运算符:
and or
范围:
in ,not in,between a and b (a<=num<=b,包括a和b)
对于以上的,都可以联合使用,只要符合我们的逻辑,也就是逻辑不出错误,都可以。
空值判断
is null 空值
is not null 不是空值
例:
select * from table_name where name is null;
查找table_name中名字为空的。
模糊查询
% 匹配0个或多个字符,相当于正则中的*
_ 一个字符
例:
select * from table_name where name like '%a%;
查询名字中含有a字符的
like:
模糊查询,(像)
关于上面两个的用法,可以随意组合。
分页查询
limit 起始位置,读取的个数(number)
注意下标是从零开始的,也就是如果从2开始,需要写 limit 1,number;
分页查询从本质上理解:
就是从起始位置开始,读取number条数据
排序
order by 属性 排序方式
asc 升序(默认)
desc 降序
例:
order by name asc;
通过名字升序排列
聚合函数:组函数
max() 最大值
min() 最小值
sum() 求和
avg() 求平均数
count() 总数
bug问题:
select max(age),name from table_name;
结果:
最大年龄和表中第一行的名字
逻辑扭曲
分组统计:group by
分组的意思是:
把满足某一条件的数据分到同一组,也就是学生分组、员工分组等等。
用法:
group by 分组的依据
例:
select count(id) from table_name group by age;
统计每个年龄断的个数
分组限制:having子句
作用:
限制分组,也就是对分组的筛选
用法:
group by 分组的依据 having 分组的条件限制
where与having的区别:
where对总表进行筛选,放在前面
having对分组进行筛选,放在后面
如果有一个需求,where和having都可以实现的话,where效率更高
例:
select count(id) from table_name group by age having id>3;
对id大于三的人进行年龄分类,统计个数
case子句
作用:
对查询的列进行分类
用法:
case
when 条件 then 类1
when 条件 then 类2
else
类3
end as 总类
例:
select case
when age<10 then '青少年'
when age<50 then '中年'
else
'老年'
end as '年龄段',name
from table_name;
子查询
组成:
一个查询语句的结构可以是另一个查询语句的条件
两个表,employee(员工表),department(部门表)
查询部门为人事部的员工的信息
select * from employee where depart_id in(select id from where name='人事部');
其他函数
length() 获取字符的长度
lcase() 小写
ucase() 大写
trim() 去除前后的空格
now() 获取当前的日期和时间
curdate() 当前日期
curtime() 当前时间
date_format(now(),'%Y/%m/%d %H:%i:%s') 日期格式化
datebase() 数据库名称
user() 当前用户名
version() 当前服务器版本
得同sql语句联合使用