zoukankan      html  css  js  c++  java
  • MySQL常用的一些语句,索引,字段等

    1、库相关:
    建库:
    character set:指定编码
    COLLATE:排序规则 utf8mb4_general_ci 大小写不敏感
    CREATE DATABASE `test_db` default character set utf8mb4 COLLATE utf8mb4_general_ci;

    查看建库语句:
    SHOW CREATE DATABASE `test_db`;

    2、数据表相关:
    建表:
    CREATE TABLE `video` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(100) NOT NULL DEFAULT '' COMMENT '视频名字',
      `cat_id` smallint(4) unsigned NOT NULL DEFAULT '0' COMMENT '分类id',
      `image` varchar(200) NOT NULL DEFAULT '',
      `url` varchar(200) NOT NULL DEFAULT '',
      `type` tinyint(2) unsigned NOT NULL DEFAULT '0',
      `content` text,
      `uploader` varchar(200) NOT NULL DEFAULT '',
      `create_time` int(10) unsigned NOT NULL DEFAULT '0',
      `update_time` int(10) unsigned NOT NULL DEFAULT '0',
      `status` tinyint(2) unsigned NOT NULL DEFAULT '0',
      PRIMARY KEY (`id`),
      INDEX `cat_info`(`cat_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    查看表:
    SHOW CREATE TABLE `video`;#建表语句
    DESC `video`;
    DESCRIBE `video`;

    修改表的存储引擎:
    ALTER TABLE `video` ENGINE=MyISAM;
    ALTER TABLE `video` ENGINE=InnoDB;

    3、索引增加查看删除
    索引创建:
    3.a、加主键索引
    ALTER TABLE `table_name` ADD PRIMARY KEY (`column`)
    复合主键:
    ALTER TABLE `table_name` ADD PRIMARY KEY(`column1`,`column2`);

    3.b、加唯一索引
    ALTER TABLE `table_name` ADD UNIQUE (`column`)

    3.c、加单列索引
    ALTER TABLE `table_name` ADD INDEX index_name (`column`)

    3.d、加全文索引
    ALTER TABLE `table_name` ADD FULLTEXT (`column`)
    Note:
    MySQL5.6.24上InnoDB引擎也加入了全文索引:https://www.cnblogs.com/MaxElephant/p/9871132.html
    MySQL5.7.6支持了对中文的全文索引支持:https://blog.csdn.net/deng214/article/details/80400636

    3.e、添加复合索引[多列索引] [最左前缀原则]
    ALTER TABLE `table_name` ADD INDEX index_name (`column1`,`column2`,`column3`)

    Note:
    note.1
    多个单列索引与单个多列索引的查询效果不同,因为执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。
    平时用的SQL查询语句一般都有比较多的限制条件,所以为了进一步榨取MySQL的效率,就要考虑建立组合索引。
    例如对上面video表中针对name和create_time建立一个组合索引:
    name字段取前50个字符建立索引。
    ALTER TABLE `video` ADD INDEX index_name_ctime (name(50),create_time)
    建立这样的组合索引,其实是相当于分别建立了下面两组组合索引:
    * name,create_time
    * name

    为什么没有create_time这样的组合索引呢?
    这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这两列的查询都会用到该组合索引,如下面的几个SQL所示:
    能使用到上面的索引:
    * SELECT * FROM `video` WHREE name='测试' AND create_time=1234567890;
    * SELECT * FROM `video` WHREE name='测试';
    不能使用上面的索引:
    * SELECT * FROM `video` WHREE create_time=1234567890;

    note.2、索引不会包含有NULL值的列
    只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。
    所以我们在数据库设计时不要让字段的默认值为NULL。

    note.3、索引列排序
    MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。
    因此数据库默认排序可以符合要求的情况下不要使用排序操作,尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。

    note.4、like语句操作
    使用like时,只有 like "aaa%" 才会使用到索引

    note.5、不要在列上进行运算
    例如:select * from users where YEAR(create_date)<2007,将在每个行上进行运算,这将导致索引失效而进行全表扫描,
    因此我们可以改成:select * from users where create_date<'2017-01-01'。

    note.6、字符串字段的索引,查询时带上单引号
    参考文章:
    https://www.zendstudio.net/archives/single-quotes-or-no-single-quotes-in-sql-query/

    note.7、最后
    MySQL只对以下操作符才使用索引:
    <,<=,=,>,>=,between,in,以及某些时候的like(不以通配符%或_开头的情形)。
    而理论上每张表里面最多可创建16个索引,不过除非是数据量真的很多,否则过多的使用索引也不是那么好玩的,比如我刚才针对text类型的字段创建索引的时候,系统差点就卡死了。

    索引查看:
    SHOW INDEX FROM `table_name`;

    索引删除:
    DROP INDEX `index_name` ON `table_name`;

    ALTER TABLE `table_name` DROP INDEX `index_name`;

    4、字段增加修改删除
    增加:
    增加字段:
    ALTER TABLE `table_name` ADD `email` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '邮箱';

    增加字段,并将增加的字段位于某个字段后面:
    ALTER TABLE `table_name` ADD `email` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '邮箱' AFTER `telephone`;

    修改:
    修改字段数据属性:
    ALTER TABLE `table_name` MODIFY `email` CHAR(80) NOT NULL DEFAULT '' COMMENT '定长邮箱';

    修改字段名称和属性:
    ALTER TABLE `table_name` CHANGE `email` `user_email` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '用户邮箱';

    给字段设置默认值:
    ALTER TABLE `table_name` ALTER `user_email` SET DEFAULT 'username@qq.com';

    修改自增长键的起始值:
    ALTER TABLE `table_name` AUTO_INCREMENT=100;

    删除:
    删除字段:
    ALTER TABLE `table_name` DROP COLUMN `user_email`;

    删除多个字段:
    ALTER TABLE `table_name` DROP COLUMN `user_email`,DROP COLUMN `telephone`;

  • 相关阅读:
    [py]戏说python面向对象细节
    [py]彻底细究web框架的wsgi+逻辑处理模块
    [py]access日志入mysql-通过flask前端展示
    [sql]mysql管理手头手册,多对多sql逻辑
    [py]requests+json模块处理api数据,flask前台展示
    [py]flask从0到1-模板/增删改查
    [wx]雪落香杉树人物关系图
    [py]资源搜集
    [py]python之信用卡ATM
    【Unity技巧】开发技巧(技巧篇)
  • 原文地址:https://www.cnblogs.com/deverz/p/11063146.html
Copyright © 2011-2022 走看看