MYSQL学习笔记

前言

我的笔记中会用一些字母代替文字如以下:
n. -> 数据库/表名称
v. -> 附加属性

附加属性内容

附加属性 解释
null 数据可空
notnull 数据不可空
primary key 设置主键
auto_increment 自增
unique 不能出现重复

数据类型

函数方法

绝对值abs()
向下取整floor()
向上取整ceil()

insert(s1,index,len,s2)
s1是目标字符串,index是下标(从1开始),len上添加长度,s2是追加内容
upper()字母转大写
lower()字母转小写
left(s,len)返回s字符串前的len个字符
right(s,len)返回s字符串后的len个字符
substring(s,index,len)截取s字符串,从index开始,长度为len字符
reverse()反方向阅读

curdate()获取日期函数
curtime()获取时间
now()获取当前时间
datediff(d1,d2)日期加n天后的日期
subdate(d,n)和上个方法相反

count()根据某个字段统计总记录数
sum()计算某个字段值总和
avg()求某个字段值的值平均值
max()求某个字段值最大值
min()求某个字段值最小值

trim() 清除空格
IF(布尔条件,真条件执行,假条件执行)
distinct 字段组 去重复



创建删除与使用数据库

1
2
3
create database n.; 创建数据库
drop database n.; 删除数据库
use n.; 使用数据库


1
2
3
4
5
6
7
8
9
创建一张表
create table n.(
字段名称 数据类型 v.,
字段名称 数据类型 v.,
..... ....
字段名称 数据类型 v.
);
drop table n.;删除表
desc n.; 查询表结构
命令 解释
alter table n. add 字段名称 数据类型 新增字段
alter table n. change 旧字段名称 新字段名称 数据类型 修改字段名称
alter table n. drop 字段名称 删除字段
alter table n. modify 字段名称 数据类型 附加属性 修改字段的类型以及附加属性
1
2
insert into n.(字段名称1,字段名称2,...) values(值1,值2,...),(值3,值4,...); 新增多条或单条数据
insert into n. values(所有字段值); 新增数据,此方法省略了书写字段名称,则代表了填写所有字段
1
2
delete from n.; 删除表内所有数据
delete from n. where 字段名称 = 值; 删除指定字段值的整行字段
1
2
update n. set 字段名称 = 值,字段名称 = 值,...;直接修改所有提供字段的值
update n. set 字段名称 = 值,字段名称 = 值,... where 字段名称 = 值; 修改指定字段的值


查询

1
2
select 字段组或* from n.; 查询来自n.的字段所有值`*表示所有字段`
select 字段组或* from n. where 字段名称 = 值; 带条件的查询
1
select abs(字段名称) from n.; abs函数包裹单个字段,使用函数查询可以将查询的数据根据函数方法进行修改
1
2
3
select 字段组 from n. group by 字段名称; 根据字段名称进行分组查询
在分组查询中如果需要附加条件的话,不能用where而是使用having
select 字段组 from n. group by 字段名称 having 字段名称=字段值;
1
2
select * from n. order by 字段名称 desc; 降序查询字段值排序
select * from n. order by 字段名称 asc; 升序查询字段值排序

普通的关联

1
select * n.1,n.2; 同时查询两个表列出内容

交叉连接

1
select * from n.1 cross join n.2; 将两表交叉连接查询

内连接

1
2
3
4
5
select * from n.1 inner join n.2; 内连接查询
内连接时应当使用on方法将内连接的两个表中相同的字段进行相等,这样才可以查询到正确的值
select * from n.1 inner join n.2 on n.1.sno=n.2.sno; 以sno为相同字段进行连接查询
语法:
select * from n.1 inner join n.2 on n.1.字段名称=n.2.字段名称 inner join n.n on n.2.字段名称=n.n.字段名称;

还有外连接
left join左外连接
right join右外连接