mysql面试问题汇总

1、varchar跟char的区别
在单字节字符集下,char(N)在内存存储的时候总是定长,而且没有变长字段长度列表中。
在多字节字符集下,char(N)如果存储的字节数超过N,那么char(N)将和varchar(N)没有区别。在多字节字符集下,如果存储的字节数少于N,那么存储N个字节,后面补空格,补到N字节长度。都存储变长的数据和变长字段长度列表。 varchar(N)无论是什么字节字符集,都是变长的,即都存储变长数据和变长字段长度列表。
相同点:
char(n),varchar(n)中的n都代表字符的个数
超过char,varchar最大长度n的限制后,字符串会被截断。
不同点:
char不论实际存储的字符数都会占用n个字符的空间,而varchar只会占用实际字符应该占用的字节空间加1(实际长度length,0<=length<255)或加2(length>255)。因为varchar保存数据时除了要保存字符串之外还会加一个字节来记录长度(如果列声明长度大于255则使用两个字节来保存长度)。
能存储的最大空间限制不一样:char的存储上限为255字节。
char在存储时会截断尾部的空格,而varchar不会。
2、varchar(50)跟int(50)中50的含义
varchar(50)最多存放50个字符,varchar(50)和(200)存储hello所占空间一样,但后者在排序时会消耗更多内存,因为order by col采用fixed_length计算col长度(memory引擎也一样)。在早期 MySQL 版本中, 50 代表字节数,现在代表字符数。
int(50)表示最多存放字符的宽度
3、说一下主从原理
从库start slave; 从主库拉去binlog,主库的dump线程负责把binlog发送给从库,从库的io线程负责接收主库过来的binlog,并且写入relay log,slave上面的sql线程负责读取relay log并且执行。
如果从库是多线程复制,sql线程只做调度,只负责把relay log中的binlog读出来,然后交给work线程,work线程负责具体的binlog event的执行
4、如何从mysqldump备份中恢复一张表

全库备份
[root@HE1 ~]# mysqldump -uroot -p --single-transaction -A --master-data=2 >dump.sql
只还原erp库的内容
[root@HE1 ~]# mysql -uroot -pMANAGER erp --one-database <dump.sql

可以看出这里主要用到的参数是 --one-database 简写-o的参数,极大方便了我们的恢复灵活性
那么如何从全库备份中抽取某张表呢,全库恢复,再恢复某张表小库还可以,大库就很麻烦了,那我们可以利用正则表达式来进行快速抽取,具体实现方法如下:
 
从全库备份中抽取出t表的表结构
[root@HE1 ~]# sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `t`/!d;q' dump.sql
 
DROP TABLE IF EXISTS`t`;
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值