数据库的介绍、数据库备份、表关系、数据库三范式、事务安全(TCL)、DCL

什么是数据库:

存储数据的仓库,其本质是一个文件系统,数据库按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。

数据的存储方式:

1)内存中

  • 优点:读写速度快。
  • 缺点:数据不能永久存储,断电或程序重新运行就没有了

2)文件中

  • 优点:可以永久性保存数据。
  • 缺点:读写速度慢,查询,删除,修改不方便。

3)数据库中

  • 永久保存了,可以使用SQL语句方便进行增删改查操作。

数据库类型:

  1. 关系型数据库。   MYSQL、Oracle都是关系型数据库。
  2. 非关系型数据库。

常见的数据库:

常用的数据库:

  1. MYSQL
  2. Oracle

在web应⽤用中,使⽤用的最多的就是MySQL数据库,原因如下:

  1. 开源、免费。
  2. 功能足够强大,足以应付web应用开发(最高支持千万级别的并发访问)。

MYSQL目录结构:

│-- bin:MySQL所有相关的可执行文件。
│-- MySQLInstanceConfig.exe
│-- data: MySQL默认的数据库
│-- include: C语言相关的头文件
│-- lib: C++相关的动态链接库
│-- my.ini MySQL的配置文件

关闭MYSQL服务:

方式一:

  • 控制面板——系统与安全——管理工具——服务——搜索mysql,然后关闭。

​​​​​​​方式二:通过控制台窗口关闭与开启

  • 关闭mysql服务器: net stop mysql
  • 开启mysql服务器: net start mysql

控制台登录和退出数据库:

方式1:连接本地的机器

  • 格式:mysql -u用户名 -p密码

方式2:连接其他的数据库服务器

  • 格式:mysql -hIP地址 -p回车 再输入密码

方式3:适用于本机

  • 格式:mysql -u用户名 -p回车 再输入密码

退出数据库

  •  exit 或 quit

数据库管理系统(DataBase Management System,DBMS):

指一种操作和管理数据库的大型软件,用于建立,使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性,用户通过数据库管理系统访问数据库中表内的数据。

在实际开发中,​​​​​​​一个项目对应一个数据库:

  • 一个数据库服务器中可以有多个数据库
  • 一个数据库中可以有多张表
  • 一张表中可以有n条记录数

数据库备份

备份的应用场景:

在实际开发中,假如某天我们的数据库的数据被人误删了,那么数据就完全丢失了,所以我们一般需要对数据库的数据进行备份。

source命令备份与还原:

mysqldump -u用户名 -p密码 数据库 > 文件的路径

  • 注意:数据库备份是没有创建数据库的语句的,只有创建表与插入数据的语句。

还原格式:

  1. 先登录
  2. 选择指定的数据库: use  数据库名;
  3. 使用source导入数据库文件: source  导入文件的路径;

还能在图形化界面备份与还原。

表关系

1)一对多关系(最常见

解决方案:

  • 在多的一方建立外键关系,引用主表的主键。

2)多对多(常见

解决方案:

  1. 创建一张中间表。
  2. 创建外键列。
  3. 并且把外键列设置为联合主键。
  • ​​​​​​​constraint foreign key(rid) references tab_route(rid),
    constraint foreign key(uid) references tab_user(uid),
    primary key(rid,uid)

3)一对一(不常见

解决方案:

  1. 建立外键的关系。
  2. 并且吧外键列设置为唯一。
表与表之间的三种关系说明
一对多

最常用,如果有两张表A和B,如堕A与B是一对多的关系。表示A表中一条记录对应B表中多条记录,B表中一条记录对应A表中的一条记录。

如:部门与员工

多对多

A表中一条记录对应B表中多条记录,反之,B表中一条记录也对应A表中多条记录。

如:老师与学生

一对一

比较少使用,A表中一条记录对应B表中一条记录。

如:身份证信息表居民表信息

数据库三范式

什么是范式:

范式就是规则,一套用来设计表的规则。

范式的基本分类:

  • 第一范式(1NF)
  • 第二范式(2NF)
  • 第三范式(3NF)
  • 巴斯-科德范式(BCNF)
  • 第四范式(4NF)
  • 第五范式(5NF)

​​​​​​​一般说来,数据库只需满足第三范式(3NF)就行了。

第一范式:

  • 要保证每一列的原子性,每一列都是不可再分割的。

​​​​​​​总结:如果不遵守第⼀范式,查询出数据还需要进⼀步处理(查询不方便)。遵守第一范式,需要什么字段的数据就查询什么数据(方便查询)。

第二范式:

  1. 表必须有主键。
  2. 一张表只描述一件事情。
  • ​​​​​​​总结:如果不遵守第二范式,数据冗余,相同数据无法区分。遵守第二范式减少数据冗余,通过主键区分相同数据。

第三范式:

  • 从表的外键必须使用主表的主键。(一个关系中不包含已在其他关系已包含的非主键字信息)

​​​​​​​总结:如果不遵守第三范式,可能会有相同数据无法区分,修改数据的时候多张表都需要修改(不方便修改)。遵守第三范式通过id可以区分相同数据,修改数据的时候只需要修改一张表(方便修改)。

事务安全(TCL)

什么是事务:

将一个业务操作相关的多条SQL语句当成一个整体对待,这多条SQL语句要么全部执行成功,要么全部执行失败。

事务的应用场景说明:

在实际的业务开发中,有些业务操作要多次访问数据库。一个业务要发送多条SQL语句给数据库执行。需要讲多次访问数据库的操作视为一个整体来执行,要么所有SQL语句全部执行成功。如果其中有一条SQL语句失败,就进行事务的回滚,所有的SQL语句全部执行失败。

事务在java中的应用场景:

 /*使用jdbcTemplate操作sql事务控制*/

        //事务:保证多条sql语句,全部执行成功才可以提交事务,有一个sql语句错误就全部回滚,保证数据统一性
        //事务实现,必须操作同一个连接对象,设置为不自动提交事务,待所有sql语句执行完毕,不发生错误再提交这个连接的事务,如果发生错误进行回滚

        //同时操作多条增删改sql语句,需要使用事务
        //获取数据源
        DataSource dataSource = JdbcUtils.getDataSource();
        //实例jdbcTemplate, 如果想一个事务操作多条sql语句,需要同一个jdbcTemplage
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        //启动事务管理器(获取datasource操作数据库连接对象并绑定到当前线程中)
        TransactionSynchronizationManager.initSynchronization();
        //从数据源中获取jdbcTemplate操作的当前连接对象
        Connection connection = DataSourceUtils.getConnection(dataSource);
        try {
            //设置连接不自动提交事务
            connection.setAutoCommit(false);

           

            //多条增删改sql执行
           

            //手动提交事务
            connection.commit();
        } catch (Exception e) {
            //事务回滚
            connection.rollback();
            System.out.println("回滾了");
            throw e;//抛出异常,说明执行失败
        } finally {
            try {
                //释放当前线程与连接对象的绑定
                TransactionSynchronizationManager.clearSynchronization();
                //重置当前连接为自动提交事务
                connection.setAutoCommit(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

MYSQL中可以有两种方式进行事务的操作:

  1. 手动提交事务
  2. 自动提交事务
  • ​​​​​​​mysql的事务自动提交而Oracle事务不自动提交。

手动提交事务:事务相关的命令:

  1. 开启事务   start  transaction;
  2. 回滚事务  rollback;
  3. 提交事务  commit;

自动提交事务:

MYSQL的每一条DML(增删改)语句都是一个单独的事务,每条语句都会自动开启一个事务,执行完毕自动提交事务,MYSQL默认开始自动提交事务。

查看当前事务提交的方式:

show variables like '%commit%'

  • 查询事务提交相关的所有变量。

修改事务提交的方式:

set autocommit = 0;

  • 关闭事务自动提交。​​​​​​​​​​​​​​

set autocommit = 1;

  • 开启事务自动提交。

事务原理:

事务开启之后, 所有的操作都会临时保存到事务日志, 事务日志只有在得到`commit`命令才会同步到数据表中,其他任何情况都会清空事务日志(rollback,断开连接)。

回滚点:

设置回滚点语法:

  • savepoint 回滚点名字;

​​​​​​​回到回滚点语法:

  • rollback to 回滚点名字;

事务的四大特性(ACID):

事务特性含义
原子性: A

事务中多条SQL语句是一个整体,

要么全部执行成功,要么全部执行失败。

一致性: B事务前后的数据要保持一致。
隔离性: I多个事务之间操作不能相互影响。
持久性: D事务一但提交,对数据库的数据影响是永久的。

事务的隔离级别:

事务在操作时的理想状态:多个事务之间互不影响,如果隔离级别设置不当就可能引发并发访问问题。

并发访问的问题含义
脏读

一个事务读取到了另一个事务未提交的数据。

不可重复读一个事务前后读取到的数据内容不一致,应该在同一个事务中多次读取数据都是相同的,一般是由update引起的。
幻读(虚读)

一个事务前后查询数量得到不一样的结果,产生幻觉不知道那一次结果是正确的。一般是由insert或delete引起的。

(MYSQL没有幻读,Oracle才有)

数据库中的隔离级别:

read uncommitted读取没有提交的数据。
read committed

读取提交的数据。

解决脏读,但是不能解决不可重复读。

Oracle和SQL Server默认隔离级别

repeatable read

可重复读(MYSQL默认隔离级别

解决不可重复读,但是不能解决幻读。

幻读在MYSQL不存在,默认就已经解决了

serializable

串行化。

解决全部的问题。

MYSQL事务隔离级别相关的命令:

1)查询全局事务隔离级别:

show variables like '%isolation%';
-- 或
select @@tx_isolation;

2)设置事务隔离级别,需要退出登录,然后重新连接才可以生效。

set global transaction isolation level 级别字符串串;
-- 如:
set global transaction isolation level read uncommitted;

DCL

DCL语句的作用:

用于创建用户、删除用户,分配、删除权限给用户,修改密码。

创建用户:

CREATE USER '⽤用户名'@'主机名' IDENTIFIED BY '密码';

  • 用户名:将创建的用户名。
  • 主机名:指定该用户在哪个主机上可以登录,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登录,可以使用通配符%。
  • 密码:该用户的登录密码,密码可以为空,如果为空则该用户可以不需要密码登录服务器。

授权用户:

GRANT 权限1, 权限2... ON 数据库名.表名 TO '用户名'@'主机名';

撤销授权:

REVOKE 权限1, 权限2... ON 数据库.表名 FROM '⽤用户名'@'主机名';

权限:select、delete、insert、update、drop、create、all、alter

all:代表所有权限

*代表所有数据库

*代表所有表

查看权限:

SHOW GRANTS FOR '用户名'@'主机名';

删除用户:

DROP USER '用户名'@'主机名';

修改管理员密码(非登录的情况下去使用的):

mysqladmin -u用户名 -p password 新密码 回车 原密码

  • 修改管理员密码需要使用到mysql自带的工具mysqladmin。

修改普通用户密码(需要在登录的情况下去使用):

set password for '用户名'@'主机名' = password('新密码');

​​​​​​​

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值