[python全栈]04.MySQL(4)

目录

  1. 表的复制
  2. 嵌套查询
  3. 多表查询
  4. 连接查询
  5. 数据备份
  6. 数据恢复
  7. 用户账户管理

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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值