mysql知识点二
1.mysql中的语言有哪些?分别代表什么意思
1、DDL(Data Define Language) 数据定义语言
2、DML(Data Manipulation Language) 数据操作语言
3、DQL(Data Query Language) 数据查询语言
4、DCL(Data Control Language) 数据控制语言
5、TCL(Transaction Control Language) 事务控制语言
2.mysql中有哪些约束?分别有什么用?
NOT NULL 非空约束,规定某个字段不能为空
UNIQUE 唯一约束,规定某个字段在整个表中是唯一的
PRIMARY KEY 主键(非空且唯一)约束
FOREIGN KEY 外键约束
CHECK 检查约束
DEFAULT 默认值约束
3.date,time,timestamp,这三种日期数据类型,分别是什么?
data:日期值(年月日)
time:时间值(时分秒)
timestamp:现在的具体时间 (年月日 时分秒)
4.内联接和外联接有什么区别?适用于什么场景?可以举例说明
内连接(inner join):取出两张表中匹配到的数据,匹配不到的不保留
外连接(outer join):取出连接表中匹配到的数据,匹配不到的也会保留,其值为NULL
5.事务的特性有那些?事务的隔离级别有哪些?mysql的默认隔离级别是什么?
原子性:要么全部成功,要么全失败
一致性:从一个一致性到另一个一致性中,没有中间态
隔离性:在提交一个事务完成之前,其他事务是不可见的
持久化:一旦事务提交,就永远是一个样子了
隔离级别;
读未提交:
读已提交:
可重复读:
串行化:
默认级别:
可重复读
6.mysql的索引
一般主键和外键通常都有索引,其他需要索引的字段包含的情况如下:
1.字段出现在查询条件中,并且查询条件可以使用索引;
2.语句使用频率高的
3.通过字段条件可筛选的记录集
7.分库 分表
分库分表的步骤:
根据容量(当前容量和增长量)评估分库或分表个数 ->选key(均匀)->分表规则(hash或range等)-> 执行(一般双写)-> 扩容问题(尽量减少数据的移动)
分表:
(1)纵向分表:
将本来一个表中那个数据,根据数据的活跃度进行分离(因为不同活跃的数据,处理方式是不同的)
(2)横线分表:
根据数据量的规模来划分,保证单表的容量不会太大,从而来保证单表的查询等处理能力
分库:
1.水平分库:
以字段为依据,按照一定策略(hash、range等),将一个库中的数据拆分到多个库中。
结果:
每个表的结构都一样;
每个表的数据都不一样,没有交集;
所有表的并集是全量数据;
2.垂直分库:
以表为依据,按照业务归属不同,将不同的表拆分到不同库中
结果:
每个库的结构都不一样;
每个库的数据也不一样,没有交集;
所有库的并集是全量数据;
8.数据库优化
优化方式:
1.选取最适用的字段属性
MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快
2.使用连接(JOIN)来代替子查询(Sub-Queries)
MySQL从4.1开始支持SQL的子查询。这个技术可以使用SELECT语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中。
3.使用联合(UNION)来代替手动创建的临时表
MySQL从4.0的版本开始支持union查询,它可以把需要使用临时表的两条或更多的select查询合并的一个查询中。
在客户端的查询会话结束的时候,临时表会被自动删除,而保证数据库整齐、高效
4.事务
事务的另一个重要作用是当多个用户同时使用相同的数据源时,它可以利用锁定数据库的方法来为用户提供一种安全的访问方式,
这样可以保证用户的操作不被其它的用户所干扰。
5.锁定表
下面的例子就用锁定表的方法来完成前面一个例子中事务的功能
6.使用外键
外键可以保证每一条销售记录都指向某一个存在的客户
7.使用索引
MySQL从版本3.23.23开始支持全文索引和搜索。全文索引在MySQL中是一个FULLTEXT类型索引,但仅能用于MyISAM类型的表。
对于一个大的数据库,将数据装载到一个没有FULLTEXT索引的表中,然后再使用ALTERTABLE或CREATEINDEX创建索引,将是非常快的。
8.优化的查询语句
首先,最好是在相同类型的字段间进行比较的操作。
其次,在建有索引的字段上尽量不要使用函数进行操作。
第三,在搜索字符型字段时,我们有时会使用LIKE关键字和通配符,这种做法虽然简单,但却也是以牺牲系统性能为代价的
9.SQL优化
(1).创建索引
(2).复合索引
(3).索引不包含有NULL值的列
(4).使用短索引
(5).排序的索引问题
(6).like语句操作
(7).不要在列上操作
(8).不使用NOT IN 和<>操作
10.MYSQL存储引擎
(1).MyISAM:这种引擎是mysql最早提供的。这种引擎又可以分为静态MyISAM、动态MyISAM 和压缩MyISAM三种,不管是何种MyISAM表,目前它都不支持事务,行级锁和外键约束的功能。
(2).MyISAM Merge引擎:这种类型是MyISAM类型的一种变种。合并表是将几个相同的MyISAM表合并为一个虚表。常应用于日志和数据仓库。
(3).InnoDB:InnoDB表类型可以看作是对MyISAM的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能,也是目前MySQL默认的存储引擎。
(4).Memory(heap):这种类型的数据表只存在于内存中。它使用散列索引,所以数据的存取速度非常快。因为是存在于内存中,所以这种类型常应用于临时表中。
(5) .archive:这种类型只支持select 和 insert语句,而且不支持索引。常应用于日志记录和聚合分析方面。