mysql题库详解

1、如何创建和删除数据库?

创建数据库 CREATE DATABASE 数据库名;   
删除数据库 drop database 数据库名;

2、MyISAM与InnoDB的区别?

1)事务:MyISAM 不支持事务 InnoDB 支持
2)行锁/表锁:MyISAM 支持表级锁 InnoDB 支持行锁和表锁
3)MVCC(多版本并发控制):InnoDB 支持 MyISAM 不支持
4)外键:MyISAM 不支持 InnoDB支持
5)全文索引:MyISAM 支持,InnoDB后期版本支持(5.7 版本及以后支持)
6)行数:InnoDB 不保存表的总行数,执行 select count(*) from table 时 需要全表扫描;MyISAM支持,用一个变量保存表的总行数,查总行数速度很快 
7)索引:InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引效率很高。辅助索引需要两次查询,先查询 到主键,再通过主键查询到数据。MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针,主键索引和辅助索引是独立的

3、char与varchar的区别

char 是一种固定长度的字符串类型
varchar 是一种可变长度的字符串类型

4、建表语句中varchar(50)中50的指是什么?

字段最多存放 50 个字符 如 varchar(50) 和 varchar(200) 存储 “ConstXiong” 字符串所占空间是一样的,后者在排序时会消耗更多内存

5、int(10)中10指什么?

INT[(M)] [UNSIGNED] [ZEROFILL] M 默认为11
10 就是上述语句里的 M,指最大显示宽度,最大值为 255 最大显示宽度意思是,如果是 int(10),字段存的值是 10,则,显示会自动
在之前补 8 个 0,显示为 0000000010 int 类型在数据库里面存储占 4 个字节的长度
有符号的整型范围是 -2147483648 ~ 2147483647 无符号的整型范围是 0 ~ 4294967295

6、DELETE和TRUNCATE的区别是什么?

DELETE 命令从一个表中删除某一行或多行数据
TRUNCATE 命令永久地从表中删除每一行数据

7、MySQL如何获取当前日期?

SELECT CURRENT_DATE();

8、如何获取MySQL的版本?

SELECT VERSION();

9、什么是触发器,MySQL都有哪些触发器?

触发器是指一段代码,当触发某个事件时,自动执行这些代码

MySQL 数据库中有六种触发器:
Before Insert
After Insert
Before Update
After Update
Before Delete
After Delete

2)使用场景:

可以通过数据库中的相关表实现级联更改
实时监控表中字段的更改做出相应处理
注意:滥用会造成数据库及应用程序的维护困难

3)mysql触发器介绍和使用

触发器是mysql数据库针对某张表发生增删改操时自动执行的一段语句集合,它是跟某张表关联绑定的,不像存储过程那种需要被动调用。触发器可以用来检验数据完整性,日志跟踪记录等。注意:不能在mysql本身系统数据库的表上创建触发器,要在其他数据库的表上
创建。

4)创建触发器的结构:

create trigger trigger_name
before/after insert/update/delete
on table_name
for each row #行级触发器
begin
具体语句…
end

5)触发器针对的是数据库中表的每一行记录

每行数据在操作前后都会有一个对应的状态,触发器将没有操作之前的状态保存到 old 关键字中,将操作后的状态保存到 new 中
语法:old/new.字段名
需要注意的是,old 和 new 不是所有触发器都有
触发器类型 new和old的使用
INSERT型触发器 没有 old,只有 new,new 表示将要(插入前)或者已经增加(插入后)的数据
UPDATE型触发器 既有 old 也有 new,old 表示更新之前的数据,new 表示更新之后的数据
DELETE型触发器 没有 new,只有 old,old 表示将要(删除前)或者已经被删除(删除后)的数据

举例说明,在mysql里testdb数据库下的两个表,person以及person_log(是记录每次在person表里修改操作的日志)

mysql> use testdb;
mysql> show create table person\G;
*************************** 1. row ***************************
Table: person
Create Table: CREATE TABLE `person` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` text CHARACTER SET utf8,`addr` text CHARACTER SET utf8,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
ERROR: 
No query specified
mysql> show create table person_log\G;
*************************** 1. row ***************************
Table: person_log
Create Table: CREATE TABLE `person_log` (`id` int(11) NOT NULL AUTO_INCREMENT,`operation` varchar(20) NOT NULL,`optime` datetime NOT NULL,`opinfo` varchar(100) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
1 row in set (0.01 sec)
先创建一个在delete操作后,发生的触发器person_delaft_trigger。这个触发器的作用,就是当在person表里删除记录后,在日志表person_log里插入一条记录,把删除的信息输入。
mysql> delimiter $
mysql> create trigger person_delaft_trigger after delete on person for each row insert into person_log(operation,optime,opinfo) values(‘delete’,now(),concat('delrow: ‘,old.name,’ ',old.addr))$ #这里是delete操作,只有old关键字,记录的是删除的记录数据
刚开始的表数据:

当我们进行一个删除操作后:


10、MySQL显示表前 50 行

SELECT * FROM tablename LIMIT 0,50;

11、如何连接MySQL服务端、关闭连接?

连接:使用指令 mysql -u -p -h -P (-u:指定用户名 -p:指定密码 -h:主机 -P:端口) 连接 MySQL 服务端
关闭:使用指令 exit 或 quit

12、int(10)、char(16)、varchar(16)、datetime、text的意义?

int(10) 表示字段是 INT 类型,显示长度是 10
char(16)表示字段是固定长度字符串,长度为 16
varchar(16) 表示字段是可变长度字符串,长度为 16
datetime 表示字段是时间类型
text 表示字段是字符串类型,能存储大字符串,最多存储 65535 字节数据

13、说说你知道的MySQL存储引擎

InnoDB

默认事务型引擎,被广泛使用的存储引擎
数据存储在共享表空间,即多个表和索引都存储在一个表空间中,可通过配置文件修改
主键查询的性能高于其他类型的存储引擎
内部做了很多优化,如:从磁盘读取数据时会自动构建hash索引,插入数据时自动构建插入缓冲区
通过一些机制和工具支持真正的热备份
支持崩溃后的安全恢复
支持行级锁
支持外键

MyISAM

拥有全文索引、压缩、空间函数

不支持事务和行级锁、不支持崩溃后的安全恢复

表存储在两个文件:MYD 和 MYI

设计简单,某些场景下性能很好,例如获取整个表有多少条数据,性能很高
其他表引擎:Archive、Blackhole、CSV、Memory

25 索引的种类有哪些?


普通索引:最基本的索引,没有任何约束限制。
唯一索引:和普通索引类似,但是具有唯一性约束,可以有 null
主键索引:特殊的唯一索引,不允许有 null,一张表最多一个主键索引


组合索引:多列值组成一个索引,用于组合搜索,效率大于索引合并
全文索引:对文本的内容进行分词、搜索
覆盖索引:查询列要被所建的索引覆盖,不必读取数据行

26 MyISAM索引与InnoDB索引的区别?


InnoDB 索引是聚簇索引,MyISAM 索引是非聚簇索引
InnoDB 的主键索引的叶子节点存储着行数据,主键索引非常高效
MyISAM 索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据
InnoDB 非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会非常高效

27 MySQL有哪些常用函数?

字符串函数

LENGTH:返回字符串的字节长度
CONCAT:合并字符串,返回结果为连接参数产生的字符串,参数可以使一个或多个
INSERT:替换字符串
LOWER:将字符串中的字母转换为小写
UPPER:将字符串中的字母转换为大写
LEFT:从左侧字截取符串,返回字符串左边的若干个字符
RIGHT:从右侧字截取符串,返回字符串右边的若干个字符
TRIM:删除字符串左右两侧的空格
REPLACE:字符串替换,返回替换后的新字符串
SUBSTRING:截取字符串,返回从指定位置开始的指定长度的字符换
REVERSE:字符串反转,返回与原始字符串顺序相反的字符串

日期和时间函数

CURDATE、CURRENT_DATE:返回当前系统的日期值
CURTIME、CURRENT_TIME:返回当前系统的时间值
NOW、SYSDATE:返回当前系统的日期和时间值
UNIX_TIMESTAMP:获取 UNIX 时间戳函数,返回一个以 UNIX 时间戳为基础的无符号整数
FROM_UNIXTIME:将 UNIX 时间戳转换为时间格式
MONTH:获取指定日期中的月份
MONTHNAME:获取指定日期中的月份英文名称
DAYNAME:获取指定曰期对应的星期几的英文名称
DAYOFWEEK:获取指定日期对应的一周的索引位置值
WEEK:获取指定日期是一年中的第几周
DAYOFYEAR:获取指定曰期是一年中的第几天,返回值 1~366
DAYOFMONTH:获取指定日期是一个月中是第几天,返回值 1~31
YEAR:获取年份
TIME_TO_SEC:将时间参数转换为秒数
SEC_TO_TIME:将秒数转换为时间
DATE_ADD、ADDDATE:向日期添加指定的时间间隔
DATE_SUB、SUBDATE:向日期减去指定的时间间隔
ADDTIME:时间加法运算,在原始时间上添加指定的时间
SUBTIME:时间减法运算,在原始时间上减去指定的时间
DATEDIFF:获取两个日期之间间隔,返回参数 1 减去参数 2 的值
DATE_FORMAT:格式化指定的日期,根据参数返回指定格式的值
WEEKDAY:获取指定日期在一周内的对应的工作日索引

聚合函数

MAX:查询指定列的最大值
MIN:查询指定列的最小值
COUNT:统计查询结果的行数
SUM:求和,返回指定列的总和
AVG:求平均值,返回指定列数据的平均值

流程控制函数

IF:判断是否为 true
IFNULL:判断是否为空
CASE:分支判断

28 与Oracle相比,Mysql有什么优势?

Mysql 是开源软件、无需付费
操作简单、部署方便,用户可以根据应用的需求去定制数据库
Mysql 的引擎是插件式

29 LIKE 后的%和_代表什么?

% 代表 0 或更多字符
_ 代表 1 个字符

8以下三条sql 如何只建一条索引?
WHERE a=1 AND b=1
WHERE b=1
WHERE b=1 ORDER BY time DESC

参考答案
以顺序 b,a,time 建立联合索引,CREATE INDEX idx_b_a_time ON table(b,a,time)。
新 MySQL 版本会优化 WHERE 子句后面的列顺序,以匹配联合索引顺序

30 以下语句是否会使用索引?

SELECT FROM user WHERE YEAR(cdate) < 2007;
不会,因为列涉及到运算,不会使用索引

31 列值为NULL时,查询是否会用到索引?

MySQL 中存在 NULL 值的列也是走索引的
计划对列进行索引,应尽量避免把它设置为可空,因为这会让 MySQL 难以优化引用了可空列的查询,同时增加了引擎的复杂度

32 创建MySQL联合索引应该注意什么?

联合索引要遵从最左前缀原则,否则不会用到索引
Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。
如索引是 index (a,b,c),可以支持 a 或 a,b 或 a,b,c 3种组合进行查找,但不支持 b,c 进行查找

33 MySQL创建和使用索引的注意事项?

适合创建索引的列是出现在 WHERE 或 ON 子句中的列,而不是出现在 SELECT 关键字后的列
索引列的基数越大,数据区分度越高,索引的效果越好
对字符串列进行索引,可制定一个前缀长度,节省索引空间
避免创建过多的索引,索引会额外占用磁盘空间,降低写操作效率
主键尽可能选择较短的数据类型,可减少索引的磁盘占用,提高查询效率
联合索引遵循前缀原则
LIKE 查询,%在前不到索引,可考虑使用 ElasticSearch、Lucene 等搜索引擎
MySQL 在数据量较小的情况可能会不使用索引,因为全表扫描比使用索引速度更快
关键词 or 前面的条件中的列有索引,后面的没有,所有列的索引都不会被用到
列类型是字符串,查询时一定要给值加引号,否则索引失效
联合索引要遵从最左前缀原则,否则不会用到索引

34 索引对性能有哪些影响?

优点:

减少数据库服务器需要扫描的数据量
帮助数据库服务器避免排序和临时表
将随机 I/O 变顺序I/O
提高查询速度
唯一索引,能保证数据的唯一性

缺点:


索引的创建和维护耗时随着数据量的增加而增加
对表中数据进行增删改时,索引也要动态维护,降低了数据的维护速度
增大磁盘占用

35 索引如何创建与删除?

创建单个字段索引的语法:CREATE INDEX 索引名 on 表名(字段名)
创建联合索引的语法:CREATE INDEX 索引名 on 表名(字段名1,字段名2)
索引命名格式一般可以这样:idx_表名_字段名。注意有长度限制
删除索引:DROP INDEX 索引名 ON 表名
如:
给 id 创建索引:CREATE INDEX idx_t1_id on t1(id);
给 username 和 password 创建联合索引:CREATE index idx_t1_username_password ON t1(username,password)

index 替换成 unique 或 primary key,分别代表唯一索引和主键索引

36 使用过MySQL的存储过程吗?介绍一下

存储过程(Stored Procedure)是数据库中一种存储复杂程序,供外部程序调用的一种数据库对象
是一段 SQL 语句集,被编译保存在数据库中
可命名并传入参数来调用执行
可在存储过程中加入业务逻辑和流程
可在存储过程中创建表,更新数据,删除数据等
可通过把 SQL 语句封装在容易使用的单元中,简化复杂的操作

什么是存储过程
简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;
ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;

有哪些特性
有输入输出参数,可以声明变量,有if/else, case,while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能;
函数的普遍特性:模块化,封装,代码复用;
速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;

创建一个简单的存储过程
存储过程proc_adder功能很简单,两个整型输入参数a和b,一个整型输出参数sum,功能就是计算输入参数a和b的结果,赋值给输出参数sum;
几点说明:

DELIMITER ;;:之前说过了,把默认的输入的结束符;替换成;;。
DEFINER:创建者;
DROP PROCEDURE IF EXISTS `proc_adder`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_adder`(IN a int, IN b int, OUT sum int)
BEGIN#Routine body goes here...DECLARE c int;if a is null then set a = 0; end if;if b is null then set b = 0;end if;set sum  = a + b;END
;;
DELIMITER ;执行以上存储结果,验证是否正确,如下图,结果OK:
set @b=5;
call proc_adder(2,@b,@s);
select @s as sum;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/528985.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

#QT(QString)

1.IDE&#xff1a;QTCreator 2.实验 3.记录 4.代码

QT开发(二) 构建QMainWindow

1、前言 QMainWindow是Qt框架中用于创建应用程序主窗口的类。它是许多GUI应用程序的基础&#xff0c;提供了丰富的功能和灵活性&#xff0c;以支持用户界面的创建和管理。 QMainWindow的结构主要包括以下几个部分&#xff1a; 菜单栏&#xff08;Menu Bar&#xff09;&#…

【超级干货】播放器核心知识点-音视频同步原理深入剖析

引言 本文是自己学习利用ffmpeg实现音视频同步播放的总结文档,参考了网上一些博客,同时调试ffplay源码进行理解,站在巨人的肩膀上学习,感谢开源和分享精神。文中粘贴的代码每行都有注释,确保读者能理解所涉函数的每一行代码的意义。 章节 因为ffplay源码阅读起来比较复…

微服务技术栈之rabbitMQ基础入门(一)

准备工作&#xff1a; 1&#xff0c;创建空的工程&#xff1a; 首先我们先创建一个空的工程&#xff0c;并且命名为 mq-java 2&#xff0c;创建一个生产者springboot工程&#xff08;plblisher&#xff09;&#xff1a; 设置项目的基本信息&#xff1a; 勾选版本和依赖&…

京东商品详情接口数据采集—价格,库存,支持高并发

初识API调用 为帮助商家及开发者快速掌握京东API调用方法&#xff0c;本文为大家提供的万邦API工具为例&#xff0c;为读者演示一例API调用过程&#xff0c;并做相应讲解。 item_get-获得JD商品详情 1、API公共参数示例 请求地址: https://api-gw.onebound.cn/jd/item_get …

Spring循环依赖的成因与破局

一、Spring注入类型 Spring 核心功能之一依赖注入&#xff0c;依赖注入是使用 Spring 框架的基本手段&#xff0c;通过他获取各种类型的 bean&#xff0c;但使用不同的依赖注入类型时经常会遇到循环依赖的问题。Spring 依赖注入类型&#xff1a; 字段注入&#xff0c;这是最常…

Word中解决插入脚注导致的分页位置错误问题

先放一个截图&#xff1a; 上面的截图中&#xff0c;样式为标题3的段落“四、固执的念头”前插入了连续型分节符&#xff0c;并且该分节符的样式为正文&#xff0c;前后的正文段落中有脚注&#xff0c;结果在分页时&#xff0c;标题3段落“四、固执的念头”后的正文段落自动进入…

什么台灯对眼睛好?揭秘四款央视推荐的护眼台灯

近年来&#xff0c;随着电子产品的普及&#xff0c;虽说给生活带来了许多便利&#xff0c;不过对于眼睛还没发育完全的孩子而言&#xff0c;经常使用电子产品是非常容易伤眼的&#xff0c;更何况这些孩子每天还需要长时间的用眼学习&#xff0c;眼睛的负担是非常大的。所以在学…

谷粒商城【成神路】-【10】——缓存

目录 &#x1f9c2;1.引入缓存的优势 &#x1f953;2.哪些数据适合放入缓存 &#x1f32d;3.使用redis作为缓存组件 &#x1f37f;4.redis存在的问题 &#x1f9c8;5.添加本地锁 &#x1f95e;6.添加分布式锁 &#x1f95a;7.整合redisson作为分布式锁 &#x1f697…

java学习之路-数据类型与变量

目录 数据类型与变量 1. 字面常量 2. 数据类型 3. 变量 3.1 变量概念 3.2 整型变量 3.2.1 整型变量 3.2.2 长整型变量 3.2.3 短整型变量 3.2.4 字节型变量 3.3 浮点型变量 3.3.1 双精度浮点型 3.3.2 单精度浮点型 3.4 字符型变量 3.5布尔型变量 3.6 类型转换 …

MySQL--索引优化实战篇(2)

前言&#xff1a; 我们常说的SQL优化&#xff0c;简单来说就是索引优化&#xff0c;通过合理创建索引&#xff0c;调整SQL语法等&#xff0c;来提升查询效率&#xff0c;想要进行SQL优化&#xff0c;就必须知道索引的原理&#xff0c;而且能够看懂SQL的执行计划。 MySQL–索引…

数据保护设备的主要功能是什么

数据保护设备在当今数字化时代扮演着至关重要的角色。随着信息技术的迅猛发展&#xff0c;数据的产生、传输和存储量呈现出爆炸式增长&#xff0c;数据的安全性和完整性成为了企业和个人关注的重点。数据保护设备作为保障数据安全的重要手段&#xff0c;正逐渐受到广泛关注和应…