1.内连接与外连接的区别:
相对于内连接,外连接的几张表之间是存在主次关系的。【左外连接,左边的表是主表;右外连接,右边的表时主表】
2.select 语句可以一次插入多条数据,在values后跟多条数据即可,彼此之间用逗号分开。
3.可以通过将一个表的查询结果插入另一个表来完成表的快速复制。【属性列要相对应】
4.delete 语句一般用于删除表中的记录,但是不会清除在硬盘中的数据。这就导致了删除效率低,但是支持回滚。勿删之后通过回滚操作可完成数据恢复。【事务】
start transaction; delect from 表名; rollback;
5.truncate 语句是一种快速删除的语句,属于物理删除,不支持回滚。
语法格式:truncate table 表名
不能使用truncate语句删除单条记录,只能删除表中所有数据。
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.主键还可以分为自然主键和业务主键。
自然主键:主键值是一个自然数,与业务无关。【推荐使用】
业务主键:主键值和业务紧密相连。
12.auto_increment 代表从1开始的逐渐自加一的函数,可以利用在创建表的时候使用,这个属性列的属性值就为1~N。
13.MySQL有一个特有的术语——存储引擎。存储引擎术语表的一种存储方式。
14.在创建表时,在小括号外部通过engine关键字可指定存储引擎,通过charset关键字指定字符编码方式。
MySQL默认的存储引擎为innoDB,默认的字符编码方式为utf-8。【gbk代替简体中文】
15.查看MySQL支持哪些存储引擎:show engines \G;
InnoDB支持事务,所以是相对于其他数据库比较安全的数据库。
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;
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 ;
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;
- dbname=*表示所有数据库
- tbname=*表示所有表
- login ip=%表示任何 ip
- password 为空,表示不需要密码即可登录
- 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 用户名
29.导入:
source sql脚本文件的地址
30.导出:
导出整个数据库:mysql dump 数据库名>sql脚本文件保存地址 用户及密码 导出数据库中的某张表:mysql dump 数据库名 表名> sql脚本文件保存地址 用户及密码
第一范式:有主键,具有原子性,字段不可分割
第二范式:完全依赖,没有部分依赖
第三范式:没有传递依赖
数据库设计尽量遵循三范式,但是还是根据实际情况进行取舍,有时可能会拿冗余换速度,最终用目的要满足客户需求。