1.存储引擎

数据库存储引擎是 数据库底层软件,对数据进行增删改查的时候不同的存储引擎的处理机制是不一样的,有各自不同的功能。MySQL 的核心就是存储引擎。innoDB 事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键

2.数据类型

整数类型:

 

mysql主键不能是varchar mysql主键可以是字符串吗_数据

字符串类型:

varchar是可变长度;char()是固定长度;字符串长度加+结束符;

3.外键

一个表(子表)的外键 是另一个表(父表)的主键。

外键设置规则:

如果主键和外键是同一个表里的,叫做自参照表。

子表和父表的列数目必须相同,主键和外键类型相同。

FOREIGN KEY 关键字

4.唯一约束

UNIQUE 和 PRIMARY KEY 的区别:一个表可以有多个字段声明为 UNIQUE,但只能有一个 PRIMARY KEY 声明;声明为 PRIMAY KEY 的列不允许有空值,但是声明为 UNIQUE 的字段允许空值的存在。

5.检查约束

check();

6.语句

去重

SELECT DISTINCT <字段名> FROM <表名>;

7.外连接

外连接分为左连接 和右连接

SELECT *  
FROM product as a left JOIN category as b
on a.category_id = b.id ;  #得到的是左边表中所有的数目+右边复合条件的;

右连接相反;左连接+右连接 就是完全连接

选择用什么连接的依据:

两表就是单纯的数据联合的时候,查两表关联列相等的数据,用内连接,

左表是右表的子集,用右连接;

右表是左表的子集,用左连接;

 

8.sql查询的基本原理:

单表查询:根据where条件形成一个中间表,这个表对我们是隐藏的,然后select 后面所需要的显示出来。

两表查询:先根据笛卡尔积形成一个中间表,根具条件去除不符合条件的数据, 然后select 后面所需要的显示出来;

多表查询: 先对前两个表进行两表查询,然后将形成的中间表与第三个表在进行两表查询。

on与where的区别:

  on进行连接操作,根据条件形成中间表,而where是物理过滤,是对已经形成的中间表根据条件硬性过滤。

ON只进行连接操作,WHERE只过滤中间表的记录。

9.视图

语句 

create [or replace] view viewname as 语句;

对数据的更新最终是对表的更新。前提是select没有使用分组 union 语句。

视图不占用物理内存,我们看到的视图中数据是表中的数据。

建立视图的优点是 :

不必直接接触表,把表隐藏起来。 根据不同的需求当需要的表很多时,sql语句可能会比较复杂,然后使用视图可能更方便。  删除修改视图对数据库表都没直接影响。

10 触发器

触发器是特殊的存储过程,不需要明显的去调用; 而是发生某一条件 然后触发。

11.索引

mysql中有两种方式访问数据:

一是按照顺序访问,从头到尾遍历数据,筛选出符合条件的数据。

二是索引访问,根据遍历索引访问,在表中对应的列上建立索引,根据索引找到对应的列;描索引的速度一般远远大于扫描实际数据行的速度,所以采用索引的方式可以大大提高数据库的工作效率。

索引分类:

普通索引:建立的普通索引。

唯一性索引:索引值具有唯一性。

主键索引: 把主键字段当做索引,唯一索引的一种。

组合索引: 多个字段组合成的索引。

索引的优缺点:

更快的查询;建立唯一性索引保证每一行数据的唯一性;

占用物理空间,在增删改的时候也需要对索引进行改动,降低维护的速度。

索引的原理:

索引是根据B/B+树实现的;

索引的创建:

CREATE  INDEX  index_name   ON tablename(ziduanming);

create unique index index_name   ON tablename(ziduanming);(唯一性索引);

建立索引的原则: 对比较常用的字段设置索引,如主键,查询条件 排序 等经常用到的字段。

数值少不使用索引,字段不经常用的不使用索引;对于text varchar的尽量不要用索引;

不建议使用索引的情况:

查询的数据比较少;增删改远远大于查询的时候;列的数据种类很少也不建议使用,如sex只有0和1这两种植,结果集中数据行数很多,并不能提高效率。

索引使用的原因:

不用索引的情况是,根据where条件进行全部数据的扫描;

有索引的情况:,利用b树数据结构,可以根据字段定位,减少查询的行数。

 

12.三范式

1,。保证字段的原子性,无法在分割。

2. 保证每一行都能区分,(主键)。

3.每个表中不包含其他表中已包含的非主关键信息,(消除冗余性)。

 

13.四大特性

原子性:执行一个操作的时候,要么全都不做,要么全部做完,

一致性: 在一个完整的操作,执行完之后,应该还是一致的。比如ab之间转账,a向B转账1000,b接受到1000,最后ab的总钱还是不变的。

隔离性: 并发处理的时候,A和B都对同一个目标执行操作,要么a执行完之后,b执行,要么是b执行完之后,a在执行。不能再a执行的过程,b去执行。

持久性:一旦操作完成,产生操作的影响就是永久性。

四大隔离级别

read-uncommited :  本事物可以读取其他事物未提交的数据,出现问题:  脏读。

read-commited:   本事物只能读取已经提交了的结果,对未提交的结果是不可见的。出现问题:同一个查询,可能返回不同结果,因为在此期间可能有其他事物进行新的提交(也叫做不可重复读)。

repeated-read( 可重读),mysql默认的;  并发事 物保证同一时刻看到的都是相同的数据。出现问题: 幻读:当一个事物正在读取数据的时候,另一个事物插入数据,这时候查询的结果出现几条原本本没有的数据。

serializable - read (可串行化) : 强制事物按顺序来加上锁 。出现问题:解决了幻读的问题但是锁竞争问题。

产生的问题:

脏读:当本事物读数据的时候,另一个事物插入数据,本事物读到了新插入数据,当时此时另一个事物进行回滚,产生的数据就是脏读。

不可重复读:  本事物读取数据的时候,另一个事物提交新的数据,在此查询的时候,结果可能就不一样了。

幻读: 本事物读取数据的时候,另一个事物提交新的数据,此时继续查询的时候,出现了原本没有的数据。