您现在的位置是: 网站首页> MySQL MySQL

MySQL的进阶操作与使用

Smile 2019-06-22 MySQL 阅读:122

简介MySQL 是最流行的关系型数据库管理系统,在web应用开发中大量使用,与PHP和Apache堪称web开发中的黄金搭档,并且开源免费,备受开发者的喜爱,本文讲解MySQL的一些进阶操作与使用,使得在开发中使用MySQL更加轻松。

1、使用ALTER命令修改表结构

(1)添加表字段

ALTER TABLE article ADD status TINYINT;

添加时指定在某个字段之后

ALTER TABLE article ADD status TINYINT AFTER cid;

(2)删除字段

ALTER TABLE article  DROP status;

(3)修改字段名称以及类型

仅修改字段类型

ALTER TABLE article MODIFY status INT;

修改字段名称及类型

ALTER TABLE article CHANGE status type INT;

修改时指定默认值

ALTER TABLE article MODIFY type TINYINT NOT NULL DEFAULT 1;

也可以这样修改默认值

ALTER TABLE article ALTER type SET DEFAULT 1;

删除默认值

ALTER TABLE article ALTER type DROP DEFAULT;

(4)修改表名称

ALTER TABLE article RENAME TO article2;

2、创建索引

(1)普通索引

创建表 + 索引:

CREATE TABLE IF NOT EXISTS `article`(
   `id` INT UNSIGNED AUTO_INCREMENT,
   `title` VARCHAR(100) NOT NULL,
   `author` VARCHAR(40) NOT NULL,
   `content` TEXT NOT NULL,
   INDEX indexName (title)
   PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建索引:

CREATE INDEX indexName ON article(title); 

使用 ALTER 创建索引

ALTER table article ADD INDEX indexName(title);

删除索引

DROP INDEX indexName ON article;
ALTER TABLE article DROP INDEX indexName;

(2)唯一索引

创建表 + 索引:

CREATE TABLE IF NOT EXISTS `article`(
   `id` INT UNSIGNED AUTO_INCREMENT,
   `title` VARCHAR(100) NOT NULL,
   `author` VARCHAR(40) NOT NULL,
   `content` TEXT NOT NULL,
   UNIQUE indexName (title)
   PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建索引:

CREATE UNIQUE INDEX indexName ON article(title); 

使用 ALTER 创建索引

ALTER table article ADD UNIQUE indexName (title);

删除索引:

DROP INDEX indexName ON article;
ALTER TABLE article DROP UNIQUE INDEX indexName;

(3)组合索引

创建索引

CREATE INDEX indexName on article(title,author);

注:如上创建组合索引之后,查询(最左匹配)

  •  name and email  -- 使用索引
  • name                    -- 使用索引
  • email                    -- 不使用索引

(4)显示索引信息

SHOW INDEX FROM article \G;

3、explain 执行计划:

explain sql语句

不使用索引,普通查询

mysql> explain select * from article \G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: article
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 4
     filtered: 100.00
        Extra: NULL
1 row in set, 1 warning (0.00 sec)

使用id主键索引查询

mysql> explain select * from article where id=1 \G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: article
   partitions: NULL
         type: const
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 4
          ref: const
         rows: 1
     filtered: 100.00
        Extra: NULL
1 row in set, 1 warning (0.00 sec)

type:

  1. --All:全表扫描
  2. --index:全索引表扫描
  3. --range:对索引列进行范围查找
  4. --INDEX_MERGE:合并索引,使用多个单列索引搜索
  5. --REF:根据索引查找一个或多个值
  6. --EQ_REF:连接时使用primary key 或 unique类型
  7. --CONST:表最多有一个匹配行,因为仅有一行,在这行的列值可被优化器剩余部分认为是常数,const表很快,因为它们只读取一次。
  8. --SYSTEM:表仅有一行(=系统表)。这是const联接类型的一个特例。

很赞哦! (0)

文章评论

    2019-12-25微笑的鱼:

    文章不错

    2021-02-04 站长回复: 谢谢支持!!!

站点信息