文章目录(Table of Contents)
简介
从这一篇开始, 我会用几篇文章的篇幅来简单介绍, 记录一下Mysql的相关知识. 这一篇作为第一篇, 会简单介绍一下实验环境(windows下连接mysql, 并进行数据的导入). 同时介绍一下mysql的相关基础知识. 这里的基础知识是指关系数据库中的一些定义, 保持数据库完整性的机制, 以及数据库事务的四个属性等.
关于MySQL的基础操作我会在后面一篇进行记录.
MySQL基础知识
关系数据库
- 关系数据库存在表(table)中, 表由行(row)和列(column)组成, 一组表的定义被称为schema.
- 多数表中都有一些键. 一个键(key)是一个或多个列的组合. 通常有一个键作为主键. (只有一个主键, 但是可以把一个表中多个列作为主键)
- 外键是一个键值来自其他表(通常是其他表的主键)的键. 外键的作用是保证两张表的内容可以同步. 看下面的例子.
在第一张表中, 公司代号是外键, 公司代号是第二张表的主键. 有了这个外键, 当我们在表1中插入数据的时候, 我们会要求其中的公司代号可以在表2中找到. 同时, 如果表1还存在着某个公司代号的数据, 表2就无法将其删除. 这就是所谓的保持数据的一致性和完整性.
数据库事务
一个保持数据完整性的补充机制是数据库事务.
一个事务将一组相关的数据库操作作为一个单元. 如果事务中的任何一个操作失效了, 那么整个操作就都会失效, 并且该事务所做的任何修改都会被放弃(回滚). 相反, 如果所有的操作都成功了, 那么所有的修改都会作为一个整体进行提交.
同时, 该事务对数据库或者其他事务的执行无影响, 所有的事务都好像在独立的运行.
于是就有了下面的性质:
- 数据库事务(Database Transaction), 是指作为单个逻辑工作单元执行的一系列操作, 要么完全地执行, 要么完全的不执行.
- 事务处理可以确保除非事务单元内的所有操作都成功完成, 否则不会永久更新面向数据的资源.
- 事务是数据库运行中的逻辑工作单位, 由数据库管理系统(DBMS)中的事务管理子系统负责事务的处理.
事务的四个属性
并非任意的对数据库的操作序列都是数据库事务. 数据库事务拥有以下四个特性, 习惯上被称之为ACID特性.
- 原子性(Atomicity): 事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行.
- 一致性(Consistency): 事务应确保数据库的状态从一个一致状态转变为另一个一致状态. 一致状态的含义是数据库中的数据应满足完整性约束. 也就是在事务完成时, 必须是所有的数据保持一致. 例如, 用户A和用户B两者的钱加起来一共是5000, 那么不管A和B之间如何转账, 转几次帐, 事务结束之后他们两个用户的钱加起来还是5000, 这就是事务的一致性.
- 隔离性(Isolation): 多个事务并发执行时,一个事务的执行不应影响其他事务的执行. 例如当多个用户并发访问数据库的时候, 此时他们同时操作同一张表, 数据库会为每一个用户开启一个事务, 这个事务不能被其他事务操作干扰, 多个并发的事务之间要相互隔离. 就是需要达到这样的一种效果, 对于任意两个并发的事务T1和T2, 在T1看来, T2要么在T1开始之前就结束了, 要么在T1结束之后才开始, 这样每个事务都不会察觉其他事务在并发地执行.
- 持久性(Durability): 已被提交的事务对数据库的修改应该永久保存在数据库中.
数据库事务的例子
某人要在商店使用电子货币购买100元的东西, 当中至少包括两个操作:
- 该人账户减少100元
- 商店账户增加100元
支持事务的数据库管理系统(transactional DBMS)就是要确保以上两个操作(整个"事务")都能完成, 或一起取消; 否则就会出现100元平白消失或出现的情况.
事务的三种模式
- 隐式事务, 是指每一条数据操作语句都自动成为一个事务, 事务的开始是隐式的, 事务的结束有明确的标记.
- 显示事务, 是指有显示开始和结束标记的事务, 每一个事务都有显示的开始和结束的标记.
- 自动事务, 是系统自动默认的, 开始和结束都不用进行标记. 每一条单独的SQL语句都在其执行完成后进行自动提交事务, 即执行 SQL 语句后就会马上自动隐式执行 COMMIT 操作. 如果出现错误, 则进行事务回滚至之前状态.
关于更多的内容, 可以参考下面的链接: 三大常用数据库事务详解之三:事务运行模式
数据库SQL四种语言分类
我们先来看一张图片, 介绍了这四种sql语言分类, 之后再详细介绍每一种.
DDL - Data Definition Language
数据库定义语言: 定义数据库的结构. 其主要命令有CREATE,ALTER(添加,修改或者删除列),DROP等,下面用例子详解。该语言不需要commit,因此慎重。
CREATE - to create objects in the database 在数据库创建对象。
- CREATE DATABASE test; -- 创建一个名为test的数据库
ALTER - alters the structure of the database 修改数据库结构
- ALTER TABLE test ADD birthday date; -- 修改test表,新增date类型的birthday列
DROP - delete objects from the database 从数据库中删除对象
- DROP DATABASE test; -- 删除test数据库
还有其他的:
- TRUNCATE - 截断表内容
- COMMENT - 为数据字典添加备注(这个在实际中使用挺多的, 需要给增加一些文字说明)
DML - Data Manipulation Language
数据库操作语言: SQL中处理数据库中的数据 其主要命令有SELECT,INSERT,UPDATE,DELETE等, 这些例子大家常用就不一一介绍了. 该语言需要commit.
DCL - Data Control Language
数据库控制语言: 授权,角色控制等
- GRANT - 为用户赋予访问权限
- REVOKE - 撤回授权权限
TCL - Transaction Control Language
事务控制语言
- COMMIT - 保存已完成的工作
- SAVEPOINT - 在事务中设置保存点,可以回滚到此处
- ROLLBACK - 回滚
- SET TRANSACTION - 改变事务选项
Windows下连接MySQL与导入样例
配置MySQL环境变量
当我们在Windows中安装完MySQL之后, 我们需要配置一下相应的环境变量. 我们可以按照下面的链接一步一步照着做, win10系统中配置mysql环境变量的方法. 我在这里也进行简单的记录.
首先, 我的电脑->右键->属性:
接着点击高级系统设置->环境变量, 如下图所示
接着在path->新建->输入MySQL文件夹路径, 即可
当完成上面的操作之后, 我们需要重启终端, 再次输入mysql -v就能正常显示版本号了.
Windows下启动MySQL服务
关于在Windows下启动MySQL服务, 我们打开任务管理器->服务->mysql, 然后右键点击启动.
链接MySQL(不添加全局变量)
我们在最上面讲了关于添加MySQL环境变量的方法. 如果我们不添加环境变量, 这个时候就需要进行MySQL所在文件夹进行执行.
我们打开cmd, 接着进入MySQL文件夹.
- C:\Program Files\MySQL\MySQL Server 5.7\bin
之后再使用MySQL命令进入即可.
- mysql -uroot -p
之后再输入密码即可.
导入MySQL测试数据
接下来我们导入MySQL的测试数据, 之后我们就会使用这个测试数据来进行基础命令的学习和测试. 首先, 我们下载测试数据, 下载地址为, A sample MySQL database
接着我们使用下面的命令进行导入.
- mysql -uroot -p < employees.sql
我们进入数据库看一下导入的数据表.
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论