SQL分类
1)DDL(Data Definition Language)数据库定义语言【操作数据库和表的】
用来定义数据库对象:数据库,表,列等。
关键字:create,delete,update 等
2)DML(Data Manipulation Language)数据操作语言【操作表中数据】
用来对数据库中表的数据进行增删改。
关键字:insert,delete,update 等
3)DQL(Data Query Language)数据查询语言【查询表中数据】
用来查询数据库中表的记录(数据)
关键字: select,where等
4)DCL(Data control Language)数据控制语言【管理用户】
用来定义数据库的访问权限安全级别,及创建用户。
关键字:GRANT,REVOKE 等
1.DDL(Data Definition Language)数据库定义语言
操作数据库CRUD
1.C(create):创建
*创建数据库
*create database 数据库名字
*事先进行判断要创建的数据库是否存在
*create database if not exists dbq;
*手动设置字符集
*cteate database db2 character set gbk;
2.R(Retrieve):查询
*查询所有数据库的名称:
*show databases;
*查看某个数据库的字符集:查询某个数据库的创建语句
*show create database 数据库名称
3.U(update):修改
*修改数据库的字符集
*alter database 数据库名称 character set 字符集名称;
4.D(delete):删除
*删除数据库
*drop database 数据库名称;
*判断数据库是否存在,存在在删除
drop database if exists 数据库名称;
5,使用数据库
*查询当前正在使用的数据库名称
*Select database();
*使用数据库
*use 数据库名称
操作表
1.C(create):创建
1.语法:create table 表名(
列名1 数据类型1,
列名2 数据类型2,
.....
列名n 数据类型n
);
*注意:最后一列,不需要加逗号(,)
*数据类型:
1.int:整数类型
2.double:小数类型
3.date:日期,只包含年月日
4.datetime:日期,包含年月日,时分秒
5。timestamp;时间戳类型,包含年月日时分秒
*如果不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,
来自动赋值
6.varchar:字符串
*复制表
create table stu like student;
2.R(Retrieve):查询
*查询某个数据库中所有的表名称;
*show tables;
*查询表结构
*desc 表名
3.U(update):修改
1.修改表名:
alter table 表名 rename to 新的表名
2.修改表的字符集:
alter table 表名 character set 字符集名称
3.添加一列
alter table 表名 add 列名 数据类型;
4.修改列名称 类型
alter table 表名 change 列名 新列名 新数据类型
alter table 表名 modify 列名 新数据类型
5.删除列
alter table 表名 drop 列名
4.D(delete):删除
*drop table 表名;
*drop table if exists 表名;
2.DML(Data Manipulation Language)数据操作语言
1.添加数据
*insert into 表名(列名1,列名2,...列名n)values(值1,值2,....,值n);
2.删除数据
*delete from 表名【where 条件】,若不加具体条件,则删除表中全部数据
truncate table student; --删除表,然后再创建一个一模一样的空表
3.修改数据
*update 表名 set 列名1=值1,列名2 =值2,... [where 条件];
*如果不加任何条件,将会把表中的所有记录都修改。
3.DQL(Data Query Language)数据查询语言
1:语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
去除重复的结果集
解决:distinct
Select Distinct 列名 from 表名;
注意:
如果有null参与的运算,列表+列表的值为null
解决:ifnull()
select math 数学, english 英语, math + ifnull(english,0) as 总分 from student;
//取别名 as 或者空格
条件查询
1.where子句后跟条件
2.运算符 >,<,<>,!=...
3.between and :两者之间
4.in:集合
5.like:模糊查询
占位符:
下划线 _ :单个任意字符
百分号 % :多个任意字符
6.is NULL ,is not null
[null值不能使用 =(!=) 判断]
7.and or not
1.排序查询
语法: order by 排序字段1 排序方式1,排序字段2 排序方式2....
默认 asc(升序)
Desc(降序)
2.聚合函数:将一列数据作为一个整体,进行纵向计算
1.count:计算个数
2.max:最大值
3.min:最小值
4.sum:总和
5.avg:平均值
【注意:聚合函数的计算,会排除null值】
解决:ifnull()
3.分组查询
语法: group by 分组字段;
注意:1.分组之后查询的字段:分组字段or聚合函数;
2.where和having 的区别
a.)where在分组之前进行限定,如果不满足条件,则不参与分组
b.)having 在分组之后进行限定,如果不满足结果,则不会被查询出来
c.)where后不可以跟聚合函数,having可以进行聚合函数的判断。
4.分页查询
语法:limit 开始的索引,每页查询的条数
Select * from student limit 0,3; --第一页
Select * from student limit 3,3; --第二页
公式:开始的索引 =(当前的页码 - 1)*每页显示的条数
分页操作是一个“方言”。limit只能在MySQL里面用
4.DCL(Data control Language)数据控制语言【管理用户】
1.添加用户
a.语法:create user '用户名'@'主机名' identified by '密码';
2.删除用户
a.语法:drop user '用户名'@'主机名'
3.修改用户密码
a.update user set password = password('新密码') where user = '用户名';
b.set password for '用户名'@'主机名' = password('新密码');
*mysql中忘记了root用户的密码
1.cmd --> net stop mysql(需要管理员权限)
2.使用无验证方式启动mysql服务
mysql --skip-grant-tables;
3.大开新的cmd窗口 输入mysql
4.改用户密码
5.启动任务管理器结束掉mysqld服务
6.启动服务 net start mysql(管理员权限)
4.查询用户:
a.切换到mysql数据库
use mysql;
b.查询user表
select * from user;
*通配符:%表示可以在任意主机使用用户登陆数据库
*权限管理:
1.查询权限
show grants for '用户名'@'主机名';
2.授予权限
grants 权限列表 on 数据库.表名 to '用户名'@'主机名';
授予所有权限 grants ALL on *.* to '用户名'@'主机名';
3.撤销权限
revoke 权限列表 on 数据库.表名 from '用户名'@'主机名';
————————
在这里我要感谢黑马程序员提供的免费学习资料。谢谢!!