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出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段
使用 json rereiver php mysql 在片段中填充列表视图
关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4Unknown system variable ‘query_cache_size(代码片段
修改MySQL密码报错“ERROR 1819 (HY000): Your password does not satisfy the current policy requirements“(代码片段