当前位置: 首页 > news >正文

MySQL 从入门到精通:基础概念与操作指南

文章目录

  • 一、mysql 介绍
    • 1. 什么是数据库
    • 2. 关系型数据库
    • 3. 非关系型数据库
    • 4. mysql 概述和历史
  • 二、数据库,表和列的基本概念
    • 1. 数据库的概念和用途
    • 2. mysql 数据库服务器、数据库和表的关系
    • 3. 数据库的创建和删除
    • 4. 使用数据库
    • 5. 表创建
    • 6. 表修改
    • 7. 表删除
  • 三、数据类型和约束
    • 1. 常见的数据类型
      • 数值类型
      • 字符串类型
      • 日期和时间类型
    • 2. 常见的约束
    • 3. 约束使用示例
  • 四、基本查询
    • 1. where 子句的使用
    • 2. order by 使用
    • 3. group by 和 having 子句使用
    • 4. limit 和 offset 子句的使用

一、mysql 介绍

1. 什么是数据库

数据库如同一个有序的数据仓库,与普通的数据存储方式不同,它依据特定的数据结构来组织数据,使得数据呈现出条理化的状态。

数据库和普通文件系统存在显著区别。普通文件系统中的数据往往缺乏特定结构,查找数据时如同在杂乱无章的仓库中翻找物品,效率低下。而数据库由于拥有数据结构,能快速定位和查找对应的数据,就像在井然有序且有索引目录的仓库中找东西,速度大幅提升。

我们常提及的 mysql 数据库,实际上指的是 mysql 数据库管理系统,它是一款软件,承担着数据库服务的重要职责。

依据数据结构的差异,数据库可分为关系型数据库和非关系型数据库。

2. 关系型数据库

关系型数据库是基于关系模型构建的数据库。关系模型涵盖一对一、一对多、多对多等关系模式,其数据存储格式以行列构成的二维表格为基础。因此,一个关系型数据库就是由众多二维表之间的关联所形成的数据集合。

关系型数据库在存储具有明显关系模型的数据方面表现出色,例如:

  • 一位老师可能对应多个学生,这是典型的 “多对多” 关系,如在学校的教学管理系统中,数学老师可能教授多个班级的众多学生。
  • 一本书可能有多个作者共同创作,呈现 “一对多” 关系,像一些专业领域的大型工具书,往往由多位专家联合编写。
  • 一个人对应唯一的一个身份证号码,这属于 “一对一” 关系,在身份信息管理系统中,每个人的身份证号码是独一无二的标识。

3. 非关系型数据库

由于关系型数据库在某些场景下可能显得过于庞大和复杂,于是 “非关系型数据” 应运而生,用于指代其他类型的数据库。非关系型数据库的常见模型包括:

  • 列模型:该模型以列作为数据记录的基本单位,与关系型数据库以行为记录单位不同。例如,在一些时间序列数据的存储场景中,列模型数据库能高效地按时间序列的不同属性列进行数据存储和查询。
  • 键值对模型:数据以一个个键值对的形式存储,比如 name:lisi,在简单的配置信息存储中,常采用这种模型,通过键快速获取对应的值。
  • 文档类模型:将数据以一个个文档的形式进行存储,类似于键值对,但文档结构更为复杂和灵活。像一些内容管理系统中,文章等内容就可以以文档形式存储在文档类模型数据库中。

常见的非关系型数据库有 hbase、mongodb、redis、cassandra 等。hbase 常用于海量数据的存储和实时查询,适用于大数据场景;mongodb 以其灵活的文档存储结构,在处理复杂数据结构的应用中广泛使用,如社交媒体平台的用户数据存储;redis 则因其出色的内存缓存性能,常被用于提高应用的读写速度,如电商网站的商品信息缓存;cassandra 在分布式存储和高可用性方面表现突出,适合大规模分布式系统的数据存储。

4. mysql 概述和历史

mysql 是一款开源的关系型数据库管理系统,最初由瑞典 mysql ab 公司的 michael widenius 和 david axmark 于 1995 年精心创建。它凭借速度快、可靠性高、灵活性强以及易用性好等诸多优点,在 web 应用程序开发以及其他对数据管理可靠性要求极高的应用场景中得到了广泛应用。

2008 年,mysql ab 公司被 sun microsystems 成功收购,随后在 2010 年,oracle corporation 又收购了 sun microsystems,mysql 也随之归属于 oracle 旗下。尽管经历了多次收购,在 oracle 的管理下,mysql 依然保持着活跃的开发态势,拥有庞大且活跃的用户群体,如今已成为最受欢迎的开源数据库之一,在 web 开发、企业级应用等众多领域发挥着关键作用。

mysql 具备出色的跨平台特性,支持多种操作系统,包括 windows、linux、unix 和 macos 等。同时,它对多种编程语言也提供了良好的支持,如 c、c++、java、perl、python 和 php 等。其架构设计极具扩展性和可定制性,开发人员能够根据自身应用的具体需求进行灵活定制和扩展。此外,mysql 支持多种存储引擎,不同的存储引擎适用于不同的应用场景,开发人员可以根据实际需求选择最契合的引擎,以优化数据库性能。例如,innodb 引擎适合处理大量事务,支持行级锁,能有效提高并发性能,常用于电商订单处理等对事务完整性要求高的场景;myisam 引擎则在查询性能上表现出色,不支持事务和行级锁,适用于以读操作居多的场景,如新闻资讯网站的文章存储。


二、数据库,表和列的基本概念

1. 数据库的概念和用途

数据库是一个有组织的数据集合,存储在计算机上以便于管理和访问。其主要用途包括:

  • 数据存储和管理:帮助组织和存储大量的数据,包括结构化数据(如表格)和非结构化数据(如文本、图片和视频等)。
  • 数据访问:提供高效的数据访问方式,包括查询、过滤、排序等操作,方便用户检索所需的数据。
  • 数据共享:多个用户可以同时访问数据库中的数据,实现数据的共享和协作。
  • 数据安全性:提供安全性控制,包括访问控制和数据加密等,保护数据的机密性和完整性。
  • 数据备份和恢复:提供备份和恢复功能,确保数据的可靠性和完整性。
  • 数据分析和挖掘:提供高级数据分析和挖掘功能,包括统计分析、数据挖掘和机器学习等,帮助用户从数据中获得更多价值。

2. mysql 数据库服务器、数据库和表的关系

  • 数据库使用步骤:登录 mysql => 创建数据库 => 切换到指定数据库 => 创建表 => 使用表
  • 关系:数据库服务器 => 数据库 => 表,从左到右为一对多的关系。

3. 数据库的创建和删除

  • 创建数据库:create database [if not exists] db_name,可通过default charset指定数据库采用的字符集。
  • 显示数据库语句:show databases
  • 显示数据库创建语句:show create database db_name
  • 数据库删除语句:drop database [if exists] db_name

4. 使用数据库

  • 切换数据库:use db_name;
  • 查看当前使用的数据库:select database();

5. 表创建

要创建一个新的表,需要使用 sql 中的 create table 语句,并指定表名、列名和数据类型等信息。基本语法示例:

create table [if not exists] students(id varchar(255) primary key,name varchar(255) not null,age int,gender varchar(255),clazz varchar(255)
);
  • primary key 关键字用于定义列为主键,也可以使用多列来定义主键,列间以逗号分隔。
  • 若不想字段为 null,可以设置字段的属性为 not null,操作数据表时如果输入该字段的数据为 null,就会报错。
  • 加载本地数据:load data local infile 'students.txt' into table students fields terminated by ',' ;

6. 表修改

使用 alter table 语句可以追加、修改或删除列,具体语法如下:

  • 增加列:alter table students add length float;
  • 修改列类型、属性:alter table students modify length int not null;
  • 修改表的名称:rename table students to student;
  • 修改列的名称:alter table student change id sid varchar(255);
  • 修改表的字符集:alter table student character set utf8;
  • 删除列:alter table students drop length;

7. 表删除

要删除表,使用 sql 中的 drop table 语句,并指定要删除的表名:drop table [if not exists ] students;


三、数据类型和约束

1. 常见的数据类型

  • 数值类型:int、bigint、float、double,decimal 等。
  • 字符串类型:char、varchar、text 等。
  • 日期和时间类型:date、datetime、timestamp 等。
  • 二进制类型:blob、longblob、varbinary 等。
  • 枚举类型:enum。
  • 集合类型:set。

数值类型

类型大小范围(有符号)范围(无符号)用途
tinyint1 bytes(-128,127)(0,255)小整数值
smallint2 bytes(-32 768,32 767)(0,65 535)大整数值
mediumint3 bytes(-8 388 608,8 388 607)(0,16 777 215)大整数值
int 或 integer4 bytes(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值
bigint8 bytes(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)(0,18 446 744 073 709 551 615)极大整数值
float4 bytes(-3.402 823 466 e+38,-1.175 494 351 e-38),0,(1.175 494 351 e-38,3.402 823 466 351 e+38)0,(1.175 494 351 e-38,3.402 823 466 e+38)单精度浮点数值
double8 bytes(-1.797 693 134 862 315 7 e+308,-2.225 073 858 507 201 4 e-308),0,(2.225 073 858 507 201 4 e-308,1.797 693 134 862 315 7 e+308)0,(2.225 073 858 507 201 4 e-308,1.797 693 134 862 315 7 e+308)双精度浮点数值
decimal对 decimal (m,d) ,如果 m>d,为 m+2 否则为 d+2依赖于 m 和 d 的值依赖于 m 和 d 的值小数值

字符串类型

类型大小用途
char0-255 bytes定长字符串
varchar0-65535 bytes变长字符串
tinyblob0-255 bytes不超过 255 个字符的二进制字符串
tinytext0-255 bytes短文本字符串
blob0-65 535 bytes二进制形式的长文本数据
text0-65 535 bytes长文本数据
mediumblob0-16 777 215 bytes二进制形式的中等长度文本数据
mediumtext0-16 777 215 bytes中等长度文本数据
longblob0-4 294 967 295 bytes二进制形式的极大文本数据
longtext0-4 294 967 295 bytes极大文本数据

字符串类型主要有 varchar 和 char,utf-8 编码下一个汉字占 3 个字节,gbk 编码下一个汉字占 2 个字节。

日期和时间类型

类型大小(bytes)范围格式用途
date31000-01-01/9999-12-31yyyy-mm-dd日期值
time3‘-838:59:59’/‘838:59:59’hh:mm:ss时间值或持续时间
year11901/2155yyyy年份值
datetime8‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’yyyy-mm-dd hh:mm:ss混合日期和时间值
timestamp4‘1970-01-01 00:00:01’ utc 到 ‘2038-01-19 03:14:07’ utcyyyy-mm-dd hh:mm:ss混合日期和时间值,时间戳

2. 常见的约束

  • 主键约束(primary key):用于唯一标识表中的每一行数据,通常使用整数类型的列。
  • 唯一约束(unique):保证列中的所有值都是唯一的,可以包含空值。
  • 外键约束(foreign key):用于定义列与其他表的关系,保证引用完整性。
  • 非空约束(not null):确保列中不包含空值。
  • 默认值约束(default ):在插入新行时,如果没有指定列的值,则使用默认值。
  • 检查约束(check):用于确保列中的值满足特定的条件,可以使用各种表达式和运算符来定义。

3. 约束使用示例

create table users (id int primary key,name varchar(50) not null,email varchar(100) unique,password varchar(100) not null,created_at datetime default current_timestamp,updated_at timestamp default current_timestamp on update current_timestamp,age int check(age >= 18),address text,role enum('admin', 'user') default 'user'
);
  • primary key 使用:primary key 是一列或一组列,其值唯一标识表中的每一行。一个表只能有一个 primary key。
create table employees (id int primary key,name varchar(50),age int
);
  • auto_increment 使用:auto_increment 是 mysql 特有的属性,允许一个整数列自动增长,每次插入新行时自动递增。
create table users (id int primary key auto_increment,name varchar(50)
);
  • unique 使用:确保列中的值唯一。
create table students (student_id int primary key,name varchar(50) not null,email varchar(100) unique
);
  • foreign key 使用:定义列与其他表的关系,保证引用完整性。
create table products (product_id int primary key,product_name varchar(50) not null,price decimal(8, 2) not null
);create table orders (order_id int primary key,order_date date not null,product_id int,foreign key (product_id) references products(product_id)
);

四、基本查询

1. where 子句的使用

where 子句用于筛选数据,可指定一个或多个条件限制从数据库中检索的数据行。基本语法:

select * from table_name
where some_column = some_value;
  • 比较运算符:=(等于)、<(小于)、>(大于)、<=(小于或等于)、>=(大于或等于)、<> 或!=(不等于)。
  • 逻辑运算符:and、or 和 not,用于组合多个条件。示例:select * from students where sex = ‘男’ and age > 23;
  • 模糊搜索:使用 like 运算符。示例:select * from students where clazz = ‘文科%’,返回名字以 “文科” 开头的所有学生。
  • in:select * from students where clazz in ('文科一班','文科二班','文科三班');,返回名字在指定列表中的学生。
  • between and:select * from students where age between 22 and 24;,返回年龄在 22 到 24 之间的学生。

2. order by 使用

order by子句用于对查询结果按照一个或多个列进行排序。它接受一个或多个列名或表达式作为参数,并可指定每个列的排序方式(升序或降序)。

语法如下:

select column1, column2, ...
from table_name
order by column1 [asc | desc], column2 [asc | desc], ...

其中,asc表示升序(默认排序方式),desc表示降序。

例如,要按照学生的年龄升序排列,可使用以下语句:

select * from students order by age asc;

若要先按年龄降序,再按姓名升序排列,可写为:

select * from students order by age desc, name asc;

3. group by 和 having 子句使用

  • group by 子句:用于将查询结果按照一个或多个列进行分组,并对每个组进行聚合计算(如countsumavg等)。

    语法如下:

    select column1, column2, ..., aggregate_function(column_name)
    from table_name
    group by column1, column2, ...
    

    例如,要按班级分组统计每个班级的学生人数,可使用:

    select clazz, count(id) as student_count from students group by clazz;
    
  • having 子句:用于对分组后的结果进行过滤,只返回符合条件的分组。它接受一个或多个聚合函数作为参数,并可指定每个函数的过滤条件。

    语法如下:

    select column1, column2, ..., aggregate_function(column_name)
    from table_name
    group by column1, column2, ...
    having condition;
    

    例如,要筛选出学生人数大于 30 的班级,可使用:

    select clazz, count(id) as student_count 
    from students 
    group by clazz 
    having student_count > 30;
    

4. limit 和 offset 子句的使用

  • limit:用于限制查询结果集的行数。

    语法如下:

    select column1, column2, ...
    from table_name
    limit number;
    

    其中,number是想要返回的行数。

    例如,查询学生表中前 10 条数据:

    select * from students limit 10;
    
  • offset:用于指定查询结果集的偏移量,即从结果集的第几条记录开始返回。通常与limit配合使用。

    语法如下:

    select column1, column2, ...
    from table_name
    limit number offset offset;
    

    其中,number是想要返回的行数,offset是从查询结果集的起始位置偏移的行数(起始位置为 0)。

    例如,查询学生表中从第 11 条记录开始的 10 条数据:

    select * from students limit 10 offset 10;
    

ents limit 10;


- **offset**:用于指定查询结果集的偏移量,即从结果集的第几条记录开始返回。通常与`limit`配合使用。语法如下:```sql
select column1, column2, ...
from table_name
limit number offset offset;

其中,number是想要返回的行数,offset是从查询结果集的起始位置偏移的行数(起始位置为 0)。

例如,查询学生表中从第 11 条记录开始的 10 条数据:

select * from students limit 10 offset 10;
http://www.dtcms.com/a/328588.html

相关文章:

  • Sklearn 机器学习 异常值检测 局部异常因子算法LOF
  • SQL连接操作全解析:从入门到精通
  • 某跨国金融机构法律法规自动文本摘要(ATS/文本大意提取)功能规划
  • 嵌入式第二十六天(文件IO相关操作)
  • [Robotics_py] docs | 机器人状态/位姿 | 环境表示_栅格地图
  • 准则 :用“检测到什么”的方式来编写需求条件
  • Python 异常捕获
  • 为什么我换了项目管理软件?
  • 如何在 Odoo 18 管理产品文档手册
  • Redis面试题及详细答案100道(16-32) --- 数据类型事务管道篇
  • 第23章,景深:技术综述
  • 软件测试之功能测试
  • 嵌入式系统学习Day17(文件编程)
  • (树形 dp、数学)AT_dp_v Subtree 题解
  • 架构设计:设计原则
  • 第十一节:加载外部模型:GLTF/OBJ格式解析
  • [MySQL数据库] 数据库简介
  • 【虚拟机】VMwareWorkstation17Pro安装步骤
  • Tricentis Tosca 2025.1 LTS 系统要求
  • 华为OD最新机试真题-国际移动用户识别码(IMSI)匹配-(C卷)
  • Terminal Security: Risks, Detection, and Defense Strategies
  • [激光原理与应用-255]:理论 - 几何光学 - CCD成像过程
  • 维文识别技术:将印刷体或手写体的维文文本转化为计算机可处理的数字信息
  • 网络协议组成要素
  • 网络协议——HTTP协议
  • Java锁机制全景解析:从基础到高级的并发控制艺术
  • Navicat更改MySql表名后IDEA项目启动会找原来的表
  • 树结构无感更新及地图大批量点位上图Ui卡顿优化
  • C++ 类型擦除技术:`std::any` 和 `std::variant` 的深入解析
  • 【C++】哈希