sql update 自增_SQL优化面试专题及答案

本文围绕MySQL展开,解答了诸多常见问题,如LIKE和REGEXP操作区别、查询是否区分大小写、获取受影响行数的方法等。还涉及表类型对自增主键的影响、字段类型特点、隔离级别、触发器数量等内容,也提及了Btree和B+tree。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:LIKE和REGEXP操作有什么区别?

SELECT * FROM app_user WHERE user REGEXP "^lz";
SELECT * FROM app_user WHERE user LIKE "lz%";

3dfb49d94a823cd0d268d6d74658db41.png
SELECT * FROM app_user WHERE user REGEXP "^lz";

只要有lz就行,只有以^开头的一种语法

SELECT * FROM app_user WHERE user LIKE "lz%";

匹配以lz开头的字符串

2:Mysql查询是否区分大小写?

不区分

SELECT VERSION(), CURRENT_DATE;
SeLect version(), current_date;
seleCt vErSiOn(), current_DATE;

13f3f75d1853d1d172c48649316476bc.png

3:我们如何得到受查询影响的行数?

行数可以通过以下代码获得(查询数据有多少条数):

SELECT COUNT(user_id)FROM users;

4:列比较运算符有哪些?

在SELECT语句的列比较中使用=,<>,<=,<,> =,>,BETWEEN,AND,OR或LIKE运算符。

5:LIKE声明中的%和_是什么意思?

%对应于0个或更多字符,_只是LIKE语句中的一个字符。

6:查询某张表的索引?

show index from app_user;

c0fae2a58c4c1d33122fc3d903b4f53b.png

7:最后一次插入时分配了哪个自动增量?

SELECT LAST_INSERT_ID()

8:数据库有一个字段是timestamp会怎样?

已验证:每当行被更改时,时间戳字段将获取当前时间戳。

4d031d89f942f1664f4818cb9461d685.png
`create_time` timestamp not null default current_timestamp comment '创建时间',
`update_time` timestamp not null default current_timestamp on update current_timestamp comment '修改时间',

9:如何控制HEAP表的最大尺寸?

Heal表的大小可通过称为max_heap_table_size的Mysql配置变量来控制。

10:Heap表是什么?

HEAP表存在于内存中,用于临时高速存储。

BLOB或TEXT字段是不允许的

只能使用比较运算符=,<,>,=>,= <

HEAP表不支持AUTO_INCREMENT

索引不可为NULL

CREATE TABLE test (
	id INT UNSIGNED NOT NULL auto_increment PRIMARY KEY,
	state CHAR (10),
	type CHAR (20),
	date CHAR (30)
) ENGINE = MEMORY DEFAULT CHARSET = utf8;

11:一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15 ?

(1)如果表的类型是MyISAM,那么是18

因为MyISAM表会把自增主键的最大ID记录到数据文件里,重启MySQL自增主键的最大ID也不会丢失

(2)如果表的类型是InnoDB,那么是15

InnoDB表只是把自增主键的最大ID记录到内存中,所以重启数据库或者是对表进行OPTIMIZE操作,都会导致最大ID丢失

总结:主要看最大id存储在数据文件中,还是在内存中。

12:在Mysql中ENUM的用法是什么?

 CREATE TABLE test4 (  
     id BIGINT UNSIGNED  PRIMARY KEY AUTO_INCREMENT,  
     brand VARCHAR(255) NOT NULL,  
     color ENUM('RED','GREEN','BLUE')
  ) ENGINE = InnoDB; 

13:CHAR和VARCHAR的区别?

以下是CHAR和VARCHAR的区别:
CHAR和VARCHAR类型在存储和检索方面有所不同
CHAR列长度固定为创建表时声明的长度,长度值范围是1到255
当CHAR值被存储时,它们被用空格填充到特定长度,检索CHAR值时需删除尾随空格。

14:列的字符串类型可以是什么?

字符串类型是:

SET
BLOB
ENUM
CHAR
TEXT
VARCHAR

15:SQL标准定义的四个隔离级别为:

read uncommited :读到未提交数据
read committed:脏读,不可重复读
repeatable read:可重读
serializable :串行事物

16:Mysql表中允许有多少个TRIGGERS?

在Mysql表中允许有六个触发器,如下:

BEFORE INSERT
AFTER INSERT
BEFORE UPDATE
AFTER UPDATE
BEFORE DELETE
AFTER DELETE

17:mysql支持事物嘛?

和引擎有关 innodb支持

18:Btree B+tree(滴滴面试画图)

对B+Tree主键的范围查找和分页查找
下面做一个推算:
InnoDB存储引擎中页的大小为16KB,一般表的主键类型为INT(占用4个字节)或BIGINT(占用8个字节),指针类型也一般为4或8个字节,也就是说一个页(B+Tree中的一个节点)中
大概存储16KB/(8B+8B)=1K个键值(因为是估值,为方便计算,这里的K取值为〖10〗^3)。也就是说一个深度为3的B+Tree索引可以维护10^3 * 10^3 * 10^3 = 10亿 条记录。

以下两张图参考网络,理解能画出来就行了

B+树

e5b7c423f4a05e1b900ef3879007e54e.png

BTree

100e878fbcddfd748965f972e302aed6.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值