一、库的基本使用
1.创建数据库
create database 数据库名;
2.查看所有数据库:
show databases;
3.查看建库语句 :
show create database 数据库名;
4.查看当前的库
select database();
5.使用、切换数据库
use 数据库名;
6.删除数据库:
drop database if exists 数据库名;
7.数据的备份还原
数据库迁移:备份、还原
dos窗口
-- 备份 转存
mysqldump -u用户名 -p密码 数据库名 > 导出文件路径
-- 还原 登录mysql
source 导入文件路径;
二、表的基本使用
1.创建表的格式:
create table 表名(
字段名 字段类型,
字段名 字段类型,
...
);
2.常用类型:
int 整型
double 浮点型
varchar(指定长度)字符串
date 日期型
格式:yyyy-MM-dd
注意:注意变量名在左类型在右
3.查看库中的所有的表
show tables;
4.查看表结构
desc 表名;
5.查看建表语句
show create table 表名;
6.快速创建表结构:
-- 作用:快速创建一个表结构相同的表。
reate table 新表名 like 旧表;
7.添加字段
alter table 表名 add 字段名 字段类型;
8.修改字段类型
alter table 表名 modify 字段名 新类型;
9.修改字段名
alter table 表名 change 旧字段名 新字段名 字段类型;
10.删除字段
alter table 表名 drop 字段名;
11.删除表
直接删除
drop table 表名;
先判断表是否存在,若存在删除
drop table if exists 表名;
三、记录增、删、改
1.添加记录
insert into 表名(字段1,字段2......) values(值1,值2...);
2.修改记录
update 表名 set 字段名 = 字段值 where 条件;
3.删除记录
delete from 表名 where 条件;
四、记录查询
1.比较运算符
-- > < >= <= = != <>(不等于)
-- 例如:
-- 查询math分数大于80分的学生
select * from student where math >80;
2.逻辑运算符
and -- : 并且
or -- :或者
not -- : 非 ,不是的意思。通常和 in 一起使用
-- 例如:
-- 查询age大于35且性别为男的学生(两个条件同时满足)
select * from student where age > 35 and sex = '男';
3.关键字:in
-- 他的作用是挑选,只要有满足的就显示
-- 格式:
-- 字段 in (值1,值2...);
-- 例如:
-- 查询id是1或3或5的学生
select * from student where id in(1,3,5);
4.范围查询:包头保尾
-- 关键字:between :在....之间。
-- 格式:
-- 字段 between 较小的值 and 较大的值; 这种叫包头包围查询。
-- 例如:
-- 查询english成绩大于等于77,且小于等于87的学生
select * from student where english between 77 and 87;
5.模糊查询
-- 格式
字段 like '通配符字符串';
% -- 表示任意字符 零个或多个
_ -- 表示一个字符
-- 例如:
-- 查询姓马的学生
SELECT * FROM student WHERE `name` LIKE '马%';
-- 查询姓名中包含'德'字的学生
SELECT * FROM student WHERE `name` LIKE '%德%';
-- 查询姓马,且姓名有两个字的学生
SELECT * FROM student WHERE NAME LIKE '马_';
6.排序
1、作用:
(1)对查询结果进行排序;
(2)关键字:order by 字段名
升序 :asc 默认是升序。
降序 :desc
2、使用格式:
select * from 表名 order by 字段名 asc; 升序。默认!
select * from 表名 order by 字段名 desc; 降序
SQL语句
# 排序
-- 查询所有数据,使用年龄降序排序
select * from student order by age desc;
-- 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩降序排序
select * from student order by age desc,math desc;
-- 拓展知识点 数据库字符集 utf8 没有按照 拼音排序 必须使用 GBK
-- 使用java代码 convert() 转换函数
select * from student order by name ;
select * from student order by convert(name using gbk) ;
7.聚合函数
对一列数据进行计算,返回一个结果;忽略NULL
-- 格式
count(字段名) -- 统计个数。注意:使用数字,和 * 查询结果包含NULL值,用字段名不包含NULL值;
sum(字段名) -- 求和
avg(字段名) -- 平均值
max(字段名) -- 最大值
min(字段名) -- 最小值
SQL语句
# 聚合函数
-- 查询学生总数(null值处理)
select count(id) from student;
select count(english) from student;
-- count(*) count(number) 包含NULL
select count(*) from student;
select count(7) from student;
-- 查询年龄大于40的总数
select * from student where age > 40;
select count(*) form student where age > 40;
-- 查询数学成绩总分
select sum(math) from student;
-- 查询数学成绩平均分
select avg(math) from student;
-- 查询数学成绩最高分
select max(math) from student;
-- 查询数学成绩最低分
select min(math) from student;
8.分组
是指对查询结果进行分组,相同的内容分为一组;通常与聚合函数一起使用
注意:
1)、 where在分组前条件过滤,不能使用聚合函数
2)、having在分组后条件过滤,可以使用聚合函数
-- 格式:
select 分组字段 from 表名 group by 分组字段 having 条件;
SQL语句
# 分组
-- 按性别分组
select count(*) from student where sex = '男';
select count(*) from student where sex = '女';
select sex from student group by sex;
-- 查询男女各多少人
select sex,count(*) fron student group by sex;
-- 查询年龄大于25岁的人,按性别分组,统计每组的人数
select sex,count(*) fron student where age >25 group by sex;
-- 查询年龄大于25岁的人,按性别分组,统计每组的人数,并只显示性别人数大于2的数据
-- Invalid use of group function
select sex,count(*) fron student where age >25 and count(*)>2 group by sex;
select sex,count(*) fron student where age >25 group by sex having count(*)>2;
9.分页
-- 关键字 limit
-- 格式
select ... from 表名 limit [ 起始索引(0),]向后查询的个数;
SQL语句
-- 模拟百度分页,一页显示5条
-- 第一页
SELECT * FROM student LIMIT 0,5;
-- 第二页
SELECT * FROM student LIMIT 5,5;
-- 第三页
SELECT * FROM student LIMIT 10,5;
-- 额外知识点
-- 第N页 (n-1)*size,size
五、高级查询【多表查询】
1.内连接
作用:
拿左表的记录去匹配右表的记录,若匹配上就显示(交集,共同拥有的部分)。
显示内连接
-- 格式
关键字 inner join :内连接 on:在
select 指定要显示的内容 from 左表 inner join 右表 on 左表.主键=右表.主键;
注意: 推荐使用,方便阅读。
隐式内连接
-- 格式
select 指定要显示的内容 from 左表,右表 where 左表.外键=右表.主键;
注意:要使用点,(不推荐使用,不方便阅读)。
2.左外连接
作用:
展示左表的全部记录,并拿左表的记录去匹配右表的记录,若匹配上显示右表记录,没匹配上就显示NULL
格式:
格式
关键字: left : 左 outer 可写可不写,
select 指定显示的内容 from 左表 left [outer] join 右表 on 条件;
3.右外连接
作用:
展示右表的全部记录,并拿右表的记录去匹配左表的记录,若匹配上显示左表记录,没匹配上就显示NULL
格式:
select 指定显示的内容 from 左表 right [outer] join 右表 on 条件;
4.子查询
1、作用:
一条select查询的结果,作为另一条select语法的一部分
2、使用场景:
(1)子查询结果为单值
(2)子查询结果为单列多行
(3)子查询结果为多列多行
3、总结:
(1)子查询结果为单列,肯定在where后面作为条件使用
(2)子查询结果为多列,肯定在from后面作为虚拟表使用
子查询结果为单值
-- 1 查询工资最高的员工是谁?
select * from emp where salary = (select max(salary) from emp);
子查询结果为单列多行
-- 1 查询工资大于5000的员工,来自于哪些部门的名字
select name from dept where id in(select dept_id from emp where salary >5000) ;
子查询结果为多列多行
-- 1 查询出2011年以后入职的员工信息,包括部门名称
-- 1.1 查询出2011年以后入职的员工信息
-- 查询结果 就是一张虚拟表
SELECT * FROM emp WHERE join_date > '2011-01-01';
-- 1.2 通过查询作为虚拟表 关联部门
SELECT * FROM (SELECT * FROM emp WHERE join_date > '2011-01-01') AS e INNER JOIN dept d ON e.dept_id = d.id;
六、数据库约束
1.关键字
primary key -- 主键约束。 主键要求: 唯一和非空。
unique -- 唯一
not null -- 非空
default -- 默认值
foreign key -- 外键
2 .主键
1、创建表时添加主键
-- 创建表
create table 表名(
字段名 字段类型 primary key,
...
);
2、对已有表添加主键
-- 已有表
alter table 表名 add primary key(字段名);
3、联合主键
-- 1、作用:
-- 一张表设置两个主键
-- 格式:只能是创建的时候用。
create table stu(
id int ,
name varchar(32),
primary key (id,NAME)-- 联合主键(id,name)
);
4、主键自增
-- 自增器起始值为 1
-- 创建表
create table 表名(
字段名 字段类型 primary key auto_increment,
....
);
-- 已有表
alter table 表名
-- 拓展知识点 id 类型为varchar 要求唯一的 生成全球唯一 36位随机字符串
SELECT UUID();
5、删除主键
-- 格式
alter table 表名 drop primary key;
-- 删除主键
ALTER TABLE stu3 DROP PRIMARY KEY;
-- 需要先移出自增器
ALTER TABLE stu3 MODIFY id INT ;
3.唯一
-- 注意:
-- NULL为特殊的值,可以重复出现
-- 创建表
create table 表名(
字段名 字段类型 unique,
.....
);
-- 已有表
alter table 表名 add unique(字段名);
4. 非空
- 创建表
create table 表名(
字段名 字段类型 not null,
...
);
-- 已有表
alter table 表名 modify 字段名 字段类型 not null;
5.指定默认值
-- 1、作用:【数据库所有字段的默认值为NULL】
-- (1)如果没有添加值。就是有指定的默认值。
-- (2)注意:指定默认性别是“男”,添加“女”,存储的是“女”,没指定就是有默认“男”,添加NUll,存储的就是“NUll”
-- 创建表指定默认值
create table 表名(
字段名 字段类型 default 默认值
);
-- 对已有表添加默认值
alter table 表名 modify 字段名 字段类型 default 默认值
七、表关系
1.分类
1、划分:【三种】
一对一、一对多、多对多。
1、一对多:
从表存储主表外键
2、多对多:
需要有中间表。中间表存储双方的外键。
2.添加外键约束
-- 创建表 在从表中设置。注意:带有[]号的可写可不写。
create table 表名(
字段名 字段类型 ,
....
[constraint] [约束名] foreign key(外键字段名) references 主表(主键字段)
);
-- 已有表
alter table 表名 add [constraint] [约束名] foreign key(外键字段名) references 主表(主键字段);
3.删除外键
-- 格式
alter table 表名 drop foreign key 约束名;
4.注意事项
1. 主表不能删除从表已引用的数据
2. 从表不能添加主表未拥有的数据
3. 先添加主表数据再添加从表数据
4. 先删除从表数据再删除主表数据
八、事务的使用
1.MySQL事务介绍
1、注意:
MySQL数据库默认一条sql语句一个事务
2、事务关键字:
begin :开启事务。
rollback: 回滚事务。
commit: 提交事物。
SQL语句
-- 开启事务
begin;
-- 雨琦扣钱 -100
update account set balance=balance-100 where id =1;
-- 巴元加钱 +100
update account set balance=balance+100 where id =2;
-- 提交事务
commit;
2.回滚点
1、作用:
事务开启后,当我们一部分操作成功,添加一个回滚点,后续操作报错了,直接到回滚点,保证之前的操作能够成功提交。
添加一个回滚点
-- 格式
savepoint 回滚点名;
直接到回滚点
-- 格式
rollback to 回滚点名;
3.查看是否开启自动提交
-- 格式
show variables like '%commit%';
4.临时修改自动提交为关闭
-- 关闭 off - false - 0
set autocommit=0;
-- 开启 on - true - 1
set autocommit=1;
九、事物级别操作
当前数据库隔离级别
-- 格式
show variables like '%isolation%';
临时修改数据库的隔离级别
-- 格式
set session transaction isolation level 级别字符串;
十、权限操作
1、创建用户
-- 格式
create user '用户名'@'主机地址' identified by '新密码';
主机地址 localhost or 127.0.0.1
% 代表任意主机地址【慎重】
密码可以为空 【慎重】
2、用户授权
-- 格式
grant 权限1,权限2... on 数据库名.表名 to '用户名'@'主机地址';
权限
create drop select update ....
all 代表所有的权限【慎重】
*.* 所有库.所有表 【慎重】
数据库名.* 【经常使用】
3、查看授权
-- 格式
show grants for '用户名'@'主机地址';
4、撤销授权
-- 格式
revoke 权限1,权限2... on 数据库名.表名 from '用户名'@'主机地址';
权限
create alter drop select update ....
all 代表所有的权限【慎重】
*.* 所有库.所有表 【慎重】
数据库名.* 【经常使用】
5、删除用户
-- 格式
drop user '用户名'@'主机地址';
十一、密码管理
1、超级用户
-- 格式 在dos窗口下
mysqladmin -u用户名 -p password 新密码
2、普通用户
-- 格式
set password for '用户名'@'主机地址'=password('新密码');