在这里插入图片描述

MySQL数据库中包含各自数据库对象,常见的数据库对象有:表、索引、视图、事件、存储过程和存储函数等等。

视频讲解如下

【赵渝强老师】MySQL中的数据库对象

一、 创建与管理表

表是一种非常重要的数据库对象,MySQL数据库的数据都是存储在表中。MySQL的表是一种二维结构,由行和列组成。表有列组成,列有列的数据类型。下面通过具体的步骤来演示如何操作MySQL的表。这些操作包括创建表、查看表、修改表和删除表。

(1)创建一张新的表test5

mysql> create table test5(id int,name varchar(32),age int);

(2)查看创建表的语句。

mysql> show create table test5 \G;# 输出的信息如下:
*************************** 1. row ***************************Table: test5
Create Table: CREATE TABLE `test5` (`id` int DEFAULT NULL,`name` varchar(32) DEFAULT NULL,`age` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

(3)查看表的结构

mysql> desc test5;# 输出的信息如下:
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(32) | YES  |     | NULL    |       |
| age   | int         | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+# 提示:这里也可以使用下面语句查看表的结构。
mysql> show columns from test5;

(4)在表中增加一个字段

mysql> alter table test5 add gender varchar(1) default 'M';# 提示:这里增加了一个gender字段用于表示性别,默认是“M”。

(5)修改表将gender字段的长度改为10个字符,并且默认值改为“Female”

mysql> alter table test5 modify gender varchar(10) default 'Female';

(6)修改字段的顺序,将gender字段放在id字段的后面

mysql> alter table test5 modify gender varchar(10) after id;

(7)重新查看表的结构

mysql> desc test5;# 输出的信息如下:
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int         | YES  |     | NULL    |       |
| gender | varchar(10) | YES  |     | NULL    |       |
| name   | varchar(32) | YES  |     | NULL    |       |
| age    | int         | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

(8)删除gender字段

mysql> alter table test5 drop column gender;

(9)删除表test5

mysql> drop table test5;

《MySQL数据库从零开始》

二、 在查询时使用索引

MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。索引是一种数据结构。MySQL默认的索引类型是B+树索引。下面以普通索引为例来介绍如何使用MySQL的索引。

普通索引是最基本的索引,它没有任何限制,用于加速查询。

(1)基于员工表创建一张新的表。

mysql> create table indextable1 as select * from emp;# 提示:通过子查询创建表,只会复制表中的数据,不会复制索引。

(2)在员工姓名ename上创建普通索引。

mysql> create index index1 on indextable1(ename);# 提示:索引页可以在创建表的时候,同时创建创建索引。例如:
mysql> create table mytable1(id   int,name varchar(10),index index_mytable1_name(name));

(3)查看表indextable1上的索引信息。

mysql> show indexes from indextable1 \G;# 输出的信息如下:
*************************** 1. row ***************************Table: indextable1Non_unique: 1Key_name: index1Seq_in_index: 1Column_name: enameCollation: ACardinality: 15Sub_part: NULLPacked: NULLNull: YESIndex_type: BTREEComment: 
Index_comment: Visible: YESExpression: NULL
1 row in set (0.01 sec)

(4)查询名叫KING的员工信息,使用explain查看SQL的执行计划。

mysql> explain select * from indextable1 where ename='KING' \G;# 输出的信息如下:
*************************** 1. row ***************************id: 1select_type: SIMPLEtable: indextable1partitions: NULLtype: ref
possible_keys: index1key: index1key_len: 33ref: constrows: 1filtered: 100.00Extra: NULL
1 row in set, 1 warning (0.00 sec)

三、 使用视图简化查询语句

当SQL的查询语句比较复杂并且需要反复执行,如果每次都重新书写该SQL语句显然不是很方便。因此MySQL数据库提供了视图用于简化复杂的SQL语句。视图(view)是一种虚表,其本身并不包含数据。它将作为一个select语句保存在数据字典中的。视图依赖的表叫做基表。通过视图可以展现基表的部分数据;视图数据来自定义视图的查询中使用的基表。在了解的视图的作用后,下面通过具体的步骤来演示如何使用视图。
(1)查看创建视图的语法

mysql> help create view;# 输出的信息如下:
Name: 'CREATE VIEW'
Description:
Syntax:
CREATE[OR REPLACE][ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}][DEFINER = user][SQL SECURITY { DEFINER | INVOKER }]VIEW view_name [(column_list)]AS select_statement[WITH [CASCADED | LOCAL] CHECK OPTION]

(2)基于员工表emp创建视图。

mysql> create or replace view view1asselect * from emp where deptno=10;# 提示:视图也可以基于多表进行创建,例如:
mysql> create or replace view view2asselect emp.ename,emp.sal,dept.dnamefrom emp,deptwhere emp.deptno=dept.deptno;

(3)使用show create view语句查看视图信息。

mysql> show create view view1;

(4)从视图中查询数据。

mysql> select * from view1;# 输出的信息如下:
+-------+--------+-----------+------+------------+------+------+--------+
| empno | ename  | job       | mgr  | hiredate   | sal  | comm | deptno |
+-------+--------+-----------+------+------------+------+------+--------+
|  7782 | CLARK  | MANAGER   | 7839 | 1981/6/9   | 2450 | NULL |     10 |
|  7839 | KING   | PRESIDENT |   -1 | 1981/11/17 | 5000 | NULL |     10 |
|  7934 | MILLER | CLERK     | 7782 | 1982/1/23  | 1300 | NULL |     10 |
+-------+--------+-----------+------+------------+------+------+--------+

(5)通过视图执行DML操作,例如:给10号部门员工涨100块钱工资。

mysql> update view1 set sal=sal+100;# 提示:并不是所有的视图都可以执行DML操作。在视图定义时含义以下内容,视图则不能执行DML操作:
1、查询子句中包含distinct和组函数
2、查询语句中包含group by子句和order by子句
3、查询语句中包含unionunion all等集合运算符
4where子句中包含相关子查询
5from子句中包含多个表
6、如果视图中有计算列,则不能执行update操作
7、如果基表中有某个具有非空约束的列未出现在视图定义中,则不能做insert操作

(6)创建视图时使用WITH CHECK OPTION约束 。

mysql> create or replace view view2asselect * from emp where sal<1000with check option;# 提示:WITH CHECK OPTION表示对视图所做的DML操作,不能违反视图的WHERE条件的限制。

(7)在view2上执行update操作。

mysql> update view2 set sal=2000;# 此时将出现下面的错误信息:
ERROR 1369 (HY000): CHECK OPTION failed 'demo1.view2'

《MySQL数据库从零开始》

四、 MySQL的事件

事件(Event)是MySQL数据库中的时间触发器,类似Linux的Crontab定时间的功能。在某一特定的时间点,Event会自动有MySQL调用从而触发相关的SQL语句或存储过程。要使用MySQL的事件,需要将参数“event_scheduler”设置为“ON”。

mysql> show variables like 'event_scheduler';# 输出的信息如下:
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+

创建事件的语法格式如下:

CREATE[DEFINER = user]EVENT[IF NOT EXISTS]event_nameON SCHEDULE schedule[ON COMPLETION [NOT] PRESERVE][ENABLE | DISABLE | DISABLE ON SLAVE][COMMENT 'string']DO event_body;# 其中:
ON SCHEDULE:用于设定Event的触发时间。可以使用”AT 时间戳“来完成单次的计划任务;或者使用”EVERY 时间的数量时间单位“来完成重复的计划任务。
ON COMPLETION [NOT] PRESERVE:表示“当这个事件不会再发生的时候”;PRESERVE的作用是使Event在执行完毕后不会被删除。

下面通过一个示例来说明如何使用MySQL的事件。
(1)创建一张表用于保存当前是时间。

mysql> create table testevent(currenttime timestamp);

(2)创建事件每隔3秒往表testevent插入当前的时间戳。

mysql> create event if not exists insert_timestamp_eventon schedule every 3 secondon completion preserveenabledoinsert into testevent values(current_timestamp());# 提示:这里的Event调用的是insert语句往表testevent插入当前的时间戳。
# Event也可以调用存储过程来完成更加复杂的业务逻辑。

(3)查看数据库中已有的事件

mysql> show events \G;# 输出的信息如下:
*************************** 1. row ***************************Db: demo1Name: insert_timestamp_eventDefiner: root@localhostTime zone: SYSTEMType: RECURRINGExecute at: NULLInterval value: 3Interval field: SECONDStarts: 2025-07-24 20:28:53Ends: NULLStatus: ENABLEDOriginator: 1
character_set_client: utf8
collation_connection: utf8_general_ciDatabase Collation: utf8_general_ci

(4)查看testevent表中的数据。

mysql> select * from testevent;# 输出的信息如下:
+---------------------+
| currenttime         |
+---------------------+
| 2025-07-24 20:28:53 |
| 2025-07-24 20:28:56 |
| 2025-07-24 20:28:59 |
| 2025-07-24 20:29:02 |
| 2025-07-24 20:29:05 |
+---------------------+# 提示:从表testevent中的数据可以看出,Event每隔3秒往表中插入了当前的时间。

(5)删除事件。

mysql> drop event insert_timestamp_event;

《MySQL数据库从零开始》

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

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

相关文章

Angular面试题目和答案大全

基础概念篇1. 什么是Angular&#xff1f;它与AngularJS有什么区别&#xff1f;答案&#xff1a; Angular是由Google开发的基于TypeScript的开源Web应用框架&#xff0c;用于构建单页应用程序&#xff08;SPA&#xff09;。Angular vs AngularJS对比&#xff1a;特性AngularJSAn…

CSS 语音参考

CSS 语音参考 概述 CSS&#xff08;层叠样式表&#xff09;是用于描述HTML或XML文档样式的样式表语言。它为网页元素提供了一种统一的方式来定义字体、颜色、布局和其他视觉属性。CSS语音参考旨在为开发者提供一个详尽的指南&#xff0c;以便他们能够更有效地使用CSS来增强网页…

C# WPF 实现读取文件夹中的PDF并显示其页数

文章目录技术选型第一步&#xff1a;创建项目并安装依赖库第二步&#xff1a;定义数据模型 (Model)第三步&#xff1a;创建视图模型 (ViewModel)第四步&#xff1a;设计用户界面 (View)总结与解释后记关于转换器的错误工作中需要整理一些PDF格式文件&#xff0c;程序员的存在就…

设计模式(五)创建型:原型模式详解

设计模式&#xff08;五&#xff09;创建型&#xff1a;原型模式详解原型模式&#xff08;Prototype Pattern&#xff09;是 GoF 23 种设计模式中的创建型模式之一&#xff0c;其核心价值在于通过复制现有对象来创建新对象&#xff0c;而不是通过 new 关键字调用构造函数。它特…

K8S 八 数据存储-高级存储PV PVC 生命周期;配置存储ConfigMap Secret

目录数据存储 Volume8.1 基本存储8.1.1 EmptyDir8.1.2 HostPath 挂载目录8.1.3 NFSnfs的服务8.2 高级存储8.2.1 PV和PVC8.2.2 PV 持久化卷申请8.2.3 PVC 资源申请PVC的配置参数8.2.4 生命周期配置存储8.3.1 ConfigMap8.3.2 Secret数据存储 Volume Kubernetes的Volume支持多种类…

Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现轮船检测识别(C#代码UI界面版)

Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现轮船检测识别&#xff08;C#代码UI界面版&#xff09;工业相机使用YoloV8模型实现轮船检测识别工业相机通过YoloV8模型实现轮船检测识别的技术背景在相机SDK中获取图像转换图像的代码分析工业相机图像转换Bitmap图像格…

自习室预约小程序的设计与实现

自习室预约小程序的设计与实现现代学习环境对高效、便捷的预约系统需求日益增长。自习室预约小程序结合前沿技术栈&#xff0c;提供流畅的用户体验和强大的后台管理功能&#xff0c;满足学生、职场人士等群体的自习需求。技术架构与核心功能Vue.js 构建动态前端界面 采用 Vue.j…

Docker 实战大纲

文章目录Docker 实战 – Mysql &#xff08;敬请期待……&#xff09;

从一个“诡异“的C++程序理解状态机、防抖与系统交互

引言 在编程世界中&#xff0c;有时一个看似简单的代码片段可能隐藏着令人惊讶的复杂性。本文将从一个"故意设计"的C程序出发&#xff0c;深入探讨其背后涉及的状态机模式、防抖机制以及操作系统与控制台的交互原理。通过这个案例&#xff0c;我们不仅能理解这些核心…

NAS-Bench-101: Towards Reproducible Neural Architecture Search

概述这篇题为"NAS-Bench-101: Towards Reproducible Neural Architecture Search"的论文由Chris Ying等人合作完成&#xff0c;旨在解决神经网络架构搜索(NAS)领域面临的重大挑战&#xff1a;计算资源需求高和实验难以复现的问题。论文提出了NAS-Bench-101&#xff0…

SpringBoot整合Fastexcel/EasyExcel导出Excel导出多个图片

整个工具的代码都在Gitee或者Github地址内 gitee&#xff1a;solomon-parent: 这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、reids、Mqtt、S3协议的文件服务器、mongodb、xxl-job、powerjob还有用Docker compose部署各类中间组件。如果大家有…

网络原理--HTTPHTTPS

目录 一、HTTP 1.1 HTTP是什么 1.2 HTTP协议的工作过程 1.3 HTTP协议格式 1.3.1 抓包工具的使用 1.3.2 抓包结果 1.4 HTTP请求 1.4.1 URL 1.4.2 认识“方法” (method) 1.4.3 认识请求“报头”(header) 1.4.4 认识请求“正文”(body) 1.5 HTTP 响应详解 1.5.1 HTTP…

『 C++ 入门到放弃 』- 哈希表

一、哈希的概念 哈希&#xff0c;也称「 散列 」是一种用来进行高效查找的数据结构&#xff0c;查找的时间复杂度平均为O(1)&#xff0c;其本质就是依赖哈希函数这个算法来将 key 和该 key 存储位置建立一个映射关系。 而因为是有着映射关系&#xff0c;所以哈希的事件复杂度为…

零售收银系统开源代码全解析:连锁门店一体化解决方案(含POS+进销存+商城)

过去10年&#xff0c;收银系统技术经历了从单机版到云服务、从单纯结算到全渠道整合的快速演进。面对连锁多门店、AI称重、智能分账、跨店库存同步等新需求&#xff0c;很多企业的现有传统saas系统已显乏力。本文将梳理收银系统关键技术指标&#xff0c;助您在系统升级时做出明…

能源高效利用如何实现?楼宇自控系统智能化监管建筑设备

随着全球能源危机日益严峻和“双碳”目标的持续推进&#xff0c;建筑领域作为能耗大户&#xff08;约占社会总能耗的40%&#xff09;&#xff0c;其节能潜力备受关注。楼宇自控系统&#xff08;Building Automation System&#xff0c;简称BAS&#xff09;作为建筑智能化的核心…

校园二手交易小程序的设计与实现

文章目录前言详细视频演示具体实现截图后端框架SpringBoot微信小程序持久层框架MyBaits成功系统案例&#xff1a;参考代码数据库源码获取前言 博主介绍:CSDN特邀作者、985高校计算机专业毕业、现任某互联网大厂高级全栈开发工程师、Gitee/掘金/华为云/阿里云/GitHub等平台持续…

Redis(二):Redis高级特性和应用(慢查询、Pipeline、事务)

Redis的慢查询 许多存储系统&#xff08;例如 MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间&#xff0c;当超过预设阀值,就将这条命令的相关信息&#xff08;例如:发生时间&#xff0c;耗时&…

如何为你的WordPress网站选择合适的安全插件

在管理WordPress网站时&#xff0c;安全因素至关重要。由于WordPress的广泛使用&#xff0c;它也成为了黑客攻击的首要目标。为了避免潜在的安全风险&#xff0c;选择合适的安全插件至关重要。而Wordfence和iThemes&#xff0c;作为两款颇具人气的WordPress安全插件&#xff0c…

我们使用Rust开发的AI知识库应用

这段时间陆陆续续的开发了2个AI知识库应用&#xff0c;一个面向企业&#xff0c;一个面向C端用户。 飞树智库&#xff1a;一个安全高效的面向 企业的知识库平台&#xff08;https://fskb.coderbox.cn/&#xff09;。 小飞树&#xff1a;一个专注于个人知识管理的AI应用&#…

自动化测试实战篇

目录 1. 自动化实施步骤 1.1 编写web测试用例 1.2 自动化测试脚本开发 1.3 将自动化测试补充至测试报告 1. 自动化实施步骤 1.1 编写web测试用例 1.2 自动化测试脚本开发 TestDevelopment: 测试用例 - Gitee.comhttps://gitee.com/Axurea/test-development/tree/master/2…