1. distinct 去重复
select sum(单价*数量) from (select 牌子,单价,数量 from 啤酒 union all select 牌子,单价,数量 from 饮料union all select 牌子,单价,数量 from 矿泉水);
2.别名
2.1.表别名
SELECT a.tname ,GROUP_CONCAT(d.sname)
FROM teacher AS a
JOIN course AS b
ON a.tno = b.tno
JOIN sc as c
ON b.cno = c.cno
JOIN student AS d
ON c.sno = d.sno
WHERE a.tname='oldguo' AND c.score<60
GROUP BY a.tno;
2.2.列别名
selec count(distinct(name)) as 个数 from world.city;
--- 统计一下每个库的真实数据量
每张表数据量=AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH
SELECT
table_schema,
COUNT( table_name ),
SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024/1024 AS ToTAL_MB
FROM information_schema.TABLES
GROUP BY table_schema;
-- information_schema
--- 查询整个数据库中所有的库对应的表名
例如:
world city
world country
oldboy oldguo
SELECT table_schema,table_name
FROM information_schema.tables;
--- 查询world和school库下的所有表名
SELECT table_schema,table_name
FROM information_schema.tables
WHERE table_schema='world'
UNION ALL
SELECT table_schema,table_name
FROM information_schema.tables
WHERE table_schema='school';
--- 查询整个数据库中所有的库对应的表名,每个库显示成一行
SELECT table_schema,GROUP_CONCAT(table_name)
FROM information_schema.tables
GROUP BY table_schema;
--- 统计一下每个库下的表的个数
SELECT table_schema,COUNT(table_name)
FROM information_schema.tables
GROUP BY table_schema;
--- 统计一下每个库的真实数据量
每张表数据量=AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH
SELECT
SUM(AVG_ROW_LENGTH*TABLE_ROWS+INDEX_LENGTH)/1024/1024 AS total_mb
FROM information_schema.TABLES
--- information_schema.tables+CONCAT(),拼接命令
--- 使用方法举例
mysql> SELECT CONCAT(USER,"@","'",HOST,"'") FROM mysql.user;
--- 生产需求1
mysqldump -uroot -p123 world city >/tmp/world_city.sql
--- 模仿以上命令,对整个数据库下的1000张表进行单独备份,
--- 排除sys,performance,information_schema
mysqldump -uroot -p123 world city >/tmp/world_city.sql
SELECT CONCAT("mysqldump -uroot -p123 ",table_schema," ",table_name," >/tmp/",table_schema,"_",table_name,".sql")
FROM information_schema.tables
WHERE table_schema NOT IN('sys','performance','information_schema')
INTO OUTFILE '/tmp/
bak.sh';
vim /etc/my.cnf
secure-file-priv=/tmp
/etc/init.d/mysqld restart
5.show
show databases; ##查看所有数据库名
show tables;##查看当前库下的表名
show tables from world; ##查看world库下的表名
show create database;##查看建库语句
show create table; ##查看建表语句
show grants for root@‘localhost’; ##查看用户的权限信息
show charset;##查看字符集
show collation;##查看校对规则
show full processlist; ##查看数据库连接情况
show status; ##查看数据库的整体情况
show status like '%lock' ##模糊查询数据库的整体情况
show variables; ##查看数据库的所有变量情况
show variables like ‘innodb’;##查看数据库的所有变量情况
show engine; ##查看所有支持存储引擎状态
show engine innodb status; ##查看所有indodb存储引擎状态情况
show binary logs;##查看二进制日志情况
show binlog events in ##查看二进制日志事件
show relaylog events in ##查看relay日志事件
show slave status ##查看从库状态
show master status ##查看数据库binlog位置信息
show index from ##查看表的索引情况
6.索引
6.1 索引的作用
提供了类似于书中目录的作用,目的是为了优化查询
6.2 索引的种类算法
B树索引
Hash索引
R树
Full text
GIS
6.3 B树算法普及
B-树
B+树
B*树
6.4 在功能上的分类*****
6.4.1 辅助索引(s)怎么构造B树结构?
1)辅助索引是基于表的列生成的
2)取出索引列的所有值(取出所有键值)
3)进行所有键值的排序
4)将所有键值按顺序落到Btree索引的叶子节点上
5)进而生成枝节点和根节点
6)叶子节点除了储存键值以外还会生成指向原表内容的指针。
6.4.2 聚集索引(c)怎么构建B树结构?
1)一般情况下是主键
2)表中进行数据存储,会按照ID列的顺序,有序的存储一行一行的数据到数据页上(这个动作叫聚集组织索引表)
3)表中的数据页被作为聚集索引的叶子节点
4)把叶子节点的主键值生成上层枝节点和根节点。
6.4.3 聚集索引和辅助索引构成区别总结
聚集索引只能有一个,非空唯一,一般是主键
辅助索引可以有多个,是配合聚集索引使用的
聚集索引叶子节点,就是磁盘的数据行存储的数据页
mysql是根据聚集索引,组织存储数据,数据存储时就是按照聚集索引的顺序进行存储数据
辅助索引,只会提取索引键值,进行自动排序的生成B树结构
6.5 辅助索引细分
单列的辅助索引
联合多列辅助索引(覆盖索引)
唯一索引
6.6 关于索引树的高度受什么影响?
1)数据行多
2)索引列字符长度,前缀索引
3)char varchar ,表设计
4)enum 优化索引高度