mysql面试题——其他问题

一:char和varchar的区别?

char:是一种定长的数据类型,它的长度固定且在存储时会自动在结尾添加空格来将字符串填满指定的长度。
varchar:是一种可变长度的数据类型,它只会存储实际的字符串内容,不会填充空格。因此,在存储短字符串时,varchar可以节省空间。

二:count(1)、count(*)与 count(列名)的区别?

count(1)和count(*)表示的是直接查询符合条件的数据库表的行数,而count(列名)表示的是查询符合条件的列的值不为NULL的行数。

三:limit 0,100和limit 10000000,100一样吗?

不一样,MysQL的limit m n工作原理就是先读取前面m+n条记录,然后抛弃前m条,然后返回后面n条数据,所以m越大,偏移量越大,性能就越差。
所以,limit 10000000,100要比limit 0,100的性能差的多,因为他要先读取10000100条数据,然后再抛弃前面的10000000条。

四:MySQL的主键一定是自增的吗?

不是的,主键是可以自己选择的,我们可以选择任意一种数据类型作为主键。但是一般都是单独创建一个自增字段作为主键,主要能带来以下几个好处:

  1. 索引大小更小:使用自增主键可以确保主键的递增性,使得新插入的数据都会在索引的末尾
    处,减少了数据页的分裂和页分裂导致的I0操作,使得索引大小更小,查询速度更快。
  2. 索引顺序和插入顺序相同:使用自增主键可以保证索引顺序和插入顺序相同,减少了插入新数据时索引的重新排序,提高了插入速度。
  3. 安全性:使用自增主键可以避免主键重复的情况,确保数据完整性和唯一性。

五:uuid和自增id做主键哪个好,为什么?

UUID和自增主键ID是作为数据库主键比较常用的方式。使用这两个做主键各自都有优缺点。
UUID :是一个 128 位长的唯一标识符,通常以字符串形式表示。
优点:
(1)全局唯一,使用不同的算法生成,几乎可以保证在全球范围内唯一
(2)不可预测性:随机生成的 UUID 很难被猜测出来,对于需要保密性的应用场景较为适用。
(3)分布式:由于可以在不同的机器上生成下UUID,因此可以用于分布式系统中。
缺点:
(1)存储空间比较大
(2)不适合范围查询:因为不是自增的,所以在做范围查询的时候是不支持的。
(3)不方便展示:UUID的话,因为比较长、并且没有任何业务含义,所以不方便展示。
(4)查询效率低:
自增id:可以通过设置 AUTO_JINCREMENT 属性实现ID的自增长,通常可以用来作为主键ID
优点:
(1)存储空间较小:ID是数字,所以在存储空间上也节省很多。
(2)查询效率高:ID 是递增的,因此在使用 B+Tree 索引时,查询效率较高。
(3)方便展示:因为ID比较短,方便展示。
缺点:
(1)分库分表:当我们做分库分表的时候,就没办法依赖一张表的自增主键来做主键ID了,这样就会发生重复导致冲突的问题
(2)可预测:因为ID是顺序自增的,所以是可以预测的,这就给系统带来了一定的安全风险

六:MySQL自增主键用完了会怎么样?

自定义的自增ID,用完以后下次插入会报主键冲突。
未定义自增ID主键,会用row_id,用完以后下一次插入会覆盖历史数据。

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值