MySql教程

【MySQL的学习日记】 —— 第五天

本文主要是介绍【MySQL的学习日记】 —— 第五天,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

零 散 的 知 识 点 \color{pink}{零散的知识点} 零散的知识点

一、 板 块 一 \color{green}{板块一} 板块一

1.内连接与外连接的区别:
相对于内连接,外连接的几张表之间是存在主次关系的。【左外连接,左边的表是主表;右外连接,右边的表时主表】
2.select 语句可以一次插入多条数据,在values后跟多条数据即可,彼此之间用逗号分开。
3.可以通过将一个表的查询结果插入另一个表来完成表的快速复制。【属性列要相对应】
4.delete 语句一般用于删除表中的记录,但是不会清除在硬盘中的数据。这就导致了删除效率低,但是支持回滚。勿删之后通过回滚操作可完成数据恢复。【事务】

start transaction;
delect from 表名;
rollback;

5.truncate 语句是一种快速删除的语句,属于物理删除,不支持回滚。
语法格式:truncate table 表名
不能使用truncate语句删除单条记录,只能删除表中所有数据。


二、 板 块 二 \color{green}{板块二} 板块二

6.MySQL不支持check约束【检查约束】,只支持主键约束、外键约束、非空约束、唯一性约。
【primary key、foreign key、not null、unique】
7.我们可以通过将多个sql语句写道一个文本文档中,将后缀名改为“.sql”,然后在MySQL中,利用

source 文件地址;

同时执行多个sql语句。
8.表级约束条件可以对多个字段联合约束。例如:
···sql
unique(字段1,字段2,…,字段n) 代表这n个字段联合约束【这n个字段不能同时重复】
not null 只有列级约束,没有表级约束。
9.在MySQL中,如果一个表的某个列有非空和唯一性约束,就会默认将其转换为PRY key。

tno unique not null; //这两个约束之间无需加逗号也没有顺序的影响

10.主键可以为一个字段组成【单一主键】,也可以为多个字段的组合【复合主键】。对于一张表而言,主键约束语句只能有一条。
11.主键还可以分为自然主键和业务主键。

自然主键:主键值是一个自然数,与业务无关。【推荐使用】
业务主键:主键值和业务紧密相连。


三、 板 块 三 \color{green}{板块三} 板块三

12.auto_increment 代表从1开始的逐渐自加一的函数,可以利用在创建表的时候使用,这个属性列的属性值就为1~N。
13.MySQL有一个特有的术语——存储引擎。存储引擎术语表的一种存储方式。
14.在创建表时,在小括号外部通过engine关键字可指定存储引擎,通过charset关键字指定字符编码方式。
MySQL默认的存储引擎为innoDB,默认的字符编码方式为utf-8。【gbk代替简体中文】
15.查看MySQL支持哪些存储引擎:show engines \G;
InnoDB支持事务,所以是相对于其他数据库比较安全的数据库。


四、 事 务 \color{green}{事务} 事务

16.事务是一个完成的业务逻辑,也是一个最小的工作单元,一个事务中的语句要同时发生。【多条DML语句同时成功或失败】
17.只有数据操作语言(增删改)与事务(安全)有关。【DML语言】
18.MySQL支持默认提交(commit),一般情况下,当执行完一条DML语句后都会默认提交。通过rollback语句可以完成回滚,但是回滚只能回滚到上一次提交的位置。

可以通过开始事务语句,来关闭自动提交事务:start transaction;

mysql> insert into two values(1, 'xiaoming');
Query OK, 1 row affected (0.00 sec)

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from two;
Query OK, 1 row affected (0.00 sec)

mysql> select * from two;
Empty set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from two;
+----+----------+
| no | name     |
+----+----------+
|  1 | xiaoming |
+----+----------+
1 row in set (0.00 sec)

19.事务的四个特性:(ACID)

原子性:每个事务都是最小执行单位;
一致性:在一个事务中,所有操作同时执行成功或失败;
隔离性:并发事务之间相互隔离【多个用户同时对一张表进行操作】
持久性:事务提交后就是永久的,系统发生故障时也不会丢失提交的事务。

20.事务的隔离级别分为四个等级:

读未提交   read uncommit 【最低隔离级别】
读已提交   read commiy
重复读     repeatable read
序列化/串行化     serializable 【最高隔离级别】

(1)读未提交:事务A读取到事务B未提交的数据,称之为脏读现象,一般都是理论上存在,但一般的数据库都是从二级隔离级别起步【Dirty Read】
(2)读已提交:解决了脏读现象,事务A只能读取到B已提交的数据。
存在的问题:不可重复读取数据。但读到的数据都是真实的。
(3)重复读:当事务A开始之后,尽管事务B已经提交了,但是不会对事务A产生影响。缺点就是可能出现幻影,每次读到的数据都是幻像,数据不够真实。【MySQL默认隔离级别】
(4)序列化:解决了在此之前的所有问题,不能序列并行化【排队】。
每次读取的数据都是最真实的,但是效率是最低的。
21.查看默认隔离级别:select @@tx_isolation
修改隔离级别:set global transaction isolation level repeatable read;


五、 索 引 \color{green}{索引} 索引

22.索引的定义与功能:
索引就是一种加快检索表中数据的方法。
对于表的每一个字段都可以添加一条索引,索引可以提高查找效率。
23.创建索引:

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

MySQL中索引分为:普通索引、唯一性索引、主键索引。
为表添加索引:

alter table 表名 add (unique) index 索引名(属性列);
alter table 表名 add primary key (属性列);

24.查看索引

show index from 表名;

25.删除索引

drop index 索引名 on table;
alter table 表名 drop index 索引名;
alter table 表名 drop primary key ;

六·、 D B A 命 令 \color{green}{DBA命令} DBA命令

26.新建用户:

create user username indentified by 'password'
说明:username - 用户名  password - 密码

27.用户授权

grant all privileges on dbname.tbname to 
'username'@'login ip' identified by 'password' 
with grant option;
  1. dbname=*表示所有数据库
  2. tbname=*表示所有表
  3. login ip=%表示任何 ip
  4. password 为空,表示不需要密码即可登录
  5. with grant option; 表示该用户还可以授权给其他用户
privileges 包括一下权限:
对表中数据的增删改查 create、delete、update、select、insert
对表结构进行修改: alter、drop、index
特殊权限:all、usage

28.回收用户权限:

revoke privileges on dbname[.tbname] from username;

简而言之:revoke 权限 on 哪些表的哪些列 from 用户名


七、 导 入 与 导 出 \color{green}{导入与导出} 导入与导出

29.导入:

source sql脚本文件的地址

30.导出:

导出整个数据库:mysql dump 数据库名>sql脚本文件保存地址 用户及密码
导出数据库中的某张表:mysql dump 数据库名 表名> sql脚本文件保存地址 用户及密码
八、 数 据 库 的 三 范 式 \color{green}{数据库的三范式} 数据库的三范式

第一范式:有主键,具有原子性,字段不可分割
第二范式:完全依赖,没有部分依赖
第三范式:没有传递依赖
数据库设计尽量遵循三范式,但是还是根据实际情况进行取舍,有时可能会拿冗余换速度,最终用目的要满足客户需求。

这篇关于【MySQL的学习日记】 —— 第五天的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!