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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…