【趙渝強老師】MySQL中的數據庫對象

在這里插入圖片描述

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…