MySQL

Posted scanner小霸王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL相关的知识,希望对你有一定的参考价值。

1.count(*)和count(列名)区别

count(*)返回满足条件的记录的行数
count(1):统计满足条件的某列有多少个,会排除null

select count(if(comm is null,1,null)) from emp;
查出null的有多少
或者这样写:
(总人数-不为空的)
select count(*)-count(comm) from emp;

2.左连接和右连接

左连接:左表的数据完全显示,右表没有匹配上的显示为null
右连接:右表的数据完全显示,左表没有匹配上的显示为null

3.索引

1)创建索引:
create INDEX account_index on account(username);
索引本身会占用磁盘空间
2)索引的原理
SELECT *
from account t
WHERE t.username = ‘Jerry12’

ii)没有创建索引时候,是对全表进行扫描,
即使找到一条数据,仍然会继续找下去。

ii)有索引为什么会快?是形成了比如二叉树的数据结果
3)索引的代价
ii)磁盘占用
ii)数据的update,delete,insert会导致数据结构的重新修改,对update,delete,insert语句的效率有影响

4)索引的类型
ii)主键索引(primary key)
ii)唯一索引(UNIQUE)
ii)普通索引(INDEX)
ii)全文索引:(适用于MyISAM),开发需要考虑全文搜索Solr和ElasticSearch(ES)

5)索引的操作
ii)索引的创建
优先考虑唯一索引
–唯一索引(不能重复数据)
create UNIQUE INDEX balance_index on account(balance);

–普通索引
create INDEX account_index on account(username);

ii)索引的删除
–删除索引
drop INDEX account_index on account;

–删除主键索引
alter table account drop primary key:

ii)查询索引
方式一:
show index from account;
方式二:
show indexes from account;
方式三:
show key from account;
方式四:
DESC account;

6)索引的创建
ii)较频繁的作为查询条件的字段应该创建索引。
ii)唯一型太差的字段不适合单独创建索引,即使频繁作为查询

ii)更新频繁的字段不适合创建索引
(将会频繁对树结结构进行维护,对update,delete,insert有影响)

ii)不会出现在where 字句中字段不该创建索引

4事务

1)事务的步骤
开启事务
保存点
回滚
提交

-- 1.开始事务
START TRANSACTION
-- 2.设置保存点
SAVEPOINT a;
-- 3执行dml操作
insert into account(username,balance)
VALUES('test',100);

SAVEPOINT b;
-- 3执行dml操作
insert into account(username,balance)
VALUES('test2',200);

-- 回退(当ROLLBACK 没有节点时候,默认到开启事务的位置)
ROLLBACK to b;

-- 一旦commit就不能回退;
-- 当回退到a节点时候,就不能回退到b了
commit;

2)事务的隔离级别

不可重复读:就比如一开始就打算查询某个时候段的数据,但是由于另一个事务的操作,使得读取到的这个时间段的数据是被修改到的

不可重复读:指的是修改和删除
幻读:指的是插入

5.表类型和存储引擎



如何选择引擎

6.视图

定义:视图是虚拟表,其内容由查询定义,同真实的表一样,视图包含列,他的数据来自对应的真实表(基表)
总结:
ii)视图是根据基表(可以是多个基表)来创建的,视图是虚拟的
ii)视图也有列,数据来自于基表
ii)通过视图可以修改基表的数据;
ii)基表的改变也会影响视图的数据

视图的基本使用:


ii)创建:

create VIEW my_firstView
as 
select isbn,price
from book

ii)修改
视图的数据来自于基表,视图可以修改基表的数据,
基表也可以修改视图的数据

update my_firstView
set price = 10000
WHERE isbn = 'ISBN-001'

视图的最佳实践

7用户管理


创建用户

-- 1创建用户
-- 'hjr'表示用户名,localhost表示登录的ip
create user 'hjr'@'localhost' IDENTIFIED BY '123456'

查看用户信息

删除用户

-- 3删除用户
DROP USER 'hjr'@'localhost'

当前用户自己给自己修改密码

set password=password(‘aaa’);

给别的用户修改密码必须有修改密码的权限,例如root用户
update mysql.user set password=password(‘123456’) where user=‘hjr’;

MySQL中的权限


赋予tx数据库所有表的权限

grant SELECT,INSERT
ON tx.*
TO ‘hjr’@‘localhost’

** 回收权限**

REVOKE SELECT,INSERT on tx.*
from ‘hjr’@‘localhost’

或者

REVOKE SELECT,INSERT on tx.*
from ‘hjr’@‘localhost’

以上是关于MySQL的主要内容,如果未能解决你的问题,请参考以下文章

小贝_mysql select5种子句介绍

mysql having的用法

PostgreSQL——查询优化——生成优化计划2

PostgreSQL——查询优化——生成优化计划2

PostgreSQL——查询优化——生成优化计划2

MySQL中Union子句不支持order by的解决方法