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;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣---最小栈

设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的元素。int get…

【Redis】RedisTemplate序列化传输数据

使用自定义的序列化器 使用RedisTemplate默认的序列化器发送数据&#xff0c;会将key全都当成Object处理&#xff0c;从而按照对象的方式转成json格式发送到服务器&#xff0c;这样会导致两个问题。一是不方便阅读&#xff0c;二是会大大浪费内存。因此&#xff0c;建议自定义…

js 添加、删除DOM元素

1. js添加、删除DOM元素 1.1. 添加DOM元素 1.1.1. appendChild()方法 该方法添加的元素位于父元素的末尾&#xff0c;使用方法&#xff1a; parentNode.appenChild(NewNode) // parentNode是需要添加元素的容器&#xff0c;NewNode是新添加的元素   创建一个li元素并添加到…

阿里云-零基础入门推荐系统 【多路召回】

文章目录 赛题介绍评价方式理解赛题理解多路召回 代码实战导包读取数据读取文章的基本属性读取文章的Embedding数据调用定义函数获取用户-文章-时间函数获取文章-用户-时间函数获取历史和最后一次点击获取文章属性特征获取用户历史点击的文章信息获取点击次数最多的topk个文章定…

【数据库】软件测试之MySQL数据库面试总结

有表如下&#xff1a; Student 学生表 SC 成绩表 Course 课程表 Teacher 老师表 每个学生可以学习多门课程&#xff0c;每一个课程都有得分&#xff0c;每一门课程都有老师来教&#xff0c;一个老师可以教多个学生 1、查询姓‘朱’的学生名单 select * from Student whe…

直播录屏软件电脑版盘点,哪个才是你的最佳选择?

随着网络直播的兴起&#xff0c;录屏功能逐渐成为了许多用户电脑上的必备工具。无论是为了记录游戏过程、制作教学视频&#xff0c;还是为了保存会议内容&#xff0c;一个易于操作且功能全面的录屏软件都是不可或缺的。那直播录屏软件电脑版都有哪些呢&#xff1f;本文将为大家…

安卓项目:app注册/登录界面设计

目录 第一步&#xff1a;设计视图xml 第二步&#xff1a;编写登录和注册逻辑代码 运行效果展示&#xff1a; 总结&#xff1a; 提前展示项目结构&#xff1a; 第一步&#xff1a;设计视图xml 在layout目录下面创建activity_login.xml和activity_main.xml文件 activity_lo…

GEE错误——Landsat 9 数据集(LANDSAT/LC09/C02/T1_L2)ST_10波段缺少影像问题如何处理

简介 Landat 9的数据集是由卫星传感器记录并传输的。ST_10波段是其中一个波段,但是如果这个波段的影像数据缺失,可能是由于各种原因导致的。 以下是一些可能导致ST_10波段影像数据缺失的原因: 1. 传感器故障:可能是传感器在记录或传输过程中发生了故障,导致无法正确记录…

重要通告 | 公司更名为“浙江实在智能科技有限公司”

更名公告 升级蜕变、砥砺前行 因业务快速发展和战略升级&#xff0c;经相关政府机构批准&#xff0c;自2024年3月1日起&#xff0c;原“杭州实在智能科技有限公司”正式更名为“浙江实在智能科技有限公司”。 更名后&#xff0c;公司统一社会信用代码不变&#xff0c;业务主体…

【vue3之Pinia:状态管理工具】

Pinia:状态管理工具 一、认识Pinia二、定义store三、gettters四、Action1.定义普通函数2.异步实现 五、storeToRefs工具函数六、pinia持久化插件1. 安装插件2. main.js 使用3. 开启4.其他配置 一、认识Pinia Pinia 是 Vue 的最新 状态管理工具 &#xff0c;是 Vuex 的 替代品 …

关于多权威属性加密论文阅读

来源于2007年Multi-authority Attribute Based Encryption 从单权威机构到多权威机构的意义是什么呢&#xff1f; 基础方案&#xff08;单权威方案SW&#xff09;支持数据持有者对数据进行加密使用指定的属性集合并且指定一个数值d。当一个用户需要使用该数据时&#xff0c;需…

盘点CSV文件在Excel中打开后乱码问题的两种处理方法

目录 一、CSV文件乱码问题概述 二、修改文件编码格式 1.识别CSV文件编码 2.修改编码格式 3.在Excel中打开修改后的CSV文件 案例 三、利用文本编辑器进行预处理 1.打开CSV文件并检查乱码 2.替换或删除乱码字符 3.保存并导入Excel 案例 四、注意事项 1、识别原始编码…

【机器学习】有监督学习算法之:逻辑回归

逻辑回归 1、引言2、逻辑回归2.1 定义2.2 基本原理2.3 公式2.3.1 核心公式2.3.2 Sigmoid函数 2.4 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;鱼哥&#xff0c;求助 小鱼&#xff1a;咋了。 小屌丝&#xff1a;我被逻辑回归难住了。 小鱼&#xff1a;然后你…

数据结构 - 堆

这篇博客将介绍堆的概念以及堆的实现。 1. 堆的定义&#xff1a; 首先堆的元素按照是完全二叉树的顺序存储的。 且堆中的某个节点总是不大于或不小于其父节点的值。 根节点最大的堆叫做大堆&#xff0c;根节点最小的堆叫小堆。逻辑结构如下图所示&#xff1a; 大堆和小堆的…

ZJUBCA研报分享 | 《BTC/USDT周内效应研究》

ZJUBCA研报分享 引言 2023 年 11 月 — 2024 年初&#xff0c;浙大链协顺利举办为期 6 周的浙大链协加密创投训练营 &#xff08;ZJUBCA Community Crypto VC Course&#xff09;。在本次训练营中&#xff0c;我们组织了投研比赛&#xff0c;鼓励学员分析感兴趣的 Web3 前沿话题…

opencv解析系列 - 基于DOM提取大面积植被(如森林)

Note&#xff1a;简单提取&#xff0c;不考虑后处理&#xff08;填充空洞、平滑边界等&#xff09; #include <iostream> #include "opencv2/imgproc.hpp" #include "opencv2/highgui.hpp" #include <opencv2/opencv.hpp> using namespace cv…

Ajax (1)

什么是Ajax&#xff1a; 浏览器与服务器进行数据通讯的技术&#xff0c;动态数据交互 axios库地址&#xff1a; <script src"https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> 如何使用呢&#xff1f; 我们现有个感性的认识 <scr…

【Prometheus】k8s集群部署node-exporter

​ 目录 一、概述 1.1 prometheus简介 1.2 prometheus架构图 1.3 Exporter介绍 1.4 监控指标 1.5 参数定义 1.6 默认启用的参数 1.7 prometheus如何收集k8s/服务的–三种方式收集 二、安装node-exporter组件 【Prometheus】概念和工作原理介绍-CSDN博客 【云原生】ku…

微信小程序使用 iconfont

base64 形式引入 首先我们点击 iconfont 项目中的 项目设置 按钮&#xff0c;位置如下图所示&#xff1a; 我们勾选图中所示三种字体格式&#xff0c;选择 base64 是为了将另外两种字体转为 base64 形式&#xff0c;而选择 woff 与 ttf 字体原因如下&#xff1a; TTF 兼容性更…

【自然语言处理】NLP入门(五):1、正则表达式与Python中的实现(5):字符串常用方法:对齐方式、大小写转换详解

文章目录 一、前言二、正则表达式与Python中的实现1.字符串构造2. 字符串截取3. 字符串格式化输出4.字符转义符5. 字符串常用函数函数与方法之比较 6. 字符串常用方法1. 对齐方式center()ljust()rjust() 2. 大小写转换lower()upper()capitalize()title()swapcase() 一、前言 本…