MySQL必知必会面试题(二)

简介:

20、MySQL内中文数据乱码的原理及如何防止乱码?(可选)

1. 网站程序字符集
2. 客户端的字符集
3. 服务器端字符集
4. linux客户端字符集
5. 以上都要统一,否则会出现中文乱码如果编译的时候指定了特定的字符集,则以后创建对应字符集的数据库就不需要指定字符集
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
提示:二进制软件包,安装的数据库字符集默认latinl



21.在把id列设置为主键,在Name字段上创建普通索引


mysql> alter table test add primary key(id);
mysql> desc test;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(4)      | NO   | PRI | 0       |       |
| age   | tinyint(2)  | YES  |     | NULL    |       |
| name  | varchar(16) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

添加索引步骤

mysql> alter table test add index index_name(name);
create index index_name on test(name);



22.在字段name后插入手机号字段(shouji),类型char(11)


mysql> alter table test add shouji char(11) after name;
Query OK, 3 rows affected (0.05 sec)
Records: 3  Duplicates: 0  Warnings: 0 

mysql> desc test;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(4)      | NO   | PRI | 0       |       |
| age    | tinyint(2)  | YES  |     | NULL    |       |
| name   | varchar(16) | YES  | MUL | NULL    |       |
| shouji | char(11)    | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)



23、所有字段上插入2条记录(自行设定数据)


mysql> insert into test values(4,24,'cyh','604419314'),(5,38,'oldboy','123456');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0 
mysql> select * from test;
+----+------+-----------+-----------+
| id | age  | name      | shouji    |
+----+------+-----------+-----------+
|  1 | NULL | oldgirl   | NULL      |
|  2 | NULL | 老男孩    | NULL      |
|  3 | NULL | etiantian | NULL      |
|  4 |   24 | cyh       | 604419314 |
|  5 |   38 | oldboy    | 123456    |
+----+------+-----------+-----------+
5 rows in set (0.00 sec




24、在手机字段上对前8个字符创建普通索引


mysql> alter table test add index index_shouji(shouji(8));
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0 

mysql> select * from test;
+----+------+-----------+-----------+
| id | age  | name      | shouji    |
+----+------+-----------+-----------+
|  1 | NULL | oldgirl   | NULL      |
|  2 | NULL | 老男孩    | NULL      |
|  3 | NULL | etiantian | NULL      |
|  4 |   24 | cyh       | 604419314 |
|  5 |   38 | oldboy    | 123456    |
+----+------+-----------+-----------+
5 rows in set (0.00 sec)



25、查看创建的索引及索引类型等信息


mysql> show index from test\G
*************************** 1. row ***************************
        Table: test
   Non_unique: 0
     Key_name: PRIMARY
 Seq_in_index: 1
  Column_name: id
    Collation: A 
  Cardinality: 5
     Sub_part: NULL
       Packed: NULL 
         Null:
   Index_type: BTREE 
      Comment:
Index_comment:
*************************** 2. row ***************************
        Table: test
        Non_unique: 1
        Key_name: index_name
        Seq_in_index: 1
        Column_name: name
        Collation: A
        Cardinality: 5
        Sub_part: NULL
        Packed: NULL
        Null: YES
        Index_type: BTREE 
        Comment:
        Index_comment:
     *************************** 3. row ***************************
         Table: test
         Non_unique: 1
         Key_name: index_shouji
         Seq_in_index: 1
         Column_name: shouji
         Collation: A
         Cardinality: 5 
         Sub_part: 8
         Packed: NULL 
         Null: YES
         Index_type: BTREE
         Comment:Index_comment:3
         rows in set (0.00 sec)



26、删除Name,shouji列的索引


alter table test drop index index_name;
drop index index_shouji on test;
mysql> drop index index_shouji on test;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0 
mysql> show index from test\G
*************************** 1. row ***************************
        Table: test
        Non_unique: 0
        Key_name: PRIMARY
        Seq_in_index: 1
        Column_name: id 
        Collation: A 
        Cardinality: 5 
        Sub_part: NULL 
        Packed: NULL
        Null: 
        Index_type: BTREE
        Comment:
        Index_comment:
        1 row in set (0.00 sec



27、对Name列的前6个字符以及手机列的前8个字符组建联合索引


mysql> alter table test add index index_name_shouji(name(6),shouji(8));
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0 
mysql> show index from test\G
*************************** 1. row ***************************
        Table: test
        Non_unique: 0
        Key_name: PRIMARY
        Seq_in_index: 1
        Column_name: id
        Collation: A
        Cardinality: 5
        Sub_part: NULL
        Packed: NULL
        Null:
        Index_type: BTREE
        Comment:
        Index_comment:
*************************** 2. row ***************************
        Table: test   Non_unique: 1
        Key_name: index_name_shouji
        Seq_in_index: 1
        Column_name: name 
        Collation: A 
        Cardinality: 5
        Sub_part: 6
        Packed: NULL
        Null: YES
        Index_type: BTREE
        Comment:Index_comment:
*************************** 3. row **************************
        Table: test
        Non_unique: 1
        Key_name: index_name_shouji
        Seq_in_index: 2
        Column_name: shouji
        Collation: A  Cardinality: 5
        Sub_part: 8
        Packed: NULL
        Null: YES
        Index_type: BTREE
        Comment:
        Index_comment:
        3 rows in set (0.00 sec)



28.查询手机号以135开头的,名字为oldboy的记录(此记录要提前插入)


mysql> select * from test where name='cyh' and shouji like '6044%';
+----+------+------+-----------+
| id | age  | name | shouji    |
+----+------+------+-----------+
|  4 |   24 | cyh  | 604419314 |
+----+------+------+-----------+
1 row in set (0.00 sec)



29.查询上述语句的执行计划(是否使用联合索引等)


mysql> explain select * from test where name='cyh' and shouji like '6044%'\G
*************************** 1. row ***************************
           id: 1  select_type: SIMPLE
           table: test
           type: rangepossible_keys: index_name_shouji
           key: index_name_shouji
           key_len: 32
           ref: NULL
           rows: 1
           Extra: Using where
           1 row in set (0.00 sec)



30、把test表的引擎改成MyISAM


 

         1 row in set (0.00 sec)



本文转自 tianya1993 51CTO博客,原文链接:http://blog.51cto.com/dreamlinux/1835064,如需转载请自行联系原作者

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
存储 关系型数据库 MySQL
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
关系型数据库 MySQL Java
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
字节面试: MySQL 百万级 导入发生的 “死锁” 难题如何解决?“2序4拆”,彻底攻克
|
存储 SQL 关系型数据库
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
京东面试:mysql深度分页 严重影响性能?根本原因是什么?如何优化?
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
SQL 存储 关系型数据库
滴滴面试:明明 mysql 加的是 行锁,怎么就变 表锁 了?
滴滴面试:明明 mysql 加的是 行锁,怎么就变 表锁 了?
|
SQL 关系型数据库 MySQL
京东面试:MySQL MVCC是如何实现的?如何通过MVCC实现读已提交、可重复读隔离级别的?
1.请解释什么是MVCC,它在数据库中的作用是什么? 2.在MySQL中,MVCC是如何实现的?请简述其工作原理。 3.MVCC是如何解决读-写和写-写冲突的? 4.在并发环境中,当多个事务同时读取同一行数据时,MVCC是如何保证每个事务看到的数据版本是一致的? 5.MVCC如何帮助提高数据库的并发性能?
京东面试:MySQL MVCC是如何实现的?如何通过MVCC实现读已提交、可重复读隔离级别的?
|
消息中间件 NoSQL 关系型数据库
去哪面试:1Wtps高并发,MySQL 热点行 问题, 怎么解决?
去哪面试:1Wtps高并发,MySQL 热点行 问题, 怎么解决?
去哪面试:1Wtps高并发,MySQL 热点行 问题, 怎么解决?
|
存储 SQL 关系型数据库
MySQL 面试题
MySQL 的一些基础面试题
381 5

热门文章

最新文章

推荐镜像

更多