文章目录
数据导入
- 作用:将文件系统的内容导入到数据库中
- 语法格式:
load data infile "文件名"
into table 表名
fields terminated by "分隔符"
lines terminated by “分隔符”
- 把/etc/passwd导入到mysql数据库中
- 操作步骤:
(1) 在数据库中创建对应的表
(2) 查看数据库的默认搜索路径
show variables like "secure_file_priv";
(3) 将系统文件拷贝到数据库的默认搜索路径中
sudo cp /etc/passwd /var/lib/mysql-files
(4) 将文件导入到数据库表中
数据导出
- 作用:将数据库中表的记录保存到系统文件中
- 语法格式:
select .. from 表名
into outfile “文件名”
fields terminated by "分隔符"
lines terminated by "分隔符";
- 将userinfo 表中的用户名、密码和uid号三个字段导出到userinfo.txt中
将库名mysql库中的user表中的User,Host两个字段值导出到user2.txt
- 注意
(1) 导出的内容由SQL查询语句决定
(2) 执行导出命令时路径必须指定在对应的数据库目录下
表的复制
- 语法格式
create table 表名 select 查询命令;
只复制表机构
- 语法格式
create table 表名 select ... where false;
- 示例:只复制t2的表结构
create table new_t2 select * from t2 where false;
- 注意:
复制表的时候不会把原有表键的属性复制过来
嵌套查询
- 定义:把内层的查询结果作为外层查询的条件
- 语法格式
select 查询语句 where 条件(select 查询语句);
- 示例:
# 将X_ID小于X_ID的平均值中的记录查找出来
select * from xian where X_ID < (select avg(X_ID) from xian)
多表查询
左连接
- 定义:以左表为主显示查询结果
- 语法:
select 字段名列表 from 表1 left join 表2 on 条件;
- 示例:
# 1. 以左表为准显示省市的信息
select sheng.S_name, city.C_name from sheng left join city on sheng.S_ID = city.CFather_ID;
# 2. 显示省、市、区的信息,要求市全部显示
select sheng.S_name, city.C_name, xian.X_name from city left join sheng on sheng.S_ID = city.CFather_ID left join xian on city.C_ID = xian.XFather_ID;
右连接
- 定义:以右表为主显示查询结果
- 语法:
select 字段名列表 from 表1 right join 表2 on 条件;
- 示例:
select sheng.S_name, city.C_name from sheng right join city on sheng.S_ID = city.CFather_ID;
数据备份(在linux终端操作)
命令格式
mysqldump -u用户名 -p 源库名 > 路径
示例:将db3备份到mydata/db3.sql中
源库名的表示方式
--all--databases 备份所有库
库名 备份单个库
-B 库1 库2... 备份多个库
库名 表1 表2 ... 备份制定库的指定表
示例:
- 备份所有库为all_mysql.sql放到主目录下mydata目录中
mysqldump -uroot -p --all-databases > home/parallels/mydata/all_mysql.sql
- 备份3个库,放到mydata目录中
mysqldump -uroot -p -B db1 db2 db3 > /home/parallels/mydata/three_db.sql
- 备份db3的三张表
mysqldump -uroot -p db3 t1 t2 t3 > /home/parallels/mydata/dbetable.sql
数据恢复(在linux终端操作)
命令格式
mysql -uroot -p 目标库名 < 路径
示例:恢复db3数据库
--首先创建db3
create database db3;
--恢复命令
mysql -uroot -p db3 < /home/parallels/mydata/db3.sql
从所有库的备份文件中恢复某一个库(–one-database)
mysql -uroot -p --one-database 目标库名 < 备份文件的路径
示例:
--首先创建db3
create database db3;
--恢复命令
mysql -uroot -p --one-database db3 < /home/parallels/mydata/all_mysql.sql
注意:
(1)恢复库时如果恢复到原有库会将表中数据覆盖,但新增的表不会删除
(2)在恢复时,如果恢复的库不存在,则先要创建空库
ER模型&ER图
定义
ER模型即实体-关系模型,ER图即实体-关系图
三个概念
- 实体
定义:现实世界中任何可以被认知、区分的食物
示例:学校:学生、教师、课程、班主任。。。
企业:职工、产品 - 属性
定义:实体所具有的特性
示例:学生属性:学号、姓名、班级、年龄、性别、专业。。。
产品属性:产品编号、产品名称、产品规格。。。 - 关系
定义:实体之间的关系
分类:一对一关系(1:1): 班级和班长
一对多关系(1:n):公司和职工,班级和学生
多对多关系(m:n):学生和课程,商店和顾客 - ER图的绘制
矩形框代表实体,菱形框代表关系,椭圆形代表属性
示例:学生选课系统的ER图
事务&事务回滚
事务定义
一件事从开始发生到结束的整个过程
事务的属性
- 原子性
原子性是指一个事务是不可分割的工作单位,事务中的各个操作要么都做,要么都不做 - 一致性
事务必须从一个一致性状态到另一个一致性状态 - 隔离性
一个事务的执行不能被其他并发事务干扰 - 持久性
一个事务一旦提交,它对数据库的改变是永久性的
事务及事务回滚的应用
- mysql中默认sql语句会自动commit到数据库
show variables like "autocommit";
- 开启一个事务
start transaction;
## 此时autocommit会被禁用,sql命令不会对数据库中数据做任何修改
- 终止事务
commit; ## 提交
rollback; ## 回滚
事务回滚(rollback)只针对对表记录的操作:增加、删除、修改,对创建库、创建表是无效的。
4. 示例
你:建行卡
你朋友:工商卡
你在建行的自动提款机给你朋友(工商银行卡)转账
过程:
表1、建行:CCB
表2、工行:ICBC
开始转账
start transaction;
update CCB set money=95000 where name="你"
update ICBC set ... 断电了...
rollback;
Python 数据库变成
python数据库接口(Python DB-API)
- 定义:为开发人员提供 数据库应用变成接口
- 支持的数据库服务软件:MySQL, Oracle, SQL_Server, Mogodb
- Python提供的操作MySQL的模块
模块名:pymysql - pymysql的使用流程
(1) 建立数据库连接
(2) 创建游标对象
(3) 使用游标对象的方法和sql语句操控mysql数据库
(4) 提交commit
(5) 关闭游标
(6) 关闭数据库连接
示例:
import pymysql
# 打开数据库连接
db = pymysql.connect("localhost",
"root",
"22495249Pan",
charset="utf8")
# 创建游标对象
cur = db.cursor()
# 创建库Python
cur.execute("create database python;")
# 切换库
cur.execute("use python;")
# 创建表t1
cur.execute("create table t1(\
id int primary key, \
name varchar(20), \
score tinyint unsigned);")
# 在t1中插入5条记录
cur.execute("insert into t1 values\
(1, 'xiaomaomao', 88), \
(2, 'xiaoxiaomao', 90), \
(3, 'shishi', 80), \
(4, 'xiaomao', 90), \
(5, 'cat', 88);")
# 提交到数据库
db.commit()
# 关闭游标
cur.close()
# 关闭数据库
db.close()
- 建立数据库连接
(1) 语法格式
对象名 = pymysql.connect(“主机地址”, “用户名”, “密码”, “库名”, charset=“utf8”)
(2) connect 对象(db)的方法
cursor() 创建一个游标对象db.cursor()
commit() 提交到数据库 db.commit()
rollback() 回滚 db.rollback()
close() 关闭与数据库的连接db.close()
(3) cursor游标对象(cur)的方法
execute() 执行sql命令
fetchone() 取得结果集的第一条记录
fetchmany(数字) 取得结果集的几条记录
fetchall() 取得结果集的所有行
close() 关闭游标对象