Mysql之索引的基本概念语法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql之索引的基本概念语法相关的知识,希望对你有一定的参考价值。
参考技术A mysql索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。创建索引时,你需要确保该索引是应用在SQL 查询语句的条件(一般作为 WHERE 子句的条件)。 实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。
CREATE (UNQIUE)INDEX +索引名称+ON+表名(列名(长度))
例如:create unique index ac on sys_user(account);
ALTER TABLE+表名+ADD(UNIQUE) INDEX+索引名称(列名)
例如:alter table sys_user add unique index pa(password);
DROP INDEX 索引名称 ON 表 或者 alter table 表名 drop index 索引名;
例如:drop index pa on sys_user;& alter table sys_user drop index pa;
格式:SHOW INDEX FROM 表名;
SHOW INDEX FROM sys_user;
初识Mysql之基本简单语法总结
一、 DDL(data definition language)语句:数据定义语言。
这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象。常用语句关键字:create、drop、alter等。
- 创建数据库:CREATE DATABASE dbname (eg: mysql>create database test1; 查看系统中所有的数据库:mysql>show databases; )
- 选择数据库:USE dbname (eg: mysql>use test1; 查看test1里所有的数据表:mysql>show tables; )
- 删除数据库:drop database dbname; (eg: mysql>drop database test1;
- 创建表:CREATE TABLE tablename(column_name_1 column_type_1 constraints,
column_name_1 column_type_1 constraints,
...); 查看表的定义:desc tablename
5.有时需要查看创建表的SQL语句,
上图中除了可以看到staff表定义以外,还可以看到表的engine(存储引擎)和charset(字符集)等信息。“G”选项含义是使记录能够按照字段竖向排列,以便更好地显示内容较长的记录。
6.删除表:DROP TABLE tablename (eg: mysql>drop test;)
7.修改表:
(1)修改表类型,ALTER TABLE tablename MODIFY[COLUMN] column_definition [FIRST|AFTER col_name]
eg:修改表emp的ename字段定义,将varchar(10)改为varcahr(20)
(2)增加表字段,ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST|AFTER col_name]
eg:在表emp中新增字段age,类型为int(3)
(3)删除表字段,ALTER TABLE tablename DROP [COLUMN] col_name
eg:将字段age删除
(4)字段改名,ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name]
eg:将age改名为age1,同时修改类型为int(4)
(5)修改字段排列顺序,字段增加和修改(ADD|CHANGE|MODIFY)语法中,可选项first|after column_name,可以修改字段在表中的位置。(ADD默认加在最后,CHANGE/MODIFY默认不改变位置)
eg:新增字段birth date(birth的类型)加在ename之后
eg:修改字段age,放在最前
8.更改表名:ALTER TABLE tablename RENAME [TO] new_tablename
eg:将表enp改名为emp1
二、DML(data manipulation language)语句:数据操纵语句。
用于添加、删除、更新和查询数据库记录,并检查数据完整性。常用语句关键字:insert、delete、update和select等。
1.插入记录:INSERT INTO tablename(filed1,filed2,...,filedn) VALUES(values1,values2,...,valuesn);
eg:
也可以不用指定字段名称,但是values后面的顺序应该和字段的排列顺序一致
插入多条记录:INSERT INTO tablename(filed1,filed2,...,filedn)
VALUES
(values1,values2,...,valuesn),
(values1,values2,...,valuesn),
(values1,values2,...,valuesn);
2.更新记录:UPDATE tablename SET filed1=value1,filed2=value2,...,filedn=valuen [WHERE CONDITION]
eg:将表emp中ename为‘lisa‘的薪水(sal)更改为4000:
(多表更新一般用在根据一个表的字段来动态地更新另一个表的字段)
3.删除记录:DELETE FROM tablename [WHERE CONDITION]
eg:在emp中将ename为‘dony‘的记录全部删除
在mysql中可以一次删除多个表的数据:DELETE t1,t2,...,tn FROM t1,t2,...,tn [WHERE CONDITION] (不管单表还是多表,不加where条件将会把表的所有记录删除)
4.查询记录:SELECT * FROM tablename [WHERE CONDITION]
查询不重复记录关键字distinct
排序和限制,关键字:ORDER BY 语法:SELECT * FROM tablename [WHERE CONDITION] [ORDER BY filed1 [DESC/ASC],filed2 [DESC/ASC],...,filedn [DESC/ASC]]
不写排序顺序关键字默认是 升序排列 ASC。
◆ 排序后的记录,LIMIT限制显示部分:SELECT ...[LIMIT offset_start,row_count] 其中,offset_start表示记录的起始偏移量,row_count表示显示的行数(limit和order by配合使用做记录的分屏显示)
聚合
SELECT [filed1,filed2,...,filedn] fun_name
FROM tablename
[WHERE where_contition]
[GROUP BY filed1,filed2,...,filedn [WITH ROLLUP]]
[HAVING where_contition]
参数说明:fun_name:表示要做的聚合操作(聚合函数),sum(求和)、count(*)(记录数)、max、min.....
GROUP BY:表示要进行分类聚合的字段,比如要按照部门分类统计员工数量,部门就应该写在group by 后面。
WITH ROLLUP:可选语句,表示是否对分类聚合后的结果进行再汇总。
HAVING关键字表示对分类后的结果在进行条件的过虐。
表连接:左连接,右连接。(复杂,详情后续)
子查询:关键字 in、not in、=、!=、exists、not exists 等 (放后)
记录联合:将两个表的数据按照一定的查询条件查询出来以后,将结果合并到一起显示出来。关键字, union、union all
SELECT * FROM t1
UNION/UNION ALL
SELECT * FROM t2
...
UNION/UNION ALL
SELECT * FROM tn;
UNION ALL 是把结果集直接合并在一起,UNION 是将UNION ALL 后的结果进行一次DISTINCT,去除重复记录后的结果。
三、DCL(data control language)语句:数据控制语句。
用于控制不同数据段直接的许可和访问级别的语句,这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要语句关键字:grant、revoke等。
主要是DBA用来管理系统中的对象权限时使用,一般开发人员很少使用。
以上是关于Mysql之索引的基本概念语法的主要内容,如果未能解决你的问题,请参考以下文章