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`;
MySQL常用的一些语句,索引,字段等的更多相关文章
- MySQL 常用的sql语句小结(待续)
mysql 常用的sql语句 1.查看数据库各个表中的记录数 USE information_schema; SELECT table_name,table_rows FROM tables WHER ...
- MySQL常用命令和语句
1.常用SQL语句 1)常用函数/*type可取值为:MICROSECONDSECONDMINUTEHOURDAYWEEKMONTHQUARTERYEARSECOND_MICROSECONDMINUT ...
- Mysql explain分析SQL语句之字段属性说明
在 explain的帮助下,您就知道什么时候该给表添加索引,以使用索引来查找记录从而让select 运行更快.如果由于不恰当使用索引而引起一些问题的话,可以运行 analyze table来更新该表的 ...
- MySQL常用命令与语句
目录 Shell命令 查看系统信息 查看系统变量 设置系统变量 数据库操作 查看表信息 修改表语句 操作表 操作索引 操作约束 操作列 查询常用语句 Shell命令 mysql -uroot -p12 ...
- 【mysql】工作中mysql常用命令及语句
1.查看mysql版本号 MySQL [release_test_oa]> select version(); +------------+ | version() | +----------- ...
- SQL注入之MySQL常用的查询语句
MySQL是一种使用很广的数据库,大部分网站都是用MySQL,所以熟悉对MySQL数据库的注入很重要. 首先来说下MySQL注入的相关知识点 在MySQL5.0版本之后,MySQL默认在数据库存放一个 ...
- 关于MySQL常用的查询语句
一查询数值型数据: SELECT * FROM tb_name WHERE sum > 100; 查询谓词:>,=,<,<>,!=,!>,!<,=>,= ...
- mysql常用修改创建语句
一.连接数据库 <?php $dbhost = 'localhost:3306'; // mysql服务器主机地址 $dbuser = 'root'; // mysql用户名 $dbpass = ...
- Mysql常用的查询语句,记录一下,好东西大家共享
一查询数值型数据: SELECT * FROM tb_name WHERE sum > 100; 查询谓词:>,=,<,<>,!=,!>,!<,=>,= ...
随机推荐
- Elasticsearch+Logstash+Kibana搭建日志平台
1 ELK简介 ELK是Elasticsearch+Logstash+Kibana的简称 ElasticSearch是一个基于Lucene的分布式全文搜索引擎,提供 RESTful API进行数据读写 ...
- jQuery基础--CSS操作、class操作、attr操作、prop操作
1.1.1 css操作 功能:设置或者修改样式,操作的是style属性. 设置单个样式 //name:需要设置的样式名称 //value:对应的样式值 css(name, value); //使 ...
- word中迅速将表格一分为二 拆分表格快捷键ctrl+shift+enter 重复上一个命令快捷键f4
这里说的是将一个表格拆分为两个表格 选择要拆分的行,快捷键ctrl+shift+enter,就拆分为两个表格了,是不是很快! 在多个表格需要拆分的时候,做一次这样的操作,然后不停的移动.F4,就可以了 ...
- 学习mybaits用到的4张表
items orderdetail orders user
- python读取ini文件时,特殊字符的读取
前言: 使用python在读取配置文件时,由于配置文件中存在特殊字符,读取时出现了以下错误: configparser.InterpolationSyntaxError: '%' must be fo ...
- 04 volatile关键字实现原理
volatile关键字实现原理 1.volatile关键字的语义分析 作用:让其他线程能够马上感知到某个线程多某个变量的修改 保证可见性 对共享变量的修改,其他线程能够马上感知到 保证有序性 在重排序 ...
- CodeForces 711D Directed Roads (DFS找环+组合数)
<题目链接> 题目大意: 给定一个$n$条边,$n$个点的图,每个点只有一条出边(初始状态),现在能够任意对图上的边进行翻转,问你能够使得该有向图不出先环的方案数有多少种. 解题分析: 很 ...
- k3 cloud中提示总账期末结账提示过滤条件太长,请修改此过滤条件
k3 cloud中提示总账期末结账提示过滤条件太长,请修改此过滤条件,如下图所示: 处理方法: 请尝试系统配置文件common.config中将如附件所示的参数值改大,建议值为2000,并在系统清理缓 ...
- 纯手动拉WebPanel页面保存出现错误提示 "error:字符文本中的字符太多"
环境为.Net 没有使用WorkWithPlus 纯手拉WebFrom页面 问题出现情况如下:在拉页面的过程中拖了3个Value类型的变量到Table中 页面如下 但是在我保存的时候 发现提示如下错 ...
- 2018-8-10-win10-uwp-毛玻璃
title author date CreateTime categories win10 uwp 毛玻璃 lindexi 2018-08-10 19:16:50 +0800 2018-2-13 17 ...