MySQL 保姆级教程(二):使用 MySQL 检索数据

使用 MySQL

3.2 选择数据库

使用数据库: 输入: USE 数据库名;输出: Database changed分析: 不返回任何结果,显示某种形式的通知
​
例如: 使用 crashcourse 数据库
use crashcourse;

3.3 了解数据库和表

列出所有的数据库: 输入: SHOW DATABASES;输出: +--------------------+| Database           |+--------------------+| coldfusion         || crashcourse        || flex               || forta              || information_schema || mysql              || performance_schema || study              || sys                || test               |+--------------------+分析: 返回可用数据库的一个列表
​
列出当前数据库中的所有表: 输入: SHOW TABLES;输出: +------------------------------------------------------+| Tables_in_mysql                                      |+------------------------------------------------------+| columns_priv                                         || component                                            || db                                                   || default_roles                                        || engine_cost                                          || func                                                 || general_log                                          || global_grants                                        || gtid_executed                                        || help_category                                        || help_keyword                                         || help_relation                                        || help_topic                                           || innodb_index_stats                                   || innodb_table_stats                                   || password_history                                     || plugin                                               || procs_priv                                           || proxies_priv                                         || replication_asynchronous_connection_failover         || replication_asynchronous_connection_failover_managed || replication_group_configuration_version              || replication_group_member_actions                     || role_edges                                           || server_cost                                          || servers                                              || slave_master_info                                    || slave_relay_log_info                                 || slave_worker_info                                    || slow_log                                             || tables_priv                                          || time_zone                                            || time_zone_leap_second                                || time_zone_name                                       || time_zone_transition                                 || time_zone_transition_type                            || user                                                 |+------------------------------------------------------+分析: 返回当前选择的数据库内可用表的列表
​
显示指定表的列信息: 输入: SHOW COLUMNS FROM user;或者是: DESCRIBE user;输出: +--------------------------+-----------------------------------+------+-----+-----------------------+-------+| Field                    | Type                              | Null | Key | Default               | Extra |+--------------------------+-----------------------------------+------+-----+-----------------------+-------+| Host                     | char(255)                         | NO   | PRI |                       |       || User                     | char(32)                          | NO   | PRI |                       |       || SELECT_priv              | enum('N','Y')                     | NO   |     | N                     |       || Insert_priv              | enum('N','Y')                     | NO   |     | N                     |       || Update_priv              | enum('N','Y')                     | NO   |     | N                     |       || Delete_priv              | enum('N','Y')                     | NO   |     | N                     |       || Create_priv              | enum('N','Y')                     | NO   |     | N                     |       || Drop_priv                | enum('N','Y')                     | NO   |     | N                     |       || Reload_priv              | enum('N','Y')                     | NO   |     | N                     |       || Shutdown_priv            | enum('N','Y')                     | NO   |     | N                     |       || Process_priv             | enum('N','Y')                     | NO   |     | N                     |       || File_priv                | enum('N','Y')                     | NO   |     | N                     |       || Grant_priv               | enum('N','Y')                     | NO   |     | N                     |       || References_priv          | enum('N','Y')                     | NO   |     | N                     |       || Index_priv               | enum('N','Y')                     | NO   |     | N                     |       || Alter_priv               | enum('N','Y')                     | NO   |     | N                     |       || SHOW_db_priv             | enum('N','Y')                     | NO   |     | N                     |       || Super_priv               | enum('N','Y')                     | NO   |     | N                     |       || Create_tmp_table_priv    | enum('N','Y')                     | NO   |     | N                     |       || Lock_tables_priv         | enum('N','Y')                     | NO   |     | N                     |       || Execute_priv             | enum('N','Y')                     | NO   |     | N                     |       || Repl_slave_priv          | enum('N','Y')                     | NO   |     | N                     |       || Repl_client_priv         | enum('N','Y')                     | NO   |     | N                     |       || Create_view_priv         | enum('N','Y')                     | NO   |     | N                     |       || SHOW_view_priv           | enum('N','Y')                     | NO   |     | N                     |       || Create_routine_priv      | enum('N','Y')                     | NO   |     | N                     |       || Alter_routine_priv       | enum('N','Y')                     | NO   |     | N                     |       || Create_user_priv         | enum('N','Y')                     | NO   |     | N                     |       || Event_priv               | enum('N','Y')                     | NO   |     | N                     |       || Trigger_priv             | enum('N','Y')                     | NO   |     | N                     |       || Create_tablespace_priv   | enum('N','Y')                     | NO   |     | N                     |       || ssl_type                 | enum('','ANY','X509','SPECIFIED') | NO   |     |                       |       || ssl_cipher               | blob                              | NO   |     | NULL                  |       || x509_issuer              | blob                              | NO   |     | NULL                  |       || x509_subject             | blob                              | NO   |     | NULL                  |       || max_questions            | int unsigned                      | NO   |     | 0                     |       || max_updates              | int unsigned                      | NO   |     | 0                     |       || max_connections          | int unsigned                      | NO   |     | 0                     |       || max_user_connections     | int unsigned                      | NO   |     | 0                     |       || plugin                   | char(64)                          | NO   |     | caching_sha2_password |       || authentication_string    | text                              | YES  |     | NULL                  |       || password_expired         | enum('N','Y')                     | NO   |     | N                     |       || password_last_changed    | timestamp                         | YES  |     | NULL                  |       || password_lifetime        | smallint unsigned                 | YES  |     | NULL                  |       || account_locked           | enum('N','Y')                     | NO   |     | N                     |       || Create_role_priv         | enum('N','Y')                     | NO   |     | N                     |       || Drop_role_priv           | enum('N','Y')                     | NO   |     | N                     |       || Password_reuse_history   | smallint unsigned                 | YES  |     | NULL                  |       || Password_reuse_time      | smallint unsigned                 | YES  |     | NULL                  |       || Password_require_current | enum('N','Y')                     | YES  |     | NULL                  |       || User_attributes          | json                              | YES  |     | NULL                  |       |+--------------------------+-----------------------------------+------+-----+-----------------------+-------+分析: SHOW columns 要求给出一个表名(例如 user),它对每个字段返回一行,行中包含字段名、数据类型、是否允许 NULL,键信息、默认值以及其他信息
​
其他支持 SHOW 的语句: 1. SHOW STATUS      用来显示广泛的服务器状态信息2. SHOW CREATE DATABASE 数据库名 和 SHOW CREATE TABLE 表名     分别用来显示创建特定数据库或表的 mysql 语句,包括表的结构、索引等3. SHOW GRANTS      用来显示授予用户(所有用户或特定用户)的安全权限4. SHOW ERRORS 和 SHOW WARNINGS      用来显示服务器错误或警告消息5. SHOW PROCESSLIST;        用来显示当前正在执行的进程列表6. SHOW VARIABLES;      用来显示数据库系统的配置变量

3.4 数据库的创建

输入: CREATE DATABASE <数据库名>;
​
例如: CREATE DATABASE clc;
输出: Query OK, 1 row affected (0.08 sec)

检索数据

4.1 SELECT 语句

用途是从一个或多个表中检索信息

4.2 检索单个列

输入: SELECT plugin FROM user;
输出: 
+-----------------------+
| plugin                |
+-----------------------+
| mysql_native_password |
| caching_sha2_password |
| caching_sha2_password |
| caching_sha2_password |
+-----------------------+
分析: 上述语句利用 SELECT 语句从 user 表中检索一个名为 plugin 的列

4.3 检索多个列

输入: SELECT Host,plugin FROM user;
输出: 
+-----------+-----------------------+
| Host      | plugin                |
+-----------+-----------------------+
| %         | mysql_native_password |
| localhost | caching_sha2_password |
| localhost | caching_sha2_password |
| localhost | caching_sha2_password |
+-----------+-----------------------+
分析: 与上一个例子一样,列名之间用逗号分隔

4.4 检索所有列

输入: SELECT * FROM user;
输出: 
+-----------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------------------+--------------------------+----------------------------+---------------+-------------+-----------------+----------------------+-----------------------+------------------------------------------------------------------------+------------------+-----------------------+-------------------+----------------+------------------+----------------+------------------------+---------------------+--------------------------+-----------------+
| Host      | User             | SELECT_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | SHOW_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | SHOW_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | ssl_type | ssl_cipher             | x509_issuer              | x509_subject               | max_questions | max_updates | max_connections | max_user_connections | plugin                | authentication_string                                                  | password_expired | password_last_changed | password_lifetime | account_locked | Create_role_priv | Drop_role_priv | Password_reuse_history | Password_reuse_time | Password_require_current | User_attributes |
+-----------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------------------+--------------------------+----------------------------+---------------+-------------+-----------------+----------------------+-----------------------+------------------------------------------------------------------------+------------------+-----------------------+-------------------+----------------+------------------+----------------+------------------------+---------------------+--------------------------+-----------------+
| %         | root             | Y           | Y           | Y           | Y           | Y           | Y         | Y           | Y             | Y            | Y         | Y          | Y               | Y          | Y          | Y            | Y          | Y                     | Y                | Y            | Y               | Y                | Y                | Y              | Y                   | Y                  | Y                | Y          | Y            | Y                      |          | NULL                   | NULL                     | NULL                       |             0 |           0 |               0 |                    0 | mysql_native_password | *AE47E29BB2E9F8F1EEB97F5274458B7CBBFDDA41                              | N                | 2024-01-03 15:26:21   |              NULL | N              | Y                | Y              |                   NULL |                NULL | NULL                     | NULL            |
| localhost | mysql.infoschema | Y           | N           | N           | N           | N           | N         | N           | N             | N            | N         | N          | N               | N          | N          | N            | N          | N                     | N                | N            | N               | N                | N                | N              | N                   | N                  | N                | N          | N            | N                      |          | NULL                   | NULL                     | NULL                       |             0 |           0 |               0 |                    0 | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | N                | 2024-01-03 15:22:18   |              NULL | Y              | N                | N              |                   NULL |                NULL | NULL                     | NULL            |
| localhost | mysql.session    | N           | N           | N           | N           | N           | N         | N           | Y             | N            | N         | N          | N               | N          | N          | N            | Y          | N                     | N                | N            | N               | N                | N                | N              | N                   | N                  | N                | N          | N            | N                      |          | NULL                   | NULL                     | NULL                       |             0 |           0 |               0 |                    0 | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | N                | 2024-01-03 15:22:18   |              NULL | Y              | N                | N              |                   NULL |                NULL | NULL                     | NULL            |
| localhost | mysql.sys        | N           | N           | N           | N           | N           | N         | N           | N             | N            | N         | N          | N               | N          | N          | N            | N          | N                     | N                | N            | N               | N                | N                | N              | N                   | N                  | N                | N          | N            | N                      |          | NULL                   | NULL                     | NULL                       |             0 |           0 |               0 |                    0 | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | N                | 2024-01-03 15:22:18   |              NULL | Y              | N                | N              |                   NULL |                NULL | NULL                     | NULL            |
+-----------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+--------------+------------+-----------------------+------------------+--------------+-----------------+------------------+------------------+----------------+---------------------+--------------------+------------------+------------+--------------+------------------------+----------+------------------------+--------------------------+----------------------------+---------------+-------------+-----------------+----------------------+-----------------------+------------------------------------------------------------------------+------------------+-----------------------+-------------------+----------------+------------------+----------------+------------------------+---------------------+--------------------------+-----------------+
分析: 如果给定一个通配符(*),则返回表中所有列

4.5 检索不同的行

输入: SELECT plugin FROM user;
输出: 
+-----------------------+
| plugin                |
+-----------------------+
| mysql_native_password |
| caching_sha2_password |
| caching_sha2_password |
| caching_sha2_password |
+-----------------------+
​
输入: SELECT DISTINCT plugin FROM user;
输出: 
+-----------------------+
| plugin                |
+-----------------------+
| mysql_native_password |
| caching_sha2_password |
+-----------------------+
分析: SELECT DISTINCT plugin 告诉 MySQL 只返回不同(唯一)的行,因此只返回两行。如果使用 distinct 关键字必须放在列名前面

4.6 限制结果

输入: SELECT priv FROM global_grants LIMIT 12;
输出: 
+----------------------------+
| priv                       |
+----------------------------+
| SYSTEM_USER                |
| BACKUP_ADMIN               |
| CLONE_ADMIN                |
| CONNECTION_ADMIN           |
| PERSIST_RO_VARIABLES_ADMIN |
| SESSION_VARIABLES_ADMIN    |
| SYSTEM_USER                |
| SYSTEM_VARIABLES_ADMIN     |
| SYSTEM_USER                |
| APPLICATION_PASSWORD_ADMIN |
| AUDIT_ADMIN                |
| BACKUP_ADMIN               |
+----------------------------+
分析: 此语句使用 SELECT 语句检索单个列,LIMIT 12 指示 MySQL 返回不多于两行
​
输入: SELECT priv FROM global_grants LIMIT 3,8;
输出: 
+----------------------------+
| priv                       |
+----------------------------+
| CONNECTION_ADMIN           |
| PERSIST_RO_VARIABLES_ADMIN |
| SESSION_VARIABLES_ADMIN    |
| SYSTEM_USER                |
| SYSTEM_VARIABLES_ADMIN     |
| SYSTEM_USER                |
| APPLICATION_PASSWORD_ADMIN |
| AUDIT_ADMIN                |
+----------------------------+
分析: LIMIT 3,8 指示 MySQL 返回从行 3 开始的 8 行,第一个数为开始位置,第二个数为要检索的行数
注意: 第一行为行 0
​
输入: SELECT priv FROM global_grants LIMIT 8 OFFSET 3;
输出: 
+----------------------------+
| priv                       |
+----------------------------+
| CONNECTION_ADMIN           |
| PERSIST_RO_VARIABLES_ADMIN |
| SESSION_VARIABLES_ADMIN    |
| SYSTEM_USER                |
| SYSTEM_VARIABLES_ADMIN     |
| SYSTEM_USER                |
| APPLICATION_PASSWORD_ADMIN |
| AUDIT_ADMIN                |
+----------------------------+
分析: LIMIT 的另一种代替语法,意思为读取 8 行从第 3 行开始

4.7 使用完全限定的表名

输入: SELECT server_cost.cost_name FROM server_cost;
输出: 
+------------------------------+
| cost_name                    |
+------------------------------+
| disk_temptable_create_cost   |
| disk_temptable_row_cost      |
| key_compare_cost             |
| memory_temptable_create_cost |
| memory_temptable_row_cost    |
| row_evaluate_cost            |
+------------------------------+
分析: 使用完全表名是指在列名前面加上表名称,可以避免命令冲突
​
输入: SELECT server_cost.cost_name FROM mysql.server_cost;
输出: 
+------------------------------+
| cost_name                    |
+------------------------------+
| disk_temptable_create_cost   |
| disk_temptable_row_cost      |
| key_compare_cost             |
| memory_temptable_create_cost |
| memory_temptable_row_cost    |
| row_evaluate_cost            |
+------------------------------+
分析: 使用完全表名是指在表名前面加上数据库名称,可以避免命令冲突

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/26908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MES系统助力制造业数字化转型

一、MES系统的定义和功能 MES&#xff08;Manufacturing Execution System&#xff09;即制造执行系统&#xff0c;是一种可层级化管理生产活动的软件系统。它可以实现对生产过程全面的监控、调度、控制和优化&#xff0c;提高生产的效率、质量和安全性。MES系统具有以下几个主…

五分钟教会你如何编写一个合格的测试用例

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、测试用例编写依据 测试用例编写应严格根据PRD&#xff08;产品说明书&#xff09; 没有PRD应…

最新区块链论文速读--CCF A会议 ICSE 2024 共13篇 附pdf下载 (2/2)

Conference&#xff1a;International Conference on Software Engineering (ICSE) CCF level&#xff1a;CCF A Categories&#xff1a;Software Engineering/System Software/Programming Languages Year&#xff1a;2024 Num&#xff1a;13 第1~7篇区块链文章请点击此处…

电脑技巧:认识全能绘画软件Krita

目录 一、软件简介 二、软件功能 2.1 强大的画笔引擎 2.2专业色彩管理 2.3 多层编辑与管理 2.4 动画制作 三、软件特点 四、安装说明 五、使用技巧 六、快捷键大全 对于喜欢绘画的朋友来说&#xff0c;Krita 是一款不可多得的绘画工具&#xff0c;它具有开源、免费、…

基于CNN-RNN模型的验证码图片识别

基于CNN-RNN模型的验证码图片识别是一个在计算机视觉和自然语言处理领域的经典应用场景&#xff0c;特别适合处理复杂的验证码&#xff08;如字符连成一条线的或扭曲的验证码&#xff09;和序列数据。这个任务通常包括以下几个步骤&#xff1a; 数据预处理&#xff1a; 图像增强…

Android中球体碰撞代码分享-kotlin,入门版

* 可以产生形变&#xff0c;回弹的小球 * * 整个view的核心&#xff1a; * Scroller函数 * 1.调用scroller.public void startScroll(int startX, int startY, int dx, int dy, int duration); * 在指定时间范围内&#xff0c;startX,startY,会移动dx,dy距离 * * 2.然后调用:in…

RedHat9 | Mariadb数据库的配置与管理

一、实验环境 1、Mariadb数据库介绍 MariaDB数据库管理系统是一个开源的关系型数据库管理系统&#xff0c;与MySQL高度兼容&#xff0c;并提供了更多的功能和性能优化。 起源和背景 MariaDB是MySQL的一个分支&#xff0c;主要由开源社区维护。由MySQL的创始人Michael Widen…

体验亚马逊AIGC——Amazon Bedrock

前言 随着人工智能技术的不断发展&#xff0c;我们已经进入了一个全新的时代&#xff0c;即AI驱动的时代。在这个时代&#xff0c;人工智能已经逐渐成为我们生活中不可或缺的一部分&#xff0c;它可以帮助我们更好地处理各种复杂的问题&#xff0c;提高我们的工作效率&#xff…

UDP的组播发送与接收C语言测试和nc接收组播测试

组播这个东西&#xff0c;很多年前用过一次。本身的原理不复杂&#xff0c;未知的是使用的环境&#xff0c;受使用环境的影响有多大&#xff0c;还是那句废话&#xff0c;具体问题具体分析。 发送端代码multicast.c #include <stdio.h> #include <stdlib.h> #…

鸿蒙开发:【设置任务快照的图标和名称】

设置任务快照的图标和名称 设置任务快照的图标和名称是为了提高用户界面的可视化性和用户体验&#xff0c;以便更好地管理和跟踪应用程序中的任务和功能。通过为每个任务快照设置不同的图标和名称&#xff0c;可以更轻松地区分和识别每个任务的功能。 默认情况下任务快照的图…

python-pandas获取excel表中每个sheet的名称

安装 pandas 首先确保安装了 pandas 和 openpyxl&#xff08;用于处理 Excel 文件&#xff09; pip install pandas openpyxlimport pandas as pd 加载 Excel 文件 excel_file pd.ExcelFile(your_excel_file.xlsx)获取所有工作表的名称 sheet_names excel_file.sheet_na…

C++基础知识(八:STL标准库 Map和multimap )

Map C 标准模板库&#xff08;STL&#xff09;中的 map 容器是一种非常有用的关联容器&#xff0c;用于存储键值对&#xff08;key-value pairs&#xff09;。在 map 中&#xff0c;每个元素都由一个键和一个值组成&#xff0c;其中键是唯一的&#xff0c;而值则可以重复。 基…

vue3+el-plus对eleplus对el-table表格进行拖拽(使用sortablejs进行列拖拽和行拖拽):

先看看是不是你需要的&#xff1a; 表格行和列拖拽 如有对表格拖拽进行限制某列或某行不进行拖拽的需求&#xff0c;请点击&#xff1a; vue3ele-plussortableJs对el-table使用sortableJs插件对表格拖拽时限定某列或某行不允许拖拽-CSDN博客 如果你已实现拖拽需求&#xff0c…

mybatis中resultMap和resultType的区别

总结 基本映射 &#xff1a;&#xff08;resultType&#xff09;使用resultType进行输出映射&#xff0c;只有查询出来的列名和pojo中的属性名一致&#xff0c;该列才可以映射成功。&#xff08;数据库&#xff0c;实体&#xff0c;查询字段,这些全部都得一一对应&#xff09;…

编程入门:Visual Studio探秘之旅

编程入门&#xff1a;Visual Studio探秘之旅 步入编程的世界&#xff0c;选择一个合适的开发工具至关重要。Visual Studio&#xff0c;这款由微软推出的强大集成开发环境&#xff08;IDE&#xff09;&#xff0c;无疑是初学者的理想之选。它不仅提供了丰富的功能&#xff0c;还…

运算符分为哪几类?哪些运算符常用作判断?简述运算符的优先级

运算符包含6大类&#xff1a;算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三元&#xff08;目&#xff09;运算符。 逻辑运算符常用作布尔判断 typeof 运算符: typeof 运算符用于确定变量或表达式的数据类型&#xff0c;并返回一个表示类型的字符串。 typeof …

一文让你清晰了解医疗行业采购堡垒机的必要性

医疗行业&#xff0c;一个与大家息息相关的行业。随着医疗行业的快速发展和信息化建设的深入推进&#xff0c;传统网络安全防护手段已经难以满足现代医疗信息系统的安全需求&#xff0c;特别是在处理敏感的患者信息和保障医院内部数据安全方面。因此采购堡垒机是非常必要的。 堡…

ssm160基于Java技术的会员制度管理的商品营销系统的设计与实现+vue

商品营销系统计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本商品营销系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理…

【面试经典150题】【双指针】392. 判断子序列

题目链接 https://leetcode.cn/problems/is-subsequence/?envTypestudy-plan-v2&envIdtop-interview-150 题解思路 首先如果s的长度大于t的长度&#xff0c;那么s肯定不是t的子序列如果s的长度等于t的长度&#xff0c;那么st的情况下s才是t的子序列如果s的长度小于t的长…

单片机课设-基于单片机的电子时钟设计(仿真+代码+报告)

基于单片机的电子时钟设计 前言一、课设任务是什么?二、系统总体方案硬件设计2.1 系统硬件总体设计2.2 键盘电路设计2.3 DS1302实时时钟芯片电路设计2.4 复位电路2.5 LCD电路设计 三、软件设计3.1 主程序流程图3.2 主要程序设计代码3.3 修改时间函数3.4 扫描键盘函数 四、仿真…