MySQL 基礎概念與簡單使用

MySQL 基礎概念與簡單使用

一、數據庫基本概念

1、數據庫定義

數據庫(Database)是存儲在計算機內、有組織、可共享的數據集合,用于高效地管理大量數據。

2、數據庫分類
按數據模型分類:
  • 關系型數據庫(如 MySQL、Oracle、SQL Server)
    • 數據按表格存儲,表間通過關系鏈接。強調結構規范一致性,使用SQL語言
  • 非關系型數據庫(如 Redis、MongoDB)
    • 非關系型數據庫打破固定表格結構,形式靈活(如文檔、鍵值對等)。為高性能、高擴展性而生
  • 層級型數據庫
    • 數據像家族樹一樣嚴格按父子層次結構組織,每個節點只能有一個父節點
  • 網絡型數據庫
    • 是層級數據庫的擴展,允許一個節點有多個父節點,形成像一樣的復雜結構
按存儲介質分類:
  • 磁盤(關系)數據庫:數據持久化存儲在磁盤中(如 MySQL、PostgreSQL)
  • 內存(非關系)數據庫:數據存儲在內存中,讀寫速度快(如 Redis)

二、關系型數據庫

1、基本概念
  • 核心概念:數據以**表(Table)**的形式組織。每個表由行(Row)和列(Column)組成。
    • :代表一個實體類型,如“用戶表”、“訂單表”。
    • :代表一個具體的實體記錄,如“一個用戶的信息”。
    • :代表實體的一個屬性,如“姓名”、“年齡”。
  • 關鍵特性
    1. 結構化數據: schema(模式)是預先定義且嚴格的,規定了每列的數據類型(如整數、字符串等)
    2. SQL:使用結構化查詢語言進行操作和查詢,功能強大且通用
    3. ACID事務:保證了數據的原子性、一致性、隔離性、持久性,這是金融、交易等系統的基石
    4. 關系:表與表之間通過主鍵外鍵建立關聯,避免了數據冗余
  • 優點:數據一致性高、支持復雜查詢、技術成熟、生態完善
  • 缺點:在處理海量數據和高并發讀寫時,性能可能成為瓶頸(盡管可以通過集群等方式緩解);schema 不夠靈活,修改結構比較麻煩
2、典型關系型數據庫
  • 大型:Oracle、DB2
  • 中型:SQL Server、MySQL
  • 小型:Access、SQLite

三、SQL 分類

SQL(Structured Query Language)根據其功能主要分為以下五大類:

1、數據定義語言 (DDL - Data Definition Language)
  • 職責:用于定義和管理數據庫中的結構,如數據庫、表、索引、視圖等。這些操作通常會自動提交(隱式事務),無法回滾
  • 核心指令
    • CREATE創建新的數據庫、表、索引等
    • ALTER修改現有的數據庫對象結構(例如,添加、刪除或修改列)
    • DROP刪除整個數據庫、表或索引
    • TRUNCATE清空表中的所有數據(保留表結構)
2、數據查詢語言 (DQL - Data Query Language)
  • 職責:用于從數據庫中查詢/檢索數據,而不對數據本身進行修改。是SQL中最核心和最常用的部分
  • 核心指令
    • SELECT:從表中選擇數據
    • SHOW(在某些數據庫如MySQL中用于顯示數據庫、表等信息)
  • 常用子句/關鍵字
    • FROM:指定要查詢的表
    • WHERE:指定過濾條件
    • ORDER BY:對結果集進行排序
    • GROUP BY:將結果集按一列或多列分組
    • HAVING:對分組后的結果進行過濾
    • JOIN:用于連接多個表
3、數據操作語言 (DML - Data Manipulation Language)
  • 職責:用于對數據庫表中的**記錄(行)**進行增、刪、改操作
  • 核心指令
    • INSERT:向表中插入新記錄
    • UPDATE更新表中已存在的記錄
    • DELETE刪除表中的記錄
4、數據控制語言 (DCL - Data Control Language)
  • 職責:用于控制對數據庫的訪問權限和安全性
  • 核心指令
    • GRANT授予用戶或角色訪問數據庫對象的權限
    • REVOKE撤銷之前授予的權限
5、事務處理語言 (TPL - Transaction Processing Language)
  • 職責:用于管理數據庫中的事務,確保數據的完整性和一致性,保證一系列DML操作要么全部成功,要么全部失敗
  • 核心指令
    • BEGIN TRANSACTION / START TRANSACTION開始一個事務
    • COMMIT提交事務,確認所有更改,使其永久化
    • ROLLBACK回滾事務,撤銷所有未提交的更改

四、MySQL 基本操作

1、對于數據庫
  • 創建數據庫

    create database yy;
    
  • 查看數據庫

    show databases;
    
  • 進入數據庫

    use yy;
    
  • 刪除數據庫

    drop database yy;
    
2、對于表
常用約束:
  • PRIMARY KEY:主鍵
  • UNIQUE KEY:唯一鍵
  • auto_increment:自增約束
  • NOT NULL:非空
  • DEFAULT:默認值
  • CHECK:檢查約束(MySQL 8.0+ 支持)
  • foreign key references:外鍵
  1. 創建表

    create table xx (-> id int primary key auto_increment,-> name varchar(10) not null,-> age int(3)) engine=InnoDB default charset=utf8;
    
  2. 查看表

    show tables;
    
  3. 查看表的列信息

    show columns from xx;
    
  4. 刪除表

    drop table xx;
    
3、其他查看命令
  1. 查看支持的所有字符集

    show character set;
    
  2. 查看當前數據庫支持的所有存儲引擎

    show engines;
    
  3. 不進入某數據庫而列出其包含的所有表

    show tables from yy;
    
  4. 查看某表的創建命令

    show create table xx;
    
  5. 查看某表的狀態

    show table status like 'xx'\G
    

五、用戶操作與DCL

MySQL用戶賬號

由兩部分組成,‘USERNAME’@‘HOST’。其中,HOST的值可為:

  • IP地址
  • 通配符:
    • % :匹配任意長度的任意字符,常用于設置允許從任何主機登錄
    • _ :匹配任意單個字符
創建授權grant
  • 權限類型(priv_type)
    • ALL :所有權限
    • SELECT :讀取內容的權限
    • INSERT :插入內容的權限
    • UPDATE :更新內容的權限
    • DELETE :刪除內容的權限
  • 指定要操作的對象
    • *.* :所有庫的所有表
    • db_name.*` :指定庫的所有表
    • db_name.table_name` :指定庫的指定表
  • WITH GRANT OPTION:被授權的用戶可將自己的權限副本轉贈給其他用戶,說白點就是將自己的權限完全復制給另一個用戶。不建議使用。
  1. 創建數據庫用戶

    create user 'yanyvhang'@'192.168.100.20' identified by 'wiltjer';
    
  2. 使用新創建用戶和密碼登錄

    切換到 192.168.100.20 主機進行操作

    mysql -uyanyvhang -h192.168.100.10 -pwiltjer
    
  3. 授權

    示例:

    授權 yanyvhang 用戶在 192.168.100.20 上遠程登錄讀取所有數據庫

    grant select on *.* to 'yanyvhang'@'192.168.100.20' identified by 'wiltjer';
    
  4. 重讀授權表

    flush privileges;
    
  5. 查看授權

    切換到 192.168.100.20 主機進行操作

    show grants;
    
  6. 撤銷授權

    revoke select on *.* from 'yanyvhang'@'192.168.100.20';
    
  7. 刪除數據庫用戶

    drop user 'yanyvhang'@'192.168.100.20';
    

六、DML操作

DML操作包括增(INSERT)、刪(DELETE)、改(UPDATE)、查(SELECT),均屬針對表的操作

INSERT語句

語法

insert [into] table_name [(column_name,...)] {values | value} (value1,...),(...),...
  1. 一次插入一條記錄

    insert into xx (id,name,age) value (1,'tom',20);
    
  2. 一次插入多條記錄

    insert into xx (id,name,age) value (2,'jerry',23),-> (3,'zs',22),-> (4,'li',25),-> (5,'ww',26),-> (6,'zl',20),-> (7,'lq',NULL);
    
SELECT語句
字段column表示法
  • * :所有字段

  • column1, column2 :選擇指定字段

  • as :字段別名,column1 AS alias_name

  • 當表名很長時用別名代替

條件判斷語句WHERE
  • >,<,>=,<=,=,!= :操作符
  • BETWEEN value1 AND value2 :范圍查詢
  • LIKE :模糊匹配
  • IS NULL :空值
  • IS NOT NULL :非空
條件邏輯操作
  • AND :與
  • OR :或
  • NOT :非
ORDER BY語句
  • ORDER BY column_nam :升序(默認)
  • ORDER BY column_name ASC :升序
  • ORDER BY column_name DESC :降序
LIMIT 限制
  • LIMIT n :取前n個結果
  • LIMIT n,m :跳過m個結果,取后面n個結果
語法
SELECT column1,column2,... FROM table_name [WHERE clause] [ORDER BY 'column_name' [DESC]] [LIMIT [m,]n];
  1. 選擇所有字段

    select * from xx;
    
  2. 選擇 name 字段

    select name from xx;
    
  3. 按照年齡進行升序排序

    select * from xx order by age;
    
  4. 按照年齡進行降序排序

    select * from xx order by age desc;
    
  5. 按照年齡進行升序排序,取前兩個結果

    select * from xx order by age limit 2;
    
  6. 按照年齡進行升序排序,取前第二、第三個結果

    select * from xx order by age limit 1,2;
    
  7. 查詢年齡大于等于25的所有

    select * from xx where age >= 25;
    
  8. 查詢年齡大于等于25且名字為ww的所有字段

    select * from xx where age >= 25 and name = 'ww';
    
  9. 查詢年齡在22到25之間的所有字段

    select * from xx where age between 22 and 25;
    
  10. 查詢年齡為空值的所有字段

    select * from xx where age is null;
    
update語句

語法

UPDATE table_name SET column1 = new_value1[,column2 = new_value2,...] [WHERE clause] [ORDER BY 'column_name' [DESC]] [LIMIT [m,]n];
  1. 將名字為lq的年齡改為28

    update xx set age = 28 where name = 'lq';
    
delete語句

語法

DELETE FROM table_name [WHERE clause] [ORDER BY 'column_name' [DESC]] [LIMIT [m,]n];
  1. 刪除id為7的記錄

    delete from xx where id = 7;
    
  2. 刪除整張表的內容

    delete from xx;
    
truncate語句
特性DELETETRUNCATE
刪除方式逐行刪除,記錄每行刪除日志釋放數據頁方式刪除,只記錄頁釋放
事務日志在事務日志中記錄每行刪除操作只在事務日志中記錄頁釋放
恢復可能性可通過回滾事務日志恢復數據刪除后無法恢復數據
執行速度相對較慢執行速度快
資源占用占用較多系統和事務日志資源使用較少系統資源
表結構保留表結構、約束和索引保留表結構、約束和索引
標識列不重置標識列的計數值重置標識列的計數值為初始值
外鍵約束可用于有外鍵約束的表不能用于有外鍵約束引用的表
索引視圖可用于加入了索引視圖的表不能用于加入了索引視圖的表
觸發器會激活觸發器不會激活觸發器

語法

TRUNCATE table_name;

七、示例參考

  1. 搭建mysql服務

  2. 創建一個以你名字為名的數據庫,并創建一張表student

    create database yanyvhang;
    use yanyvhang
    create table student (-> id int(11) not null auto_increment,-> name varchar(100) not null,-> age tinyint(4),-> primary key(id));
    

    在這里插入圖片描述

  3. 查看下該新建的表有無內容(用select語句)

    select * from student;
    

    在這里插入圖片描述

  4. 往新建的student表中插入數據(用insert語句)

    insert into student (id,name,age) value (1,'tom',20),-> (2,'jerry',23),-> (3,'chenyu',25),-> (4,'sean',28),-> (5,'zhangshan',26),-> (6,'zhangshan',20),-> (7,'lisi',NULL),-> (8,'chenshuo',10),-> (9,'wangwu',3),-> (10,'qiuyi',15),-> (11,'qiuxiaotian',20);
    

    在這里插入圖片描述

  5. 修改lisi的年齡為50

    update student set age = 50 where name = 'lisi';
    

    在這里插入圖片描述

  6. 以age字段降序排序

    select * from student order by age desc;
    

    在這里插入圖片描述

  7. 查詢student表中年齡最小的3位同學跳過前2位

    select * from student order by age limit 2,3;
    

    在這里插入圖片描述

  8. 查詢student表中年齡最大的4位同學

    select * from student order by age desc limit 4;
    

    在這里插入圖片描述

  9. 查詢student表中名字叫zhangshan的記錄

    select * from student where name = 'zhangshan';
    

    在這里插入圖片描述

  10. 查詢student表中名字叫zhangshan且年齡大于20歲的記錄

    select * from student where name = 'zhangshan' and age > 20;
    

    在這里插入圖片描述

  11. 查詢student表中年齡在23到30之間的記錄

    select * from student where age between 23 and 30;
    

    在這里插入圖片描述

  12. 修改wangwu的年齡為100

    update student set age = 100 where name = 'wangwu';
    

    在這里插入圖片描述

  13. 刪除student中名字叫zhangshan且年齡小于等于20的記錄

    delete from student where name = 'zhangshan' and age <= 20;
    

    在這里插入圖片描述

  14. 創建表course表,要求如下

    id字段,int(3),主鍵
    course_name字段,varchar(100)

    create table course (-> id int(3) primary key,-> course_name varchar(100));
    
  15. 為course表插入數據

    insert into course (id,course_name) value (1,'Java'),-> (2,'MySQL'),-> (3,'Python'),-> (4,'Go'),-> (5,'C++');
    

    在這里插入圖片描述

  16. 創建student123表,要求如下

    id字段 int(3) 主鍵
    name varchar(100)
    age int(3)
    sex varchar(10)
    height int(3)
    course_id int(3) 外鍵,參照course表中的主鍵

    create table student123 (-> id int(3) primary key,-> name varchar(100),-> age int(3),-> sex varchar(10),-> height int(3),-> course_id int(3),-> foreign key(course_id) references course(id));
    

    在這里插入圖片描述

  17. 為student123表插入數據

    insert into student123 (id,name,age,sex,height,course_id) value (1,'Dany',25,'man',160,1),-> (2,'Green',23,'man',158,2),-> (3,'Henry',23,'woman',185,1),-> (4,'Jane',22,'man',162,3),-> (5,'Jim',24,'woman',175,2),-> (6,'John',21,'woman',172,4),-> (7,'Lily',22,'man',165,4),-> (8,'Susan',23,'man',170,5),-> (9,'Thomas',22,'woman',178,5),-> (10,'Tom',23,'woman',165,5);
    

    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/98170.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/98170.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/98170.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關系模型的數據結構

在關系數據庫這個世界里&#xff0c;所有東西&#xff08;包括你要記錄的人、物、事&#xff0c;以及它們之間的聯系&#xff09;都用一種叫做“關系”的結構來表示。而這種“關系”的靈魂&#xff0c;就是“碼”&#xff08;Key&#xff09;。1. 核心思想&#xff1a;萬物皆“…

180 課時吃透 Go 語言游戲后端系列0:序言

零基礎能學習 Go 游戲后端開發嗎&#xff1f; 當然能學啦&#xff01;別擔心&#xff0c;就算你之前對編程一竅不通&#xff0c;也完全沒問題。我特意準備了180課時的開發課程&#xff0c;由淺入深、從理論到實踐帶領大家學會使用GO語言進行游戲后端開發。 編程就像學一門新語…

Android-SerialPort-API-master源碼 串口調試 權限分析 定制

我把界面美化了一下Android-SerialPort-API-master源碼 1.加了發送按鈕 2.加上固定/dev/ttyGS1和GS9串口權限問題已經查清楚了。app與PosServer都是使用google的SerialPort方案。我做的app 都多使用一個函數available()&#xff0c;這個函數是非常有用的。在上位機發送單條指令…

KVM 入門使用手冊

KVM 入門使用手冊 1. 概述 2. 安裝 在 Ubuntu/Debian 上安裝 在 RHEL/CentOS/Fedora 上安裝 3. 網絡配置 查看默認網絡 使用橋接網絡 (推薦用于服務器) 4. 創建虛擬機 方法一:使用圖形界面 (virt-manager) 方法二:使用命令行 (virt-install) 5. 管理虛擬機 使用 `virsh` 命令…

Devise Ruby身份驗證解決方案全攻略

文章目錄 前言Devise到底是什么&#xff1f;為什么選擇Devise&#xff1f;環境準備Devise安裝指南第一步&#xff1a;添加Devise到你的Gemfile第二步&#xff1a;初始化Devise第三步&#xff1a;生成用戶模型第四步&#xff1a;運行數據庫遷移 Devise核心模塊詳解Database Auth…

68-python操作SQLite

1. 了解SQLite SQLite&#xff0c;是一款輕型的數據庫&#xff0c;是遵守ACID的關系型數據庫管理系統&#xff0c;它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域項目。它的設計目標是嵌入式的&#xff0c;而且已經在很多嵌入式產品中使用了它&#xff0c;它占用…

在Qt項目中使用QtConcurrent::run,實現異步等待和同步調用

在使用Qt進行開發時&#xff0c;經常需要使用異步方法&#xff0c;不同于C#的async/await&#xff0c;Qt中提供了QtConcurrent::run接口方法可供調用&#xff0c;習慣了C#的await&#xff0c;便想著能不能封裝幾個類似的函數在項目中使用&#xff0c;探索了下&#xff0c;有如下…

視頻分類 pytorchvideo

目錄 1. 速度 vs 精度分析 mvit: r2plus1d_r50 推理代碼&#xff1a; x3d_xs推理代碼&#xff1a; R(21)D X3D&#xff08;輕量級&#xff0c;速度快&#xff09; I3D&#xff08;經典 3D CNN&#xff09; 替換分類層&#xff08;適配你的任務&#xff09; https://gith…

OpenTiny NEXT 內核新生:生成式UI × MCP,重塑前端交互新范式!

近期&#xff0c;我們推出 OpenTiny NEXT —— OpenTiny的下一代企業級前端智能開發解決方案。這不僅是一次技術升級&#xff0c;更是一場用戶交互范式的變革&#xff1a;從傳統的人機交互升級成為人機交互范式和智能體交互范式的融合。我們堅信&#xff0c;每一個企業應用都值…

深度神經網絡1——梯度問題+標簽數不夠問題

要解決一個復雜問題&#xff0c;可能要訓練更深的神經網絡&#xff0c;可能會10層及以上&#xff0c;每層包含數百個神經元&#xff0c;成千上萬個連接。這樣大的神經網絡在訓練的時候可能會遇到以下問題&#xff1a;這樣在進行反向傳播的時候&#xff0c;隨著層數越來越低會遇…

(筆記)內存文件映射mmap

內存文件映射是一種將文件內容映射到進程的虛擬地址空間的技術&#xff0c;使得文件可以被視為內存的一部分&#xff0c;從而允許程序直接對這部分內存進行讀寫操作&#xff0c;而無需傳統的文件 I/O 調用。這種方法不僅簡化了文件操作&#xff0c;還提高了處理效率。 在Linux…

Golang中的NaN(Not a Number)

Golang中的NaN&#xff08;Not a Number&#xff09; 在Go語言中&#xff0c;NaN是浮點數&#xff08;特別是float32和float64&#xff09;中的一個特殊值&#xff0c;表示未定義或不可表示的數值。 go中&#xff0c;除數為0時并不會返回error或者nil&#xff0c;而是返回無窮大…

微軟圖引擎GraphEngine深度解析:分布式內存計算的技術革命

? "在大數據的汪洋中&#xff0c;圖引擎就像是一艘能夠高速穿越復雜關系網絡的超級快船" 引言&#xff1a;當內存遇上圖計算的火花 在這個數據爆炸的時代&#xff0c;傳統的關系型數據庫已經難以應對復雜關系數據的查詢挑戰。當Facebook的社交網絡擁有數十億用戶關…

catkin工程和CMakelist.txt的基本使用

catkin工程和CMakelist.txt的基本使用1.catkin工程和CMakelist.txt的基本使用1. 頂部基本信息2. 編譯選項 / C 標準3. 依賴查找&#xff08;catkin 包&#xff09;4. 第三方庫查找&#xff08;非 catkin&#xff09;5. 導出包信息&#xff08;catkin_package&#xff09;6. 頭文…

uniapp打包前端項目

打包前的準備工作確保項目開發已完成&#xff0c;并且已安裝最新版本的HBuilderX。檢查項目中所有依賴是否已正確安裝&#xff0c;配置文件如manifest.json已根據H5需求進行適配。在HBuilderX中打包在 HBuilderX 中&#xff0c;點擊頂部菜單欄的 “發行” -> “網站-H5手機版…

Dify + Bright Data MCP:從實時影音數據到可落地的智能體生產線

一、引言&#xff1a;AI 應用與實時影音數據的融合價值 內容生態近年的“視頻化、實時化、社交化”浪潮&#xff0c;將數據獲取鏈路推到了更靠前的位置。真正驅動業務的&#xff0c;不是某一幀漂亮的模型輸出&#xff0c;而是“數據—理解—動作”的持續閉環。無論是品牌內容策…

【Linux】make/Makefile工具篇

目錄一、自動化構建二、make/Makefile2.1 見識一個簡單的make/Makefile2.2 Makefile的基本語法2.3 Makefile的語法細節個人主頁<—請點擊 Linux專欄<—請點擊 一、自動化構建 自動化構建是指通過構建工具&#xff08;如make&#xff09;解析構建腳本&#xff08;如Make…

如何在企業微信上以 HTTPS 方式訪問內網 OA/ERP 等系統?

企業微信可以將 ZeroNews 平臺上添加的內網應用集成到企業微信的工作臺。這樣&#xff0c;用戶即使在外部網絡環境中&#xff0c;也可以通過企業微信訪問內網的 OA、ERP 等應用。以下是企業在 Linux 服務器上部署 OA 系統&#xff0c;并通過 ZeroNews 通過互聯網訪問 OA 系統的…

Windows 11 安裝使用 nvm,Node.js、npm多版本管理、切換

Windows 11 安裝使用 nvm&#xff0c;Node.js、npm多版本管理、切換 文章目錄Windows 11 安裝使用 nvm&#xff0c;Node.js、npm多版本管理、切換1. nvm 簡介2. 安裝、配置 nvm2.1. 卸載現有 Node.js&#xff08;非常重要&#xff01;&#xff09;2.2. 下載 nvm-windows 安裝包…

在LazyVim中配置Rust開發環境

要在LazyVim中配置Rust開發環境&#xff0c;包括代碼補全、格式化、調試等功能&#xff0c;可以按照以下步驟進行配置&#xff1a; 1. 確保基礎環境 首先確保你已經安裝了&#xff1a; Rust工具鏈 (rustup, rustc, cargo)LazyVim已正確安裝 # 安裝Rust工具鏈 curl --proto http…