mysql字段简索引_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:
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
note.6、字符串字段的索引,查询时带上单引号
参考文章:
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常用的一些语句,索引,字段等相关推荐
- mysql字段重命名_MySQL中使用SQL语句对字段进行重命名
MySQL中,如何使用SQL语句来对表中某一个字段进行重命名呢?我们将使用alter table 这一SQL语句. 重命名字段的语法为:alter table change . 现在我们来尝试把tes ...
- mysql最常用的索引_mysql常用索引
1.索引 在关系数据库中,索引是一种单独的.物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单.索引的作用相当 ...
- mysql 离散度低 索引_mysql给离散度低的字段建立索引会出现什么问题,具体说下原因。...
先说结论 重复性较强的字段,不适合添加索引.mysql给离散度低的字段,比如性别设置索引,再以性别作为条件进行查询反而会更慢. 原因 一个表可能会涉及两个数据结构(文件),一个是表本身,存放表中的数据 ...
- mysql切换系统盘命令_mysql常用命令
一.连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -ur ...
- MySQL退出选择表格_MySQL常用命令
一.连接MySQL 格式:mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MySQ: 首先在打开cmd窗口,输入mysql -uroot -p ,然后空格进入MySQL控制台, ...
- mysql 设置为空_MySQL中可为空的字段设置为NULL还是NOT NULL
经常用mysql的人可能会遇到下面几种情况: 1.我字段类型是not null,为什么我可以插入空值 2.为什么not null的效率比null高 3.判断字段不为空的时候,到底要用 select * ...
- mysql 中abs函数_Mysql常用函数
本文内容: mysql函数的介绍 聚集函数 avg count max min sum 用于处理字符串的函数 合并字符串函数:concat(str1,str2,str3-) 比较字符串大小函数:str ...
- mysql 回表查询优化_mysql:若何行使笼罩索引制止回表优化查询
说到笼罩索引之前,先要领会它的数据结构:B+树. 先建个表演示(为了简朴,id按顺序建): id name 1 aa 3 kl 5 op 8 aa 10 kk 11 kl 14 jk 16 ml 17 ...
- mysql中视图备份_MySQL 事务、视图、索引、备份和恢复
事务 为什么需要事务: 转账.总量不变,但其他值进行变化. 事务是什么: 作为单个逻辑工作单元执行的一系列操作. 多个操作作为一个整体向系统提交,要么执行/不执行. 事务是一个不可分割的工作逻辑单元. ...
最新文章
- 难忘的一天——装操系统(五)
- win10+Linux双系统安装及一些配置问题
- jquery学习之重要知识点
- CrtInvertedIdx
- python开发环境功能介绍_第一模块 第3章 Python介绍与环境配置
- linux手机用什么购物支付,商城系统的微信支付应该如何配置?
- mimo-ofdm无线通信技术及matlab实现_智芯文库 | FPGA无线通信课程连载——扰码的原理及实现...
- 清新浪漫风情人节海报PSD分层模板!
- 聊一聊Android的第三方开发组件
- 三星android智能手机usb驱动程序,三星手机USB驱动
- c语言家庭财务管理算法,c语言家庭财务管理报告.doc
- J2EE 高 级 软 件 工 程 师 面 试 题 集
- drupal 8 php filter,Drupal 7 与 Drupal 8 的一些变化
- 苏格拉底和柏拉图甩手的故事
- android 强制开启wifi,强制Android使用无网络的Wifi网络
- https://vkceyugu.cdn.bspapp.com/VKCEYUGU-5e444e88-b038-4060-8096-b66a1ee2f304/e7274947-16bb-444a-ae8
- Sybase数据库自动备份的实现
- 项目管理之产品交付1
- 数字证书连接服务器异常,连接时Socket.io + SSL +自签名CA证书出现错误
- 快手上市 CEO写下70万行代码 致敬程序员改变世界
热门文章
- java编程中的di是什么_java-在Spring IoC / DI中使用@Component注释对接口...
- jquery开关灯案例_全屋开关插座布局讲解,自己规划怕遗漏,手把手教你,很详细...
- 让你的对象跑出内存,写入到磁盘或者进行网络传输,一文掌握Java对象序列化
- vmware中centos6.4突然无法进入图形界面解决方法
- [bzoj3532][Sdoi2014]Lis
- html css 知识回顾2
- zabbix主动、被动检测的详细过程与区别
- Android 4.0 Launcher源码分析系列(二)
- 学习《Building Applications with FME Objects》 之四 从数据集读取要素
- routing zuul_尚学堂0131之zuul的相关概念及如何性能调优