MySQL学习笔记二

文章目录

        • 数据导入
        • 数据导出
        • 表的复制
          • 只复制表机构
        • 嵌套查询
        • 多表查询
          • 左连接
          • 右连接
        • 数据备份(在linux终端操作)
          • 命令格式
          • 源库名的表示方式
        • 数据恢复(在linux终端操作)
          • 命令格式
          • 从所有库的备份文件中恢复某一个库(--one-database)
        • ER模型&ER图
          • 定义
          • 三个概念
        • 事务&事务回滚
          • 事务定义
          • 事务的属性
          • 事务及事务回滚的应用
        • Python 数据库变成
          • python数据库接口(Python DB-API)

数据导入

  1. 作用:将文件系统的内容导入到数据库中
  2. 语法格式:
load data infile "文件名" 
into table 表名
fields terminated by "分隔符"
lines terminated by “分隔符”
  1. 把/etc/passwd导入到mysql数据库中
  2. 操作步骤:
    (1) 在数据库中创建对应的表
    MySQL学习笔记二_第1张图片
    (2) 查看数据库的默认搜索路径
show variables like "secure_file_priv";

MySQL学习笔记二_第2张图片
(3) 将系统文件拷贝到数据库的默认搜索路径中

sudo cp /etc/passwd /var/lib/mysql-files

在这里插入图片描述
MySQL学习笔记二_第3张图片
(4) 将文件导入到数据库表中
MySQL学习笔记二_第4张图片

数据导出

  1. 作用:将数据库中表的记录保存到系统文件中
  2. 语法格式:
select .. from 表名
into outfile “文件名”
fields terminated by "分隔符"
lines terminated by "分隔符";
  1. 将userinfo 表中的用户名、密码和uid号三个字段导出到userinfo.txt中
    MySQL学习笔记二_第5张图片
    将库名mysql库中的user表中的User,Host两个字段值导出到user2.txt
    MySQL学习笔记二_第6张图片
  2. 注意
    (1) 导出的内容由SQL查询语句决定
    (2) 执行导出命令时路径必须指定在对应的数据库目录下

表的复制

  1. 语法格式
create table 表名 select 查询命令;
只复制表机构
  1. 语法格式
create table 表名 select ... where false;
  1. 示例:只复制t2的表结构
create table new_t2 select * from t2 where false;
  1. 注意:
    复制表的时候不会把原有表键的属性复制过来

嵌套查询

  1. 定义:把内层的查询结果作为外层查询的条件
  2. 语法格式
select 查询语句 where 条件(select 查询语句);
  1. 示例:
# 将X_ID小于X_ID的平均值中的记录查找出来
select * from xian where X_ID < (select avg(X_ID) from xian)

多表查询

左连接
  1. 定义:以左表为主显示查询结果
  2. 语法:
select 字段名列表 from 表1 left join 表2 on 条件;
  1. 示例:
# 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;
右连接
  1. 定义:以右表为主显示查询结果
  2. 语法:
select 字段名列表 from 表1 right join 表2 on 条件;
  1. 示例:
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 ...		备份制定库的指定表

示例:

  1. 备份所有库为all_mysql.sql放到主目录下mydata目录中
mysqldump -uroot -p --all-databases > home/parallels/mydata/all_mysql.sql
  1. 备份3个库,放到mydata目录中
mysqldump -uroot -p -B db1 db2 db3 > /home/parallels/mydata/three_db.sql
  1. 备份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. 实体
    定义:现实世界中任何可以被认知、区分的食物
    示例:学校:学生、教师、课程、班主任。。。
    企业:职工、产品
  2. 属性
    定义:实体所具有的特性
    示例:学生属性:学号、姓名、班级、年龄、性别、专业。。。
    产品属性:产品编号、产品名称、产品规格。。。
  3. 关系
    定义:实体之间的关系
    分类:一对一关系(1:1): 班级和班长
    一对多关系(1:n):公司和职工,班级和学生
    多对多关系(m:n):学生和课程,商店和顾客
  4. ER图的绘制
    矩形框代表实体,菱形框代表关系,椭圆形代表属性
    示例:学生选课系统的ER图
    MySQL学习笔记二_第7张图片

事务&事务回滚

事务定义

一件事从开始发生到结束的整个过程

事务的属性
  1. 原子性
    原子性是指一个事务是不可分割的工作单位,事务中的各个操作要么都做,要么都不做
  2. 一致性
    事务必须从一个一致性状态到另一个一致性状态
  3. 隔离性
    一个事务的执行不能被其他并发事务干扰
  4. 持久性
    一个事务一旦提交,它对数据库的改变是永久性的
事务及事务回滚的应用
  1. mysql中默认sql语句会自动commit到数据库
show variables like "autocommit";
  1. 开启一个事务
start transaction;
## 此时autocommit会被禁用,sql命令不会对数据库中数据做任何修改
  1. 终止事务
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)
  1. 定义:为开发人员提供 数据库应用变成接口
  2. 支持的数据库服务软件:MySQL, Oracle, SQL_Server, Mogodb
  3. Python提供的操作MySQL的模块
    模块名:pymysql
  4. 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. 建立数据库连接
    (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() 关闭游标对象

你可能感兴趣的:(数据库,MySQL)