MySQL-函数-索引

1.MySQL中的默认值处理
(1)在MySQL中如何定义默认值?
修改表添加列的默认值
create table emp3(id int primary key auto_increment ,name varchar(20),address varchar(50) default “UNKOWN”);

插入数据时的默认值处理
alter table emp3 add column deptno int default 0;
alter table emp3 modify name varchar(20) default “zhangsan”;

2.MySQL中的更新操作
(1)在MySQL中更新表中数据的语句是什么?
UPDATE 表名 SET 列名=值,列名=值 WHERE 条件

(2)MySQL中的数据更新有什么特点?
• 更新的表不能在 set 和 where 中用于子查询;
•update 后面可以做任意的查询

3.MySQL中的删除数据
(1)在MySQL中删除表中数据有几种方式?他们之间有什么区别?
使用 DELETE 子句
DELETEFROM 表名 WHERE 条件

使用 TRUNCATE 清空表
TRUNCATETABLE 表名
区别:
•truncate 是整体删除(速度较快), delete 是逐条删除(速度较慢);
•truncate 不写服务器 log,delete 写服务器 log,也就是 truncate 效率比 delete 高的原因;
• truncate 是会重置自增值,相当于自增列会被置为初始值,又重新从 1 开始记录,而 不是接着原来的值。而 delete 删除以后,自增值仍然会继续累加
(2)删除emp3表中emp_id为1的雇员信息。
delete from emp3 where id=1;

4.MySQL的事务处理
(1)在MySQL中事务默认的处理机制是什么机制?
在 MySQL 中,默认情况下,事务是自动提交的,也就是说,只要执行一条 DML 语句 就开启了事物,并且提交了事务
(2)如何关闭MySQL中的事务自动提交?
START TRANSACTION之后就需要手动提交。
5.MySQL的基本查询1
(1)MySQL中查询数据的语法格式是什么?
SELECT*| 投影列 FROM 表名

(2)在查询语句中支持哪些算术表达式?

  • :加法运算
  • :减法运算
  • :乘法运算
    / :除法运算,返回商
    % :求余运算,返回余数
    (3)在MySQL中查看数据库编码的语句是什么?
    Select schema_name,default_character_set_name from information_schema.schemata where schema_name =‘test’;

(4)删除数据库的语句是什么?
Drop database 数据库名称

6.MySQL的基本查询2
(1)在MySQL中算术表达式中含有空值结果是什么?
包含空值的算术表达式计算结果为空。
(2)在MySQL中如何为结果列起别名?
SELECT 列名 AS 列别名 FROM 表名 WHERE 条件

(3)在MySQL中如何做结果集的连接处理?
MySQL中并不支持||作为连字符,需要使用concat函数。在参数数量上与oracle的concat 函数有区别。
(4)在MySQL中如何剔除重复数据?
在 SELECT 语句中用 DISTINCT 关键字除去相同的行。
7.MySQL的约束和排序数据
(1)在MySQL中支持哪些比较运算符?
• 等于=
• 大于>
• 大于等于>=
• 小于<
• 小于等于<=
• 不等于!=或<>
(2)在MySQL中如何实现模糊查询?
•like
•%表示任意多个任意字符
•_表示一个任意字符
(3)在模糊查询中占位符用什么符号表示?
•%表示任意多个任意字符
•_表示一个任意字符
(4)在MySQL中支持哪些逻辑运算符?
•and
•or
•not
(5)在MySQL中如何做范围查询?
•between…and
•in 表示在一个非连续的范围内
(6)在MySQL中如何判断空值?
• 判断空 isnull
• 判断非空 isnotnull
(7)在MySQL中如何对结果集做排序处理?
• 用 ORDERBY 子句排序
•ASC: 升序排序,默认
•DESC: 降序排序
8.MySQL中常见单行函数1
(1)在MySQL中处理字符大小的函数有哪些?
LOWER(str) 转换大小写混合的字符串为小写字符串
UPPER(str) 转换大小写混合的字符串为大写字符串
(2)在MySQL中常见的字符函数有哪些?
CONCAT(str1,str2,…) 将 str1、str2 等字符串连接起来
SUBSTR(str,pos,len) 从 str 的第 pos 位(范围:1~str.length)开始,截取长度为 len 的字符串
LENGTH(str) 获取 str 的长度
INSTR(str,substr) 获取substr在 str 中的位置
LPAD(str,len,padstr)
RPAD(str,len,padstr)
TRIM(str) 从 str 中删除开头和结尾的空格(不会处理字符串中间含有的空格) LTRIM(str) 从 str 中删除左侧开头的空格
RTRIM(str) 从 str 中删除右侧结尾的空格
REPLACE(str,from_str,to_str) 将 str 中的 from_str 替换为 to_str(会替换掉所有符合 from_str 的字符串)
(3)在MySQL中常见的数字函数有哪些?
ROUND(arg1,arg2):四舍五入指定小数的值。
ROUND(arg1):四舍五入保留整数。
TRUNC(arg1,arg2):截断指定小数的值,不做四舍五入处理。
MOD(arg1,arg2):取余
(4)在MySQL中常见的日期函数有哪些?
SYSDATE() 或者 NOW() 返回当前系统时间,格式为 YYYY-MM-DDhh-mm-ss
CURDATE() 返回系统当前日期,不返回时间
CURTIME() 返回当前系统中的时间,不返回日期
DAYOFMONTH(date) 计算日期 d 是本月的第几天
DAYOFWEEK(date) 日期 d 今天是星期几,1 星期日,2 星期一,以此类推 DAYOFYEAR(date) 返回指定年份的天数
DAYNAME(date) 返回 date 日期是星期几
LAST_DAY(date) 返回 date 日期当月的最后一天
9.MySQL中常见单行函数2
(1)在MySQL中常见的转换函数有哪些?
DATE_FORMAT(date,format) 将日期转换成字符串(类似 oracle 中的 to_char())
STR_TO_DATE(str,format) 将字符串转换成日期(类似 oracle 中的 to_date())
(2)在MySQL中常见的通用函数有哪些?
IFNULL(expr1,expr2) 判断 expr1 是否为 null,如果为 null,则用 expr2 来代替 null (类似 oracle 的 NVL()函数)
NULLIF(expr1,expr2) 判断 expr1 和 expr2 是否相等,如果相等则返回 null,如果不 相等则返回 expr1
IF(expr1,expr2,expr3) 判断 expr1 是否为真(是否不为 null),如果为真,则使用 expr2 替代 expr1;如果为假,则使用 expr3 替代 expr1(类似 oracle 的 NVL2()函数)
COALESCE(value,…) 判断 value 的值是否为 null,如果不为 null,则返回 value;如 果为 null,则判断下一个 value 是否为 null……直至出现不为 null 的 value 并返回或者返回最 后一个为 null 的 value
CASE WHEN THEN ELSE END 条件函数
10.MySQL的多表查询
(1)在MySQL中可以使用哪些方式对多表查询?
等值连接
非等值连接
自连接
11.MySQL的外连接查询
(1)在MySQL中支持几种外连接查询?
左外连接
右外连接
全外连接
(2)在MySQL中如何将两个结果集合并?
UNION可以将两个查询结果集合并,返回的行都是唯一的,如同对整个结果集合使用了 DISTINCT。
(3)结果集合并的语法结构是什么?
SELECT 投影列 FROM 表名 LEFT OUTER JOIN 表名 ON 连接条件 UNION SELECT 投影列 FROM 表名 RIGHTOUTERJOIN 表名 ON 连接条件

1.MySQL中的聚合函数
(1)MySQL5.7是否支持SQL99标准?
MySQL5.7 支持 SQL99 标准
2.MySQL中的数据分组
(1)MySQL中有哪些常用的聚合函数(组函数)?
AVG(arg)函数
SUM(arg)函数
MIN(arg)函数
MAX(arg)函数
COUNT 函数
(2)每个聚合函数的作用是什么?
AVG(arg)函数:求平均值
SUM(arg)函数:求总和
MIN(arg)函数:求最小值
MAX(arg)函数:求最大值
COUNT 函数:记录满足条件的条数
(3)在MySQL中通过什么子句来创建数据分组?
Group by子句
(4)如何约束数据分组?
使用关键字having来约束数据分组
(5)计算每个部门的平均薪水
select deptno,avg(salary) from employees group by deptno;

(6)显示那些最高薪水大于 5000 的部门的部门号和最高薪水。
select deptno,max(salary) from employees group by deptno having max(salary)>5000;

3.MySQL中的子查询
(1)MySQL的子查询可以放到SQL语句中的什么位置?
可以将子查询放在许多的 SQL 子句中,包括:
• WHERE 子句
• HAVING 子句
• FROM 子句
(2)使用子查询的原则是什么?
• 子查询放在圆括号中。
• 将子查询放在比较条件的右边。
• 在单行子查询中用单行运算符,在多行子查询中用多行运算符
(3)在MySQL中如何处理多行子查询?

4.MySQL中的正则表达式
(1)MySQL中正则表达式的特点是什么?
• MySQL 中允许使用正则表达式定义字符串的搜索条件,性能要高于 like。
• MySQL 中的正则表达式可以对整数类型或者字符类型检索。
• 使用 REGEXP 关键字表示正则匹配。
• 默认忽略大小写,如果要区分大小写,使用 BINARY关键字
(2)MySQL中使用正则表达式的语法结构是什么?
查询以 x 开头的数据(忽略大小写) SELECT 列名 FROM 表名 WHERE 列名 REGEXP’^x’;

(3)MySQL中支持哪些正则表达式的模板?其对应的含义是什么?

(4)查询雇员表中名字是以k开头的雇员名字与薪水。
select * from employees where last_name REGEXP ‘^k’;

(5)查询雇员表中名字是以n结尾的雇员名字与薪水。
select * from employees where last_name REGEXP ‘n$’;

5.MySQL中创建普通索引
(1)MySQL中的索引类型有哪些?
• 普通索引
• 唯一索引
• 主键索引
• 组合索引
• 全文索引
(2)在MySQL中创建普通索引的方式有些?
直接创建索引:CREATE INDEX index_name ON table(column(length))
create index emp3_index on emp3(address);

修改表添加索引:
ALTER TABLE table_name ADD INDEX index_name(column(length))
alter table emp3 add index emp3_address_index (address);

创建表时指定索引列:
CREATE TABLEtable(COLUMNTYPE,PRIMARY KEY(id), INDEX index_name(column(length)))
create table emp4(emp_id int primary key auto_increment,name varchar(30),address varchar(50),index emp4_name_index (name));

(3)如何查询一个表中的索引?
Show index from table;
show index from emp4;

(4)如何删除一个索引?
DROP INDEX index_name ON table;
drop index emp3_address_index on emp3;

6.MySQL中创建唯一索引
(1)什么是唯一索引?
唯一索引与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。
(2)在MySQL中如何创建唯一索引?
创建唯一索引:
CREATE UNIQUE INDEX indexName ON table(column(length))
create unique index emp_empno on emp(empno);

修改表添加唯一索引:
ALTER TABLE table_name ADD UNIQUE indexName(column(length))
alter table emp add unique emp_sal_index (sal);

创建表时指定唯一索引:
CREATE TABLEtable( COLUMNTYPE, PRIMARYKEY(id), UNIQUE index_name (column(length)) )
create table emp5(emp_id int primary key,name varchar(30),address varchar(30),unique emp5_name_index(name));

7.MySQL中创建主键索引
(1)什么是主键索引?
主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建 表的时候同时创建主键索引。
(2)在MySQL中如何创建主键索引?
修改表添加主键索引:ALTER TABLE 表名 ADD PRIMARY KEY(列名)
alter table emp2 add primary key(emp_id);

创建表时指定主键索引:CREATE TABLEtable( COLUMNTYPE, PRIMARY KEY(column) )
create table emp6(emp_id int primary key,name varchar(20),address varchar(50));

8.MySQL中创建组合索引
(1)什么是组合索引?
组合索引是指使用多个字段创建的索引,只有在查询条件中使用了创建索引时的第一个 字段,索引才会被使用(最左前缀原则)
(2)什么是最左前缀原则?
就是最左优先。
(3)MySQL中如何创建组合索引?
修改添加组合索引:
ALTER TABLE table_name ADD INDEX index_name(column(length),column(length))
alter table emp6 add index emp6_manyone_index (name,address);

创建表时创建组合索引:
CREATE TABLEtable( COLUMNTYPE, INDEX index_name(column(length),column(length)) )
create table emp7(emp_id int primary key auto_increment,name varchar(20),address varchar(40),index emp7_manytow_index(name,address));

9.MySQL中创建全文索引
(1)什么是全文索引?
全文索引(FULLTEXTINDEX)主要用来查找文本中的关键字,而不是直接与索引中的值 相比较。 FULLTEXT 索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的 where 语句的参数匹配。FULLTEXT 索引配合 match against 操作使用,而不是一般的 where 语句 加 like
(2)如何创建全文索引?
修改添加全文索引
ALTER TABLE table_name ADD FULLTEXT index_content(content)
alter table emp7 add fulltext emp7_fullindex(content);

创建表时创建全文索引
CREATE TABLEtable( COLUMNTYPE, FULLTEXT index_name (column) )
create table emp8(id int primary key auto_increment,content text,fulltext emp8_fullindex(content));

(3)如何删除全文索引?
DROP INDEX index_name ON table ALTER TABLE table_name DROP INDEX index_name
drop index emp8_fullindex on emp8;

10.MySQL中使用全文索引
(1)在MySQL中如何使用全文索引?
全 文 索 引 的 使 用 与 其 他 索 引 不 同 。 在 查 询 语 句 中 需 要 使 用 match(column) against(‘content’) 来检索数据。
(2)什么是全文解析器?
全文索引中基本单位是”词”。分词,全文索引是以词为基础的,MySQL 默认的分词是 所有非字母和数字的特殊符号都是分词符。在检索数据时我们给定的检索条件也是词。 MySQL 中默认的全文解析器不支持中文分词。如果数据含有中文需要更换全文解析器 NGRAM
(3)在创建全文索引时如何指定解析器?
在创建全文索引时可以指定 ngram 解析器 ALTER TABLE table_name ADD FULLTEXT index_content(content) WITH PARSER NGRAM
11.MySQL中的用户管理
(1)MySQL中有几种用户类型?
MySQL 是一个多用户的数据库系统,按权限,用户可以分为两种:root 用户,超级管理员,和由 root 用户创建的普通用户。
(2)在MySQL中如何创建用户?
CREATE USER username IDENTIFIEDBY ‘password’;
(3)在MySQL中如何查看用户信息?
SELECT USER,NOST FROM mysql.USER(该表位于 mysql 库中)
(4)在MySQL中如何为用户分配权限?
GRANT 权限 ON 数据库.表 TO 用户名@登录主机 IDENTIFIEDBY"密码"
(5)MySQL中有哪些权限?
ALTER: 修改表和索引。
CREATE: 创建数据库和表。
DELETE: 删除表中已有的记录。
DROP: 删除数据库和表。
INDEX: 创建或删除索引。
INSERT: 向表中插入新行。
SELECT: 检索表中的记录。
UPDATE: 修改现存表记录。
FILE: 读或写服务器上的文件。
PROCESS: 查看服务器中执行的线程信息或杀死线程。
RELOAD: 重载授权表或清空日志、主机缓存或表缓存。
SHUTDOWN: 关闭服务器。
ALL: 所有权限,ALLPRIVILEGES 同义词。
USAGE: 特殊的 “无权限” 权限
(6)在MySQL中如何刷新权限?
每当调整权限后,通常需要执行以下语句刷新权限 FLUSH PRIVILEGES
(7)在MySQL中如何删除用户?
DROP USER username@localhost
12.MySQL中使用Navicat管理用户
(1)使用Navicat创建u_bjsxt用户并分配权限。
(2)使用Navicat删除u_bjsxt用户。

13.MySQL中的分页查询
(1)MySQL中的分页原则是什么?
MySQL 分页查询原则
• 在 MySQL 数据库中使用 LIMIT 子句进行分页查询。
• MySQL 分页中开始位置为 0。
• 分页子句在查询语句的最后侧。
(2)MySQL中分页语法是什么?
SELECT 投影列 FROM 表名 WHERE 条件 ORDER BY LIMIT 开始位置,查询数量。
select * from employees order by employee_id limit 0,2;

14.MySQL执行查询过程介绍
(1)MySQL执行计划的作用是什么?
在 MySQL 中可以通过 explain 关键字模拟优化器执行 SQL 语句,从而知道 MySQL 是 如何处理 SQL 语句的。
(2)MySQL执行查询处理过程是什么?
• 客户端向 MySQL 服务器发送一条查询请求
• 服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果。否则进 入下一阶段
• 服务器进行 SQL 解析、预处理、再由优化器生成对应的执行计划
• MySQL 根据执行计划,调用存储引擎的 API 来执行查询
• 将结果返回给客户端,同时缓存查询结果

15.MySQL的执行计划
(1)执行计划中包含哪些列?
ID,select_type,table,type,possible_keys,key,key_len,ref,rows,Fitered,extra
(2)在执行计划中每个列的作用是什么?
ID
查询执行顺序: id 值相同时表示从上向下执行 id 值相同被视为一组 如果是子查询,id 值会递增,id 值越高,优先级越高
select_type
simple:表示查询中不包含子查询或者 union primary:当查询中包含任何复杂的子部分,最外层的查询被标记成 primary derived:在 from 的列表中包含的子查询被标记成 derived subquery:在 select 或 where 列表中包含了子查询,则子查询被标记成 subquery union:两个 select 查询时前一个标记为 PRIMARY,后一个标记为 UNION。union 出现 在 from 从句子查询中,外层 select 标记为 PIRMARY, union 中第一个查询为 DERIVED,
第二个子查询标记为 UNION unionresult:从 union 表获取结果的 select 被标记成 unionresult 。
table
显示这一行的数据是关于哪张表的。
type
这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为 system、const、 eq_reg、ref、range、index 和 ALL。 system:表中只有一行数据。属于 const 的特例。如果物理表中就一行数据为 ALL const :查询结果最多有一个匹配行。因为只有一行,所以可以被视为常量。const 查询速度 非常快,因为只读一次。一般情况下把主键或唯一索引作为唯一条件的查询都是 const eq_ref:查询时查询外键表全部数据。且只能查询主键列或关联列。且外键表中外键列中数 据不能有重复数据,且这些数据都必须在主键表中有对应数据(主键表中数据可以有没有用 到的) ref:相比 eq_ref,不对外键列有强制要求,里面的数据可以重复,只要出现重复的数据取值 就是 ref。也可能是索引查询。 range:把这个列当作条件只检索其中一个范围。常见 where 从句中出现 between、<、in 等。 主要应用在具有索引的列中 index:这个连接类型对前面的表中的每一个记录联合进行完全扫描(比 ALL 更好,因为索 引一般小于表数据)。 ALL:这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该 尽量避免。
possible_keys
查询条件字段涉及到的索引,可能没有使用。
Key
实际使用的索引。如果为 NULL,则没有使用索引。
key_len
表示索引中使用的字节数,查询中使用的索引的长度(最大可能长度),并非实际使用 长度,理论上长度越短越好。key_len 是根据表定义计算而得的,不是通过表内检索出的。
ref
显示索引的哪一列被使用了,如果可能的话,是一个常量 const。
rows
根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数。
Fitered
显示了通过条件过滤出的行数的百分比估计值。
extra
MYSQL 如何解析查询的额外信息。
Distinct:MySQL 发现第 1 个匹配行后,停止为当前的行组合搜索更多的行。 Notexists:MySQL 能够对查询进行 LEFTJOIN 优化,发现 1 个匹配 LEFTJOIN 标准的行 后,不再为前面的的行组合在该表内检查更多的行。 range checked for each record (index map: #):MySQL 没有发现好的可以使用的索引,但发 现如果来自前面的表的列值已知,可能部分索引可以使用。 Usingfilesort:MySQL 需要额外的一次传递,以找出如何按排序顺序检索行。 Using index:从只使用索引树中的信息而不需要进一步搜索读取实际的行来检索表中的 列信息。 Usingtemporary:为了解决查询,MySQL 需要创建一个临时表来容纳结果。 Usingwhere:WHERE 子句用于限制哪一个行匹配下一个表或发送到客户。 Using sort_union(…), Using union(…), Using intersect(…): 这 些 函 数 说 明 如 何 为 index_merge 联接类型合并索引扫描。 Using indexforgroup-by:类似于访问表的 Using index 方式,Usingindexforgroup-by 表示 MySQL发现了一个索引,可以用来查 询GROUPBY或DISTINCT查询的所有列,而不要 额外搜索硬盘访问实际的表

16.MySQL的存储引擎介绍
(1)如何查看MySQL的存储引擎?
SHOW ENGINES
(2)MySQL5.7中提供了哪些存储引擎?
MyISAM、InnoDB
(3)如何修改数据库级别的存储引擎?
修改 MySQL 的 my.ini 配置文件 C:\ProgramData\MySQL\MySQLServer5.7 default-storage-engine=数据库引擎名称 重启 MySQL
(4)如何修改标级别的存储引擎?
ALTERTBALE tableNameengine=InnoDB 查询表的存储引擎 showcreatetabletable_name;

你可能感兴趣的:(MySQL-函数-索引)