1、数据备份(mysqldump,在Linux终端操作)
1、命令格式
mysqldump -u用户名 -p 源库名 > ***.sql
2、源库名的表示方式
--all-databases 备份所有库
库名 备份1个库
-B 库1 库2 库3 备份多个库
库名 表1 表2 表3 备份多张表
3、练习
1、备份所有库,放到mydata目录下 :All.sql
mysqldump -uroot -p --all-databases > All.sql
2、备份db4库中的 sheng、city、xian三张表,db4scx.sql
mysqldump -uroot -p db4 sheng city xian > db4scx.sql
3、备份MOSHOU和db4两个库,md.sql
mysqldump -uroot -p -B db4 MOSHOU > md.sql
2、数据恢复
1、命令格式(Linux终端)
mysql -u用户名 -p 目标库名 < ***.sql
2、从所有库备份All.sql中恢复某一个库
mysql -u用户名 -p --one-database 库名 < All.sql
mysql -uroot -p --one-database db4 < All.sql
3、示例
1、在db4.sheng添加一条记录
insert into sheng values(null,300000,"黑龙江");
2、在db4库,新建一张表t888
create table t888(id int);
3、从 db4.sql 恢复db4库
mysql -uroot -p db4 < db4.sql
注意 :
1、恢复库时,如果恢复到原库会将表中数据覆盖,新增表不会删除
2、恢复库时,如果库不存在,则必须先创建空库
3、MySQL调优
1、创建索引
在select、where、order by常涉及到的字段建立索引
2、选择合适存储引擎
1、读操作多 :MyISAM
2、写操作多 :InnoDB
3、SQL语句优化(避免全表扫描)
1、where子句尽量不使用 != ,否则放弃索引全表扫描
2、尽量避免NULL判断,全表扫描
优化前:
select number from t1 where number is null;
优化后:
在number字段设置默认值0,确保number字段无NULL
select number from t1 where number=0;
3、尽量避免用or连接条件,否则全表扫描
优化前:
select id from t1 where id=10 or id=20;
优化后:
select id from t1 where id=10
union all
select id from t1 where id=20;
4、模糊查询尽量避免使用前置 %,否则全表扫描
select variable from t1 where name="secure%";
5、尽量避免使用in和not in,否则全表扫描
优化前 :
select id from t1 where id in(1,2,3,4);
优化后 :
select id from t1 where id between 1 and 4;
6、不能使用 select * ...
用具体字段代替*,不要返回用不到的任何字段
4、事务和事务回滚
1、定义 :一件事从开始发生到结束的整个过程
2、作用 :确保数据一致性
3、事务和事务回滚应用
1、SQL命令会 autocommit 到数据库执行
2、事务操作
1、开启事务
mysql> begin; | start transactions;
mysql> SQL命令 ...
## 此时autocommit被禁用 ##
2、终止事务
mysql> commit; | rollback;
3、案例
1、背景
你 :建行卡
朋友 :工行卡
你在建行自动取款机 给你朋友 转5000块钱
2、建表
表1、CCB
create table CCB(
name varchar(20),
money decimal(20,2)
);
insert into CCB values("有钱人",100000);
表2、ICBC
create table ICBC(
name varchar(20),
money decimal(20,2)
);
insert into ICBC values("没钱人",0);
3、开始转账
成功:
mysql> begin;
mysql> update CCB set money=money-5000 where name="有钱人";
mysql> update ICBC set money=money+5000 where name="没钱人";
mysql> commit;
#####转账成功#####
失败 :
mysql> begin;
mysql> update CCB set money=money-5000 where name="有钱人";
mysql> update ICBC set 工行服务器故障... ;
mysql> rollback;
#####转账失败#####
5、与Python交互
1、交互类型
1、python3
模块名 :pymysql
安装 :
1、在线 :sudo pip3 install pymysql
2、离线 :pymysql.tar.gz
解压:setup.py
python3 setup.py install
2、python2
模块名 :MySQLdb
安装 :sudo pip install mysql-python
2、pymysql使用流程
1、建立数据库连接对象(db=pymysql.connect("root".
2、创建游标对象cur(操作数据库的对象)
3、游标对象:cur.execute("insert into sheng ...;")
4、提交到数据库执行 :db.commit()
5、关闭游标对象cur.close()
6、关闭数据库连接对象db.close()
示例 :01_pymysql示例.py
3、connect连接对象
1、db = pymysql.connect(参数列表)
1、host :主机地址
2、user :用户名
3、password :密码
4、database :库
5、charset :编码方式,推荐utf8
6、port :端口(3306)
2、db (数据库连接对象) 的方法
1、db.close() :断开连接
2、db.commit() :提交到数据库执行
3、db.cursor() :游标对象,用来执行SQL命令
4、db.rollback() :回滚
3、cursor 游标对象 的方法
1、execute(SQL命令) :执行SQL命令
2、close() :关闭游标对象
3、fetchone() :获取查询结果的第1条数据
4、fetchmany(n) :获取n条数据
5、fetchall() :获取所有数据
## fetchmany(n) 和 fetchall() 得到的结果一定是一个大元组套着小元组 ((),(),())
6、WorkBench 图形化界面管理工具
Navicat : Windows中图形化界面管理工具
7、orm(Object Relation Mapping) 对象关系映射
1、示例
import sqlalchemy
class User:
__tablename__ = "t1"
id = Column(Integer,primary_key=True)
name = Column(String(20))
解释:
一个类 User --> 数据库1张表
表中2个字段 :id 和 name
浅谈数据库(五)
猜你喜欢
转载自blog.csdn.net/qq_38366693/article/details/82788451
今日推荐
周排行