澳门十大赌场最新排名 > 澳门十大赌场 > 目录介绍

原标题:目录介绍

浏览次数:185 时间:2019-08-01

索引

1、概述

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。

建立索引会占用磁盘空间的索引文件。

2、索引种类

  • 普通索引:仅加速查询
  • 唯一索引:加速查询 列值唯一(可以有null)
  • 主键索引:加速查询 列值唯一  表中只有一个(不可以有null)
  • 组合索引:多列值组成一个索引,
                  专门用于组合搜索,其效率大于索引合并
  • 全文索引:对文本的内容进行分词,进行搜索 

索引合并:使用多个单列索引组合查询搜索
覆盖索引:select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖

a、普通索引

普通索引仅有一个功能:加速查询

澳门十大赌场最新排名 1澳门十大赌场最新排名 2

create table in1(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    index ix_name (name)
)

创建表 索引

澳门十大赌场最新排名 3澳门十大赌场最新排名 4

create index index_name on table_name(column_name)

创建索引

澳门十大赌场最新排名 5澳门十大赌场最新排名 6

drop index_name on table_name;

删除索引

澳门十大赌场最新排名 7澳门十大赌场最新排名 8

show index from table_name;

查看索引

注意:对于创建索引时如果是BLOB 和 TEXT 类型,必须指定length。

create index ix_extra on in1(extra(32));

b、唯一索引

唯一索引有两个功能:加速查询 和 唯一约束(可含null)

澳门十大赌场最新排名 9澳门十大赌场最新排名 10

create table in1(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    unique ix_name (name)
)

创建唯一索引 表

澳门十大赌场最新排名 11澳门十大赌场最新排名 12

create unique index 索引名 on 表名(列名)

创建唯一索引

澳门十大赌场最新排名 13澳门十大赌场最新排名 14

drop unique index 索引名 on 表名

删除唯一索引

c、主键索引

主键有两个功能:加速查询 和 唯一约束(不可含null)

澳门十大赌场最新排名 15澳门十大赌场最新排名 16

create table in1(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    index ix_name (name)
)

OR

create table in1(
    nid int not null auto_increment,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    primary key(ni1),
    index ix_name (name)
)

创建表 创建主键

澳门十大赌场最新排名 17澳门十大赌场最新排名 18

alter table 表名 add primary key(列名);

创建主键

澳门十大赌场最新排名 19澳门十大赌场最新排名 20

alter table 表名 drop primary key;
alter table 表名  modify  列名 int, drop primary key;

删除主键

d、组合索引

组合索引是将n个列组合成一个索引

其应用场景为:频繁的同时使用n列来进行查询,如:where n1 = 'djb' and n2 = 666

澳门十大赌场最新排名 21澳门十大赌场最新排名 22

create table in3(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text
)

创建表

澳门十大赌场最新排名 23澳门十大赌场最新排名 24

create index ix_name_email on in3(name,email);

创建索引

3、相关命令

- 查看表结构
    desc 表名

- 查看生成表的SQL
    show create table 表名

- 查看索引
    show index from  表名

- 查看执行时间
    set profiling = 1;
    SQL...
    show profiles;

4、使用索引和不使用索引

由于索引是专门用于加速搜索而生,所以加上索引之后,查询效率会快到飞起来。

5、正确使用索引

数据库表中添加索引后确实会让查询速度起飞,但前提必须是正确的使用索引来查询,如果以错误的方式使用,则即使建立索引也会不奏效。
即使建立索引,索引也不会生效:

- like '%xx'
    select * from tb1 where name like '%cn';
- 使用函数
    select * from tb1 where reverse(name) = 'wupeiqi';
- or
    select * from tb1 where nid = 1 or email = 'seven@live.com';
    特别的:当or条件中有未建立索引的列才失效,以下会走索引
            select * from tb1 where nid = 1 or name = 'seven';
            select * from tb1 where nid = 1 or email = 'seven@live.com' and name = 'alex'
- 类型不一致
    如果列是字符串类型,传入条件是必须用引号引起来,不然...
    select * from tb1 where name = 999;
- !=
    select * from tb1 where name != 'alex'
    特别的:如果是主键,则还是会走索引
        select * from tb1 where nid != 123
- >
    select * from tb1 where name > 'alex'
    特别的:如果是主键或索引是整数类型,则还是会走索引
        select * from tb1 where nid > 123
        select * from tb1 where num > 123
- order by
    select email from tb1 order by name desc;
    当根据索引排序时候,选择的映射如果不是索引,则不走索引
    特别的:如果对主键排序,则还是走索引:
        select * from tb1 order by nid desc;

- 组合索引最左前缀
    如果组合索引为:(name,email)
    name and email       -- 使用索引
    name                 -- 使用索引
    email                -- 不使用索引

6、其他注意事项

1 - 避免使用select *
2 - count(1)或count(列) 代替 count(*)
3 - 创建表时尽量时 char 代替 varchar
4 - 表的字段顺序固定长度的字段优先
5 - 组合索引代替多个单列索引(经常使用多个条件查询时)
6 - 尽量使用短索引
7 - 使用连接(JOIN)来代替子查询(Sub-Queries)
8 - 连表时注意条件类型需一致
9 - 索引散列值(重复少)不适合建索引,例:性别不适合

7、limit分页

方案:
记录当前页最大或最小ID
1. 页面只有上一页,下一页
# max_id
# min_id
下一页:
select * from userinfo3 where id > max_id limit 10;
上一页:
select * from userinfo3 where id < min_id order by id desc limit 10;
2. 上一页 192 193  [196]  197  198  199 下一页

select * from userinfo3 where id in (select id from (select id from userinfo3 where id > max_id limit 30) as N order by N.id desc limit 10)

8、执行计划

explain 查询SQL - 用于显示SQL执行信息参数,根据参考信息可以进行SQL优化

mysql> explain select * from tb2;
 ---- ------------- ------- ------ --------------- ------ --------- ------ ------ ------- 
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra |
 ---- ------------- ------- ------ --------------- ------ --------- ------ ------ ------- 
|  1 | SIMPLE      | tb2   | ALL  | NULL          | NULL | NULL    | NULL |    2 | NULL  |
 ---- ------------- ------- ------ --------------- ------ --------- ------ ------ ------- 
1 row in set (0.00 sec)

9、慢日志查询

a、配置MySQL自动记录慢日志

slow_query_log = OFF                            是否开启慢日志记录
long_query_time = 2                              时间限制,超过此时间,则记录
slow_query_澳门十大赌场最新排名,log_file = /usr/slow.log        日志文件
log_queries_not_using_indexes = OFF     为使用索引的搜索是否记录

注:查看当前配置信息:
       show variables like '%query%'
     修改当前配置:
    set global 变量名 = 值

b、查看MySQL慢日志

mysqldumpslow -s at -a  /usr/local/var/mysql/MacBook-Pro-3-slow.log

澳门十大赌场最新排名 25澳门十大赌场最新排名 26

"""
--verbose    版本
--debug      调试
--help       帮助

-v           版本
-d           调试模式
-s ORDER     排序方式
             what to sort by (al, at, ar, c, l, r, t), 'at' is default
              al: average lock time
              ar: average rows sent
              at: average query time
               c: count
               l: lock time
               r: rows sent
               t: query time
-r           反转顺序,默认文件倒序拍。reverse the sort order (largest last instead of first)
-t NUM       显示前N条just show the top n queries
-a           不要将SQL中数字转换成N,字符串转换成S。don't abstract all numbers to N and strings to 'S'
-n NUM       abstract numbers with at least n digits within names
-g PATTERN   正则匹配;grep: only consider stmts that include this string
-h HOSTNAME  mysql机器名或者IP;hostname of db server for *-slow.log filename (can be wildcard),
             default is '*', i.e. match all
-i NAME      name of server instance (if using mysql.server startup script)
-l           总时间中不减去锁定时间;don't subtract lock time from total time
"""

View

一. 指定路径

  在上一篇里,二进制包解压后,全部放入在/usr/local/mysql目录下,在安装时指定了基础目录和数据目录, --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data 。

--有些文件在安装,是没有指定路径,安装后默认分布如下: 
    错误消息文件和字符集文件(share/mysql)。
    my.cnf(/etc/my.cnf)。
    socket=/var/lib/mysql/mysql.sock。
   --my.cnf里的配置
    [mysqld_safe]
    log-error=/var/log/mariadb/mariadb.log
    pid-file=/var/run/mariadb/mariadb.pid。

--网上查了资源,在安装时可以指定路径 如下所示:
[root@hsr bin]# ./mysqld  
--defaults-file=/usrl/local/mysql/etc/my.cnf 
--socket=/var/run/mysqld/mysqld.sock 
--log-error=/var/log/mariadb/mariadb.log  
--pid-file=/var/run/mariadb/mariadb.pid  
--initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

  Linux是建议第三方软件放在/opt下。官网文档 Initializing the Data Directory Manually Using mysqld

澳门十大赌场最新排名 27

认识mysql第三篇,发出的内容适合初学者,如果能持续关注我的博客,可以全面的掌握mysql的常用知识,后续我也会陆续发出python相关的知识,关注我,和我一共进步吧!

事务

1、概述

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务,但是一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性。!

  • 在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务
  • 事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行
  • 事务用来管理insert,update,delete语句

一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)

  • 1、事务的原子性:一组事务,要么成功;要么撤回。
  • 2、稳定性 : 有非法数据(外键约束之类),事务撤回。
  • 3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。
  • 4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。

2、事务操作

  • 开启事务 start transaction
  • 回滚事务 rollback
  • 提交事务 commit
  • 保留点    savepoint

    delimiter -- 此条可更改SQL语句结束符 create PROCEDURE p1(

    OUT p_return_code tinyint
    

    ) BEGIN DECLARE exit handler for sqlexception BEGIN

    -- ERROR 
    set p_return_code = 1; 
    rollback; 
    

    END;

    DECLARE exit handler for sqlwarning BEGIN

    -- WARNING 
    set p_return_code = 2; 
    rollback; 
    

    END;

    START TRANSACTION;

    DELETE from tb1;
    insert into tb2(name)values('seven');
    

    COMMIT;

    -- SUCCESS set p_return_code = 0;

    END delimiter ;

二 . MYSQL二进制安装目录  

二进制安装目录

rpm安装目录

二进制目录说明

bin客户端程序和mysqld服务器

/usr/bin(客户端程序和脚本)
/usr/sbin(mysqld服务器)

/usr/local/mysql/bin

在上一篇里的"七 登录mysql"里做了文件映射。

 ln -s /usr/local/mysql/bin/mysql /usr/bin

Data日志文件和数据文件

/var/lib/mysql(日志文件和数据库)

这里安装时自定义在/usr/local/mysql/data下。

Docs 文档和ChangeLog

 

/usr/local/mysql/docs

Include 包含(头)文件lib(库文件)

 

/usr/local/mysql/include,/usr/local/mysql/lib

share/mysql 错误消息文件和字符集文件

 

/usr/share/mysql (默认路径)

1、SQL查询
  1、执行顺序
    3、select ...聚合函数 from 表名
      1、where ...
      2、group by ...
      4、having ...
      5、order by ...
      6、limit ...
  2、group by
    1、作用 :给查询结果进行分组
    2、示例
      1、查询表中一共有几个国家

视图

视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,并可以将其当作表来使用。

澳门十大赌场最新排名 28澳门十大赌场最新排名 29

SELECT
    *
FROM
    (
        SELECT
            nid,
            NAME
        FROM
            tb1
        WHERE
            nid > 2
    ) AS A
WHERE
    A. NAME > 'djb';

临时表搜素

1、创建视图

澳门十大赌场最新排名 30澳门十大赌场最新排名 31

--格式:CREATE VIEW 视图名称 AS  SQL语句
CREATE VIEW v1 AS 
SELET nid, 
    name
FROM
    A
WHERE
    nid > 4

创建视图

2、删除视图

澳门十大赌场最新排名 32澳门十大赌场最新排名 33

--格式:DROP VIEW 视图名称

DROP VIEW v1

删除视图

3、修改视图

澳门十大赌场最新排名 34澳门十大赌场最新排名 35

-- 格式:ALTER VIEW 视图名称 AS SQL语句

ALTER VIEW v1 AS
SELET A.nid,
    B. NAME
FROM
    A
LEFT JOIN B ON A.id = B.nid
LEFT JOIN C ON A.id = C.nid
WHERE
    A.id > 2
AND C.nid < 5

修改视图

4、使用视图

使用视图时,将其当作表进行操作即可,由于视图是虚拟表,所以无法使用其对真实表进行创建、更新和删除操作,仅能做查询用。

澳门十大赌场最新排名 36澳门十大赌场最新排名 37

select * from v1

View Code

三. 重启系统后登录报错

-- 错误信息如下:
[root@hsr ~]#  mysql -u root -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

  解决方法:

  1. 在my.cnf里指定socket=/tmp/mysql.sock

  2. 启动mysql

    [root@hsr ~]# service mysql start
    Starting MySQL.. SUCCESS!

  3.再登录mysql OK

    [root@hsr ~]#  mysql -u root -p

    Enter password:

    Welcome to the MySQL monitor.  Commands end with ; or g.

    Your MySQL connection id is 2

    Server version: 5.7.23 MySQL Community Server (GPL)

      2、计算每个国家的平均攻击力
      select country,avg(gongji) from sanguo
      group by country;
    3、查找所有国家中英雄数量最多的前2名的 国家名称和英雄数量
      select country,count(id) as number from sanguo
      group by country
      order by number desc
      limit 2;
3、注意
  1、group by之后的字段名必须要为select之后的字段名
  2、如果select之后的字段名和group by之后的字段不一致,则必须对该字段进行聚合处理(聚合函数)
  3、having语句
1、作用
对查询的结果进行进一步筛选
2、示例
  1、找出平均攻击力>105的国家的前2名,显示国家名和平均攻击力
  select country,avg(gongji) as pjgj from sanguo
  group by country
  having pjgj>105
  order by pjgj DESC
  limit 2;
3、注意
  1、having语句通常和group by语句联合使用,过滤由group by语句返回的记录集
  2、where只能操作表中实际存在字段,having可操作由聚合函数生成的显示列
4、distinct
  1、作用 :不显示字段重复值
  2、示例
1、表中都有哪些国家
  select distinct country from sanguo;
2、计算蜀国一共有多少个英雄
  select count(distinct id) from sanguo
  where country="蜀国";
3、注意
  1、distinct和from之间所有字段都相同才会去重
  2、distinct不能对任何字段做聚合处理
5、查询表记录时做数学运算
1、运算符
   - * / %
2、示例
1、查询时所有英雄攻击力翻倍
select id,name,gongji*2 as gj from sanguo;

本文由澳门十大赌场最新排名发布于澳门十大赌场,转载请注明出处:目录介绍

关键词: mg4355娱乐平台

上一篇:Sqlserver数据库中,使用动态SQL创建数据库

下一篇:没有了