mysql
1,SQL通用语法
2,SQL分类
一 DDL (操作数据库中表结构,表中字段)
二 DML(完成数据的增删改)
三 DQL(数据查询语言,用来查询数据库中的记录)
四 DCL
DDL ——数据库操作
1 查询
查询所有数据库
show databases;
查询当前数据库
select database();
2 创建
create database 名称;
3 删除
drop database;
4 使用
use 数据库名;
DDL——表操作——查询
查询当前数据库所有表
show tables; 需要先用use 在这个数据库 才能查询当前数据库所有表
查询表结构
desc 表名;
查询指定表的建表语句
show create table;
DDL——表操作——创建
create table 表名(
字段 1 字段1类型[comment 字段1注释]
.
.
)[comment 表注释];
DDL——表操作——修改
1 添加字段
alter table 表名 add 字段名 类型(长度)。
2修改数据类型
alter table 表名 modify 字段名 新数据类型。
3修改字段名和字段类型
alter table 表名 change 就字段名 新字段名 类型长度。
4删除字段
alter table 表名 drop 字段名。
5 修改表名
alter table 表名 rename to 新表名。
DDL——表操作——删除
1 删除表
drop table 表名
2删除指定表,并重新创建该表
truncate table 表名。
DML
1添加数据(insert)
2修改数据(update)
3删除数据(delete)
DML——添加数据
1给指定段添加数据
insert into 表名(字段名1,字段名2) values(值1,值2)
2给全部字段添加数据
insert into 表名 values(值1,值2)
3批量添加数据
insert into 表名(字段1,字段2...) values(值1,值2..),(值1,值2..)
insert into 表名values(值1,值2..),(值1,值2..),(值1,值2...)
DML——修改数据
1update 表名 set 字段名1 = 值1,字段名2 = 值2,...[where条件]
修改语句可以有条件,也可以无条件,如果没条件,则会修改整张表的所有数据
DML——删除数据
delete from 表名 [where条件]
delete 语句的条件可以有也可以无,如果没条件,会删除整张表的数据
delete语句不能删除某一个字段的值(可以用update)
DQL——语法
1基本查询
2条件查询(where)
3聚合函数(count,max,min,avg,sum)
4分组查询(group by)
5排序查询(order by)
6分页查询(limit)
DQL——基本查询
1、查询多个字段
selete 字段1,字段2,字段3,....from 表名;
selete * from 表名;(*代表所有字段)
2、设置别名
select 字段1[as别名1],字段2[as别名2]...from 表名;(as可省略)
3、去除重复记录
select distinct 字段列表 from 表名;
DQL——条件查询
1、select 字段列表 from 表名 where 条件表名
between ..and..再某范围内
in 在in之后的列表中的值,多选一
like 占符位 _匹配单个字符,%匹配任意字符
DQL——聚合函数(将一列数据作为一个整体,进行纵向计算)
1、常见聚合函数
count 统计数量
max 最大值
min 最小值
avg 平均值
sum 求和
2、语法
select 聚合函数(字段列表) from 表名;
DQL——分组查询
1、语法
select 字段列表 from 表名 where条件 group by 分组字段名
having分组后过滤条件;
2、where与having区别
执行时机不同: where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤
判断条件不同: where不能对聚合函数进行判断,having可以。
注意
执行顺序:where > 聚合函数 > having
分组之后,查询字段一般为聚合函数和分组字段,查询其他字段无任何意义
DQL——排序查询
1、语法
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2.
升序 asc(默认) 降序 desc
DQL——分页查询
1、语法
select 字段列表 from 表名 limit 起始索引,查询记录数(每页展示记录);
注意:
1、开始索引从0开始,起始索引=(查询页码-1)*每页显示记录数。
2、分页查询是数据库的方言,不同的数据库有不同的实现,mysql中是limit。
3、如果查询的是第一页数据,起始索引可以省略,可以直接写为 limit 10。
DQL——执行顺序
select 4
字段列表
from 1
表明列表
where 2
条件列表
group by 3
分组列表
having 3
分组条件列表
order by 5
排序字段列表
limit 6
分页参数
DCL——介绍
用来管理数据库 用户,控制数据库的访问权限
DCL——管理用户
1、查询用户
use mysql;
select * from user;
2、创建用户
create user '用户名'@'主机名' identified by '密码';
3、修改用户密码
alter user '用户名'@'主机名' identified with my_native_password by '新密码';
4、删除用户
drop user '用户名'@'主机名';
主机名可以使用%通配。
这类sql开发人员操作少,主要是数据库管理员使用。
DCL——权限控制
all,all privileges 所有权限
select 查询数据
insert 插入数据
update 修改数据
delete 删除数据
alter 修改表
drop 删除数据库/表/视图
create 创建数据库/表
1、查询权限
show grants for '用户名'@'主机名';
2、授予权限
grant 权限列表 on 数据库.表名 to '用户名'@'主机名';
3、撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
函数
字符串函数
数值函数
日期函数
流程函数
字符串函数
函数 功能
concat(s1,s2,,,sn) 将其拼接成字符串
lower(str) 将字符串全部转为小写
upper(str) 将字符串全部转为大写
lpad(str,n,pad) 左填充,用字符串pad对str的左边进行填充,达到n个字符串的长度
rpad(str,n,pad) 右填充,用字符串pad对str的右边进行填充,达到n个字符串的长度
trim(str) 去掉字符串头部和尾部的空格
substring(str,start,len) 返回字从符串str从start位置起的len个长度的字符串
select 函数;
数值函数
函数 功能
ceil(x) 向上取整
floor(x) 向下取整
mod(x,y) 返回x/y的模
rand() 返回0~1内随机数
round(x,y) 求参数x的四舍五入的值,保留y位小数
日期函数
curdate() 返回当前日期
curtime() 返回当前时间
now() 返回当前日期和时间
year(date) 获取指定date的年份
month(date) 获取指定date的月份
day(date) 获取指定date的日期
date_add(date,interval expr type) 返回一个日期/时间值加上一个时间间隔expr后的时间值
datediff(date1,date2) 返回起始时间date1 和结束时间date2直接的天数
流程控制函数
if(value,t,f) 如果value为ture,则返回t,否则返回f
ifnull(value1,value2) 如果value1不为空,返回value1,否则返回value2
case when [vall] then [res1]..else [default] end 如果val1为ture,返回res1,否则返回default默认值
case [oxpr] when [val1] then [res1]...else[default] end 如果expr的值等于val1,返回res1,否则返回default没默认值
约束
非空约束 限制该字段的数据不能为null not null
唯一约束 保证该字段的所有数据都唯一,不重复的 unique
主键约束 主键一行数据的唯一标识,要求非空且唯一 primary key
默认约束 保存数据时,如果未指定该字段的值,则采用默认值 default
检查约束 保证字段值满足一个条件 check
外键约束 用来让两张表的数据之间建立连接,保证数据的一致性和完整性 foreing key
///约束作用于表中字段上,可以在创建表/修改表时添加约束
id id唯一标识 int 主键,且自动增长 primary,auto_increment
name 姓名 varchar不为空,且唯一 not null,unique
age 年龄 int 大于零,且小于等于120 check
status 状态 char 如果没有指定该值,默认为1 default
gender 性别 char 无
外键约束
让两个表的数据之间建立连接,从而保证数据的一致性和完整性
添加外键
create table 表名(
字段名 数据类型。。。
[constarint][外键名称]foreing key(外键字段名) references 主表(主表列名)
)
alter table 表名 add constraint 外键名称 foreing key(外键字段名) references 主表(主表列名);
删除外键
alter table 表名 drop foreing key 外键名称;
外键约束
删除/更新行为
no action 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新(与restrict一致)
restrict 当在父表中删除/更新对应记录时,首先检查该记录是否对应外键,如果有则不允许删除/更新(与no action一致)
cascade 同上,如果有,则也删除/更新外键在子表中的记录
set null 同上,如果有则设置在子表中该外键值为null(这就要求该外键允许取null)
set default 父表有变更时,子表将外键列设置成一个默认的值(innodb不支持)
alter table 表名 add constraint 外键名称 foreing key(外键字段) references 主表名(主表字段名) on update cascade on delete cascade;