MySQL必知必会面试题(二)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

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、删除Nameshouji列的索引


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,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5天前
|
SQL 关系型数据库 MySQL
Python与MySQL数据库交互:面试实战
【4月更文挑战第16天】本文介绍了Python与MySQL交互的面试重点,包括使用`mysql-connector-python`或`pymysql`连接数据库、执行SQL查询、异常处理、防止SQL注入、事务管理和ORM框架。易错点包括忘记关闭连接、忽视异常处理、硬编码SQL、忽略事务及过度依赖低效查询。通过理解这些问题和提供策略,可提升面试表现。
25 6
|
5天前
|
存储 Oracle 关系型数据库
【MySQL面试题pro版-12】
【MySQL面试题pro版-12】
13 0
|
5天前
|
SQL 关系型数据库 MySQL
【MySQL面试题pro版-10】
【MySQL面试题pro版-10】
13 1
|
5天前
|
缓存 关系型数据库 MySQL
【MySQL面试题pro版-9】
【MySQL面试题pro版-9】
19 1
|
5天前
|
存储 SQL 关系型数据库
【MySQL面试题pro版-8】
【MySQL面试题pro版-8】
11 0
|
5天前
|
存储 SQL 关系型数据库
【MySQL面试题pro版-7】
【MySQL面试题pro版-7】
17 0
|
5天前
|
存储 关系型数据库 MySQL
【MySQL面试题pro版-6】
【MySQL面试题pro版-6】
17 0
|
26天前
|
Java 程序员
java线程池讲解面试
java线程池讲解面试
49 1
|
2月前
|
存储 关系型数据库 MySQL
2024年Java秋招面试必看的 | MySQL调优面试题
随着系统用户量的不断增加,MySQL 索引的重要性不言而喻,对于后端工程师,只有在了解索引及其优化的规则,并应用于实际工作中后,才能不断的提升系统性能,开发出高性能、高并发和高可用的系统。 今天小编首先会跟大家分享一下MySQL 索引中的各种概念,然后介绍优化索引的若干条规则,最后利用这些规则,针对面试中常考的知识点,做详细的实例分析。
246 0
2024年Java秋招面试必看的 | MySQL调优面试题
|
2月前
|
存储 算法 Java
铁子,你还记得这些吗----Java基础【拓展面试常问题型】
铁子,你还记得这些吗----Java基础【拓展面试常问题型】
46 1