目录
1.SQL分类
2.SQL-DDL
2.1 数据库操作
查询
创建
删除
使用某个数据库
2.2 数据表操作
创建表
查询表
修改表
3.SQL-DML(增删改)
3.1 插入
3.2 修改
3.3 删除
4.SQL-DQL(查)
4.1 基础查询
4.2 条件查询
4.3 聚合函数查询
4.4 分组查询
4.5 排序查询
4.6 分页查询(MySql)
4.7.DQL执行顺序
5.SQL-DCL
5.1 用户管理
创建用户
修改密码
删除用户
5.2 用户权限
查询权限
授予权限
撤销权限
记录SQL数据库的学习笔记
1.SQL分类
基本分类如下表:
分类 | 全称 | 说明 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户,控制数据库的访问权限 |
2.SQL-DDL
2.1 数据库操作
查询
查询所有的数据库
show databases;
创建
创建数据库
create database cat;
这样就代表创建成功了
drop database if exists cat;
也可以这样创建数据库
检测是否有此数据库,有则创建,没有则不创建,且不会报错
create database if not exists cat;
删除
删除数据库
drop database cat;
为了不报错可以这样,删除不存在的数据库时
drop database if exists cat;
使用某个数据库
use cat;
查询正在使用的数据库
select database();
2.2 数据表操作
创建表
create table tb_user(
id int comment '标号',
name varchar(50),
age int,
gender varchar(1)
) comment '用户表';
comment 注释可选可不选
查询表
查询所有的数据库中的表
show tables;
查询具体的表结构
desc tb_user;
查询具体的建表语句,为了看清楚注释
show create table tb_user;
修改表
添加字段
alter table tb_user add password varchar(50) comment '密码';
修改字段名和字段类型
alter table tb_user 旧字段名 新字段名 varchar(255);
删除字段
alter table tb_user drop username;
修改表名
alter table 旧表名 rename to 新表名;
删除表
drop table if exists 表名;
删除表并重新创建该表(删除了所有的字段,需要重新创建)
truncate table 表名;
3.SQL-DML(增删改)
3.1 插入
插入数据(根据字段插入)
insert into tb_user (id, name, age, gender) values (1,'张三',10,'男');
全部插入,必须要有所有的字段,且需要根据顺序
insert into tb_user values (2,'李四',10,'男');
3.2 修改
where 后面代表条件(如果不带条件,则会影响所有的数据)
update tb_user set name = '王五' where id = 1;
3.3 删除
delete from tb_user where id = 1;
4.SQL-DQL(查)
4.1 基础查询
查询所有字段
select * from 表名;
查询指定字段
select name,id,gender from 表名;
查询指定字段并起别名
select workaddress as '工作地址' from 表名;
查询指定字段并做去重处理
select distinct workaddress as '工作地址' from 表名;
4.2 条件查询
可以携带的条件
比较运算符号 | 功能 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
BETWEEN ... AND ... | 在某个范围之内(含最小值和最大值) |
IN(...) | 在in之后的列表中的值,多选一 |
LINK 占位符 | 模糊匹配('_'匹配单个字符,'%'匹配任意个字符) |
IS NULL | 是NULL的字段 |
逻辑运算符 | 功能 |
---|---|
AND 或 && | 并且(多个条件同时成立) |
OR 或 || | 或者(多个任意条件成立一个) |
NOT 或 ! | 非 |
age小于20的所有数据
select * from emp where age < 20;
查询没有携带某个字段的数据
select * from emp where idcard is null;
配合not使用
select * from emp where idcard is not null;
between and 的使用(查询age在15--30的数据)
select * from emp where age between 15 and 30;
in的使用(下面二条命令得到的效果是一样的)
select * from emp where age=18 or age=20 or age=90;
select * from emp where age in(18,20,90);
模糊匹配(查询的name为3个字符的数据)
select * from emp where name like '___';
4.3 聚合函数查询
常见的聚合函数
函数名 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
语法:
select 聚合函数(字段列表) from 表名;
查询age<30的所有数据总和
select count(*) from emp where age < 30;
查询平均年龄
select avg(age) from emp;
4.4 分组查询
语法
select 字段列表 from 表名 where 条件 group by 分组字段名 having 分组后过滤条件;
where与having区别:
执行时机不同: where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
判断条件不同: where不能对聚合函数进行判断,而having可以。
根据性别分组,统计男性员工和女性员工的数量
select gender,count(*) from emp group by gender ;
根据性别分组,统计男性员工和女性员工的平均年龄
select gender, avg(age) from emp group by gender;
查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
address_count是统计数量取得别名
select workaddress,count(*) address_count from emp where age < 45 group by workaddress having address_count >= 3;
4.5 排序查询
select 字段列表 from 表名 order by 字段1 排序方式1, 字段2 排序方式2;
升序排序 (asc) 默认
根据年龄升序排序
select * from emp order by age;
降序排序
select * from emp order by age desc;
4.6 分页查询(MySql)
不同数据库可能字段会不一样
select 字段列表 from 表名 limit 起始索引,查询记录数;
查询前十条数据
select * from emp limit 0,10;
4.7.DQL执行顺序
①:from
②:where
③:group by,having
④:select
⑤:order by
⑥:limit
5.SQL-DCL
mysql数据库的user表在,mysql数据库下的user表中
5.1 用户管理
创建用户
刚创建的用户是没有任何权限的
只能在本机localhost访问
create user 'itcast'@'localhost' identified by '123456';
设置任意主机访问
create user 'itcast'@'%' identified by '123456';
修改密码
alter user 'itcast'@'localhost' identified with mysql_native_password by '123';
删除用户
drop user 'itcast'@'localhost';
5.2 用户权限
查询权限
show grants for 'root'@'localhost';
授予权限
给用户授予特定数据库的所有权限:
这将授予用户在指定数据库的所有权限,包括SELECT、INSERT、UPDATE、DELETE等。
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
给用户授予特定表的特定权限:
这将只授予用户在指定表中的SELECT和INSERT权限。
GRANT SELECT, INSERT ON database_name.table_name TO 'username'@'localhost';
给用户授予所有数据库的某些权限:
这将授予用户在所有数据库上执行CREATE、DROP和ALTER等操作的权限。
GRANT CREATE, DROP, ALTER ON *.* TO 'username'@'localhost';
给用户授予所有数据库的所有权限:
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';
撤销权限
撤销用户对特定数据库的所有权限:
这将撤销用户在指定数据库上的所有权限。
REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'localhost';
撤销用户对特定表的特定权限:
这将撤销用户在指定表上的SELECT和INSERT权限。
REVOKE SELECT, INSERT ON database_name.table_name FROM 'username'@'localhost';
撤销用户对所有数据库的所有权限:
REVOKE ALL PRIVILEGES ON *.* FROM 'username'@'localhost';