参考:黑马程序员MySQL基础视频链接
数据库基本操作
启动与停止
1.第一种方式:
1>以管理员身份运行cmd
2>在命令行窗口中输入:
启动:net start mysql80
停止:net stop mysql80
2.第二种方式:
1>Win+R快捷方式打开如下:
输入:services.msc
2>找到MySQL80
3>双击:
4>这里我选择的是开机自启动
客户端连接
1.第一种方式:通过MySQL提供的客户端命令行工具
2.第二种方式:通过命令行工具执行命令
mysql [-h 127.0.0.1] [-P 3306] -u 用户 -p
注意:
1.[]中可省略
2.使用这种方式时,需要配置PATH环境变量
SQL
1.DDL(数据定义语言)
数据库操作
查询所有数据库:
show databases;
查询当前数据库:
select datebase();
创建数据库:
create database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];
删除数据库:
drop database [if exists] 数据库名;
使用数据库:
use 数据库名;
表操作
查询:
查询当前数据库所有表:
show tables;
查询表结构:
desc 表名;
查询指定表的建表语句:
show create table 表名;
创建:
create table 表名(
字段1 字段1类型[comment '注释'],
字段2 字段2类型[comment '注释'],
字段3 字段3类型[comment '注释'],
.......
字段n 字段n类型[comment '注释']
) [comment '注释'];
修改:
添加字段:
alter table 表名 add 字段名 类型(长度) [comment '注释'] [约束];
修改数据类型:
alter table 表名 modify 字段名 新数据类型(长度);
修改表名:
alter table 表名 rename to 新表名;
删除:
删除表:
drop table [if exists] 表名;
删除指定表并重新创建该表:
truncate table 表名;
2.DML(数据操作语言)
添加数据(insert)
给指定字段添加数据:
insert into 表名 (字段1,字段2......) values(值1, 值2......);
给全部字段添加数据:
insert into 表名 values(值1, 值2......);
批量添加数据:
insert into 表名 (字段1,字段2......) values(值1, 值2......),(值1, 值2......),(值1, 值2......);
insert into 表名 values(值1, 值2......),(值1, 值2......),(值1, 值2......);
注意:
1.插入数据时要按注意顺序
2.字符串和日期型数据应该包含在引号中
3.插入的数据大小要合法
修改数据(update)
update 表名 set 字段1=值1,字段2=值2......[where 条件];
注意:
如果没有条件,则会修改整张表
删除数据(delete)
delete from 表名 [where 条件]
注意:
1.如果没有条件,则会删除整张表的数据
2.delete不能删除某一字段的值
3.DQL(数据查询语言)
编写顺序:
select 字段列表
from 表名列表
where 条件列表
group by 分组字段列表
having 分组后条件列表
order by 排序字段列表
limit 分页参数;
基本查询
查询多个字段:
select 字段1,字段2,字段3...from 表名;
select * from 表名;
设置别名:
select 字段1[as 别名1],字段2 [as 别名2]......from 表名;
去除重复记录:
select distinct 字段列表 from 表名;
条件查询
语法:
select 字段列表 from 表名 where 条件列表;
条件:
比较运算符 | 功能 |
---|---|
> | |
>= | |
< | |
<= | |
= | |
<> 或 != | 不等于 |
between...and... | 在某个范围之内 |
in(...) | 在in之后的括号中,多选一 |
like 占位符 | 模糊匹配(_匹配单个字符,%匹配任意个字符) |
is null | |
and 或 && | 并且 |
or 或 || | 或 |
not 或 ! | 非 |
eg:
#二、条件查询
#select 字段列表 from 表名 where 条件列表;
#1.查询年龄等于25的员工
select * from emp where age = 25;
#2.查询年龄小于20的员工
select * from emp where age < 20;
#3.查询没有身份证信息的员工
select * from emp where idcard is null;
#4.查询有身份证信息的员工
select * from emp where idcard is not null;
#5.查询年龄不等于18的员工
select * from emp where age != 18;
select * from emp where age <> 18;
#6.查询年龄在20岁到25岁(包含25)之间的员工信息
select * from emp where age > 20 && age <= 25;
select * from emp where age > 20 AND age <= 25;
#两端都包含
select * from emp where age between 15 and 25;
#7.查询性别为女且年龄小于25的员工信息
select * from emp where gender = '男' && age < 25;
#8.查询年龄等于15或者20或者25的员工
select * from emp where age = 15 || age = 20 || age = 25;
select * from emp where age = 15 or age = 20 or age = 25;
select * from emp where age in(15, 20, 25);
#9.查询姓名为两个字的员工 模糊匹配
select * from emp where name like '___';
#10.查询身份证号最后一位为X的员工
select * from emp where idcard like '%X';
聚合函数
select 聚合函数(字段列表) from 表名;
注意:
对一列进行计算 所有null值不参与聚合函数的计算
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
eg:
#三、聚合函数
#对一列进行计算 所有null值不参与聚合函数的计算
#select 聚合函数(字段列表) from 表名;
#1.统计数量
select count(*) from emp;
#2.统计企业员工的平均年龄
select avg(age) from emp;
#3.最大年龄
select max(age) from emp;
#4.最小年龄
select min(age) from emp;
#5.统计北京地区员工年龄之和
select sum(age) from emp where workaddress = '北京';
分组查询
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];
where | 分组之前执行,不满足where条件的不参与分组,where不能对聚合函数进行判断 |
having | 分组之后对结果进行过滤,having可以对聚合函数进行判断 |
eg:
#1.根据性别分组, 统计男性与女性的数量
select gender, count(*) from emp group by gender;
#2.根据性别分组,统计男性和女性的平均年龄
select gender, avg(age) from emp group by gender;
#3.查询年龄小于25的员工, 并根据工作地址分组,获取员工数量大于等于3的工作地址
select workaddress, count(*) address_count from emp where age <= 25 group by workaddress having count(*) > 1;
排序查询
select 字段列表 from 表名 order by 字段1 排序方式1, 字段2 排序方式2;
asc | 升序(默认) |
desc | 降序 |
eg:
#1.根据年龄对公司员工进行升序排序
select * from emp order by age asc;
#2.根据年龄对公司员工进行降序排序
select * from emp order by age desc
#3.根据年龄升序 根据id降序
select * from emp order by age asc, id desc;
分页查询
select 字段列表 from 表名 limit 起始索引, 查询记录数;
eg:
#1.查询第1页员工数据,每页展示2条记录
select * from emp limit 0, 2;
#2.查询第2页员工数据,每页展示10条数据 ------>(页码 - 1)*页展示记录数
select * from emp limit 2, 2;
4.DCL
管理用户
注意:
主机名可以使用%通配
查询用户:
use mysql;
select * from user;
创建用户:
create user '用户名'@‘主机名’ identified by '密码';
修改用户密码:
alter user '用户名'@'主机名' identified with mysql_native_password by '新密码';
删除用户:
drop user '用户名'@'主机名';
权限控制
权限 | 说明 |
---|---|
all, all privileges | 所有权限 |
select | 查询数据 |
insert | 插入数据 |
update | 修改数据 |
delete | 删除数据 |
alter | 修改表 |
drop | 删除数据库/表/视图 |
create | 创建数据库/表 |
查询权限:
show grants for '用户名'@'主机名';
授予权限:
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
注意:
授权时数据库名和表名可以用*进行通配,代表所有
撤销权限:
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
如有错误,欢迎指正!!!