目录
- 表的复制
- 嵌套查询
- 多表查询
- 连接查询
- 数据备份
- 数据恢复
- 用户账户管理
1. 表的复制
复制表记录:
create table 表名 select ... from 表名2 where 条件;
eg:create table sanguo3 select * from sanguo limit 3 ;
create table sanguo4 select id,name,country from sanguo limit5;
只复制表结构:
create table 表名 select * from 表名2 where false;
where后跟一个永远不会成立的表达式
复制表时只会复制表记录或结构,不能复制原有表键的属性
2. 嵌套查询
嵌套查询(子查询):
把内层的查询结果作为外层的查询条件
语法:
select ... from 表名 where 条件 (select ...);
eg:攻击值小于平均攻击值的英雄和攻击值显示出来
1.先计算平均值
select avg(gongji) from sanguo;
2.找到低于平均值的
select name,gongji from sanguo
where gongji < 平均值;
3.嵌套 :
select name,gongji from sanguo
where gongji < (select avg(gongji) from sanguo);
#要确保括号内返回的是一个数值类型
eg: 找出每个国家攻击力最高的英雄的名字、攻击值和国家
select name,gongji,country from sanguo
where (country,gongji) in
(select country,max(gongji) from sanguo
group by country);
3. 多表查询
多表查询的方式
1. select 字段名列表 from 表名列表 ;(无 where条件)
t1 : name -> "A1" "A2" "A3"
t2 : name2 -> "B1" "B2"
select * from t1,t2;
>>>形成交叉表 共 6 个数据 (笛卡尔积)
select t1.name,t2.name from t1,t2
2. 有 where 条件 本质 : 过滤笛卡尔积结果
eg:显示省和市的详细信息
select sheng.s_name,city.c_name from sheng,city
where sheng.s_id = city.cfather_id;
显示省市县的详细信息
select sheng.s_name as sheng,city.c_name as city ,xian.x_name as xian
from sheng,city,xian
where
sheng.s_id = city.cfather_id and
city.c_id = xian.xfather_id ;
4. 连接查询
内连接(inner join)
语法格式 :
select 字段名 from 表1
inner join 表2 on 条件
inner join 表3 on 条件
...... ;
eg: 显示省市详细信息
select sheng.s_name,city.c_name from sheng
inner join city on sheng.s_id = city.cfather_id;
显示省市县的详细信息
select sheng.s_name,city.c_name,xian.x_name from sheng
inner join city on sheng.s_id = city.cfather_id
inner join xian on city.c_id = xian.xfather_id ;
-------------------------------------------------------------
外连接
****左连接****
以左边的表为主,显示查询结果
select 字段名 from 表1
left join 表2 on 条件
left join 表3 on 条件
...... ;
eg: 显示省市详细信息 #所有省都会显示,未匹配到市则补充null
select sheng.s_name,city.c_name from sheng
left join city on sheng.s_id = city.cfather_id;
显示省市县的详细信息
select sheng.s_name,city.c_name,xian.x_name from sheng
left join city on sheng.s_id = city.cfather_id
left join xian on city.c_id = xian.xfather_id ;
****右连接****
以右边的表为主,显示查询结果
select 字段名 from 表1
right join 表2 on 条件
right join 表3 on 条件
...... ;
eg: 显示省市详细信息 #所有市都会显示,未匹配到省则补充null
select sheng.s_name,city.c_name from sheng
right join city on sheng.s_id = city.cfather_id;
显示省市县的详细信息
select sheng.s_name,city.c_name,xian.x_name from sheng
right join city on sheng.s_id = city.cfather_id
right join xian on city.c_id = xian.xfather_id ;
5. 数据备份
mysqldump Linux 终端/windows cmd
命令格式:
mysqldump -u用户名 -p 源库名 > ~/***.sql
源库名的表示方式
--all-databases 备份所有库
库名 备份单个库
-B 库1 库2... 备份多个库
库名 表1 表2 ... 备份指定库的多张表
备份分类:
1.完全备份
将所有数据进行备份
2.增量备份
比对原备份,对增加数据进行备份
6. 数据恢复
Linux 终端/windows cmd
命令格式:
Linux: mysql -u 用户名 -p 目标库名 < ~/***.sql
从所有库备份中恢复某一个库(--one-databases)
mysql -uroot -p --one-database 目标库名 < all.sql
eg:
在db4.sheng新增一条记录
在db4中新建一张表t888,里面插入一条记录
从db4.sql中恢复db4库
注意:
1.恢复库时如果恢复到原库会将表中数据覆盖,新增表不会删除
2.数据恢复时如果恢复的库不存在,则必须先创建空库
7. 用户账户管理
MySQL的用户账户管理
1.开启MySQL远程连接
修改配置文件
1)sudo -i
2)cd /etc/mysql/mysql.conf.d/
3)subl mysqld.cnf
#bind-address = 127.0.0.1
4)/etc/init.d/mysql restart
2.添加授权用户
1) 用 root 用户登录 mysql
mysql -uroot -p
2)授权
grant 权限列表 on 库.表 to "用户名"@"%"
identified by "密码" with grant option;
权限列表:all privileges select insert
库.表 : *.* 所有库的所有表
3、示例
1.添加授权用户tiger,密码123,对所有库的所有表有所有权限
grant all privileges on *.* to "tiger"@"%" identified by "123" with grant option;
2.添加用户rabbit,对db4库有所有权限
grant all privileges on db4.* to "rabbit"@"%" identified by "123" with grant option;