MySQL-DAY03

时间:2020-03-21 22:02:49   收藏:0   阅读:45

MySQL-DAY03

1.约束

在创建表的时候,可以给表的字段添加相应的约束,添加约束的目的是为了保证表中数据的合法性、有效性、完整性。

常见约束:

1.1主键约束

    create table t_user(
id int primary key, // 列级约束
username varchar(255),
email varchar(255)
);
create table t_user(
id int,
username varchar(255),
primary key(id) //表级约束
);

1.2 外键约束

2. 存储引擎(了解)

    mysql> SHOW ENGINES\G
    CREATE TABLE TABLENAME (NO INT) ENGINE = MyISAM;
    ALTER TABLE TABLENAME ENGINE = INNODB;
    mysql> SHOW CREATE TABLE emp\G
?
mysql> SHOW TABLE STATUS LIKE ‘emp‘ \G

3. 事务

3.1 概述

一个事务是一个完整的业务逻辑单元,不可再分。

事务可以保证多个操作原子性,要么全成功,要么全失败。

对于数据库来说事务保证批量的DML(insert delete update)要么全成功,要么全失败。

3.2 事物的特性

事务具有四个特征:ACID

3.3 事务中存在一些概念:

a) 事务(Transaction):一批操作(一组DML)

b) 开启事务(Start Transaction)

c) 回滚事务(rollback)

d) 提交事务(commit)

e) SET AUTOCOMMIT:禁用或启用事务的自动提交模式

当执行DML语句是其实就是开启一个事务。

关于事务的回滚需要注意:只能回滚insert、delete和update语句,不能回滚select(回滚select没有任何意义),对于create、drop、alter这些无法回滚.

事务只对DML有效果。

注意:rollback,或者commit后事务就结束了。

3.4 事务的隔离性

3.4.1 隔离级别

事务隔离性存在隔离级别,理论上隔离级别包括4个:

oracle数据库默认的隔离级别是:读已提交。

mysql数据库默认的隔离级别是:可重复读。

技术分享图片

3.4.2 作用范围

事务隔离级别的作用范围分为两种:

例如,设置会话级隔离级别为READ COMMITTED :

mysql> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
mysql> SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

设置全局级隔离级别为READ COMMITTED :

演示第1级别:读未提交
set global transaction isolation level read uncommitted;
演示第2级别:读已提交
set global transaction isolation level read committed;
演示第3级别:可重复读
set global transaction isolation level repeatable read;

3.4.3 查看隔离级别

查看会话级的当前隔离级别:

mysql> SELECT @@tx_isolation;
或:
mysql> SELECT @@session.tx_isolation;

查看全局级的当前隔离级别:

mysql> SELECT @@global.tx_isolation;

3.5 自动提交模式

mysql> SET AUTOCOMMIT = OFF; 
?
mysql> SET AUTOCOMMIT = ON;
?

?
mysql> SET SESSION AUTOCOMMIT = OFF;
?
mysql> SET SESSION AUTOCOMMIT = ON;
?
show variables like ‘%auto%‘; -- 查看变量状态

4 索引

4.1 原理

索引被用来快速找出在一个列上用一特定值的行。

没有索引,MySQL不得不首先以第一条记录开始,然后读完整个表直到它找出相关的行。表越大,花费时间越多。

对于一个有序字段,可以运用二分查找(Binary Search),这就是为什么性能能得到本质上的提高。MYISAM和INNODB都是用B+Tree作为索引结构。

通过B+Tree缩小扫描范围,底层索引进行了排序,分区,索引会携带数据在表中的“物理地址”,最终通过索引检索到数据之后,获取到关联的物理地址,通过物理地址定位表中的数据,效率是最高的。

select ename from emp where ename = ‘SMITH‘;
通过索引转换为:
select ename from emp where 物理地址 = 0x3;

4.2 索引的分类

4.3 创建索引

什么时候需要给字段添加索引:

索引等同于一本书的目录。

主键会自动添加索引,所以尽量根据主键查询效率较高。

create unique index 索引名 on 表名(列名); 
alter table 表名 add unique index 索引名 (列名);

4.4 查看、使用、删除索引

show index from 表名;
explain select 列名 from 表名 where 条件;
drop index 索引名称 on 表名;

5 视图

5.1 概述

视图作用:

技术分享图片

5.2 创建、修改、删除视图?

create view myview as select empno,ename from emp;
alter view v_dept_emp as select ename,e.deptno from emp e,dept d where e.deptno = 20;
drop view myview;

注意:只有DQL语句才能以视图对象的方式创建出来。

对视图进行增删改查,会影响到原表数据。(通过视图影响原表数据的,不是直接操作的原表)

可以对视图进行CRUD操作。

6 DBA命令

6.1 将数据库当中的数据导出

在windows的dos命令窗口中执行:(导出整个库)

mysqldump bjpowernode>D:\bjpowernode.sql -uroot -p333

在windows的dos命令窗口中执行:(导出指定数据库当中的指定表)

mysqldump bjpowernode emp>D:\bjpowernode.sql -uroot –p123

6.2 导入数据

create database bjpowernode;
use bjpowernode;
source D:\bjpowernode.sql

7 数据库设计三范式

设计范式是设计表的依据。按照这个三范式设计的表不会出现数据冗余。

三范式:

一对一设计有两种方案:主键共享、外键唯一。



原文:https://www.cnblogs.com/winterriver/p/12542034.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!