解锁数据世界:从基础到精通的数据库探索之旅

文章目录

一. 数据库介绍

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。

每个数据库都有一个或多个不同的API接口用于创建,访问,管理,搜索和复制所保存的数据。

我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢,所以现在我们使用关系型数据库管理系

统(RDBMS)来存储和管理的大数据量。

所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的

数据。

按照早期的数据库理论,比较流行的数据库模型有三种,分别为层次式数据库、网状数据库和关系型数据库。

而在当今的互联网企业中,最常用的数据库模式主要有两种,即关系型数据库和非关系型数据库。

关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即表格形式)。在关系型数据库中,对数据的操

作几乎全部建立在一个或多个关系表格上,通过这些关联的表格分类、合并、连接或选取等运算来实现数据的管

理。

1. 数据库的重要性

  • 数据一致性:数据库设计有严格的数据完整性和一致性规则,这确保了即使在并发操作的情况下,数据仍然

保持正确无误。

  • 数据共享:数据库允许多个应用程序或多个用户同时访问相同的数据集,这提高了数据的可用性和工作效

率。

  • 安全性:数据库通常具有安全措施,如权限控制和加密技术,以保护敏感信息免受未授权访问或篡改。

  • 备份与恢复:数据库管理系统支持定期备份数据,以便在硬件故障或其他灾难性事件发生时能够迅速恢复数

据。

  • 可扩展性:随着业务增长,数据库可以进行扩展以处理更多的数据量和更高的访问频率,这对于长期运营的

系统来说是非常重要的。

2. 常用关系型数据库

Oracle数据库

Oracle前身叫SDL,由Larry Ellison和另两个编程人员在1977创办,他们开发了自己的拳头产品,在市场

上大量销售,1979年,Oracle公司引入了第一个商用SQL关系数据库管理系统。Oracle公司是最早开发关系数

据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率数一数二。

Oracle公司是目前全球最大的数据库软件公司,也是近年业务增长极为迅速的软件提供与服务商。

2007年7月12日,甲骨文公司在美国纽约宣布推出数据库Oracle llg,这是Oracle数据库的最新版本。

Oracle介绍说,Oracle llg有400多项功能,经过了1500万个小时的测试,开发工作量达到了3.6万人/月。

Oraclellg在安全,XML DB,备份等方面得到了很大提升。

主要应用范围:传统大企业,大公司,政府,金融,证券等等。

版本升级:Oracle8i,Oracle9i,Oracle10g,Oracle11g,Oracle12c。

MySQL数据库

MySQL数据库是一个中小型关系型数据库管理系统,软件开发者为瑞典MySQL AB公司。在2008年1月16号被

Sun公司收购,后Sun公司又被oracle公司收购。目前MySQL被广泛地应用在Internet上的大中小型网站中。

由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多大中小型网站为了降低网站总体拥有

成本而选择了MySQL作为网站数据库,甚至国内知名的淘宝网也选择弃用ORACLE而更换为更开放的MySQL。

MySQL数据库主要应用范围:互联网领域,大中小型网站,游戏公司,电商平台等等。

SQL Server数据库

Microsoft SQL Server是微软公司开发的大型关系型数据库系统。SQL Server的功能比较全面,效率高,

可以作为中型企业或单位的数据库平台。SQL Server可以与Windows操 作系统紧密集成,不论是应用程序开

发速度还是系统事务处理运行速度,都能得到较大的 提升。对于在Windows平台上开发的各种企业级信息管理

系统来说,不论是C/S(客户机/ 服务器)架构还是B/S(浏览器/服务器)架构,SQL Server都是一个很好的

选择。SQL Server的缺点是只能在Windows系统下运行

二. SQL语言概述

SQL(Structured Query Language)是一种用于管理和处理关系数据库的标准语言。

它主要用于执行查询、更新、管理数据库中的数据以及定义和操作数据库结构。

数据库相关操作

1.创建数据库

创建数据库是通过SQL语句来完成的,通常使用 create database 语句。一旦创建了数据库,就可以在其上定义表和其他数据库对象。

SQL语句:

mysql 复制代码
create database bookstore;
-- 这条语句创建了一个名为 bookstore 的数据库

2. 删除数据库

删除数据库是通过SQL语句来完成的,通常使用 drop database 语句。

删除数据库会永久删除数据库及其所有内容,因此在执行此操作前请谨慎考虑。

SQL语句:

mysql 复制代码
drop database bookstore;
-- 这条语句删除了名为 bookstore 的数据库

数据库表

数据库表是用来存储数据的二维表格,每一行称为一条记录(或元组),每一列表示一个属性(或字段)。

表中的每一行记录代表一个对象的状态,而每一列表示对象的一个属性。

在面向对象编程中,对象是类的实例,具有状态和行为。

在数据库设计中,表可以看作是对类的实例化,每条记录就是一个对象,而每一列表示对象的属性。

在这个表格中, id 是主键, name 是作者的名字, bio 是作者的简介。

id name bio
1 莫言 中国当代著名作家,诺贝尔文学奖得主。
2 金庸 中国武侠小说泰斗,代表作《射雕英雄传》

数据类型

数据类型定义了可以存储在字段中的数据种类。选择合适的数据类型对于保证数据完整性和提高性能至关重要。

常用数据类型:

  • 整型 ( int ):用于存储整数。
  • 浮点型 ( double ):用于存储带有小数的数值。
  • 字符型 ( varchar ):用于存储文本字符串。
  • 日期时间型 ( date ):用于存储日期。

表的创建

创建表是通过SQL语句来完成的,通常使用 create table 语句。创建表时可以定义表中的各个字段及其数据类型。

SQL语句

mysql 复制代码
create table student (
id int,
name varchar(100),
age int
);

表的约束

主键约束 (primary key)

主键约束用于唯一标识表中的每一条记录。每张表都应该具备一个主键。

作用:确保字段值的唯一性。数据不可重复。

SQL语句:

mysql 复制代码
create table student (
id int primary key,
name varchar(100),
age int
);
-- 主键约束确保了表中的每一条记录都是唯一的,这有助于后续的操作,例如查询、更新或删除单条记录

非空约束 (not null)

非空约束确保字段值不能为空。

作用:防止数据丢失或错误。

SQL语句:

mysql 复制代码
create table student (
id int primary key,
name varchar(100) not null,
age int
);
非空约束确保了某些关键字段(如姓名)必须有值,这样可以避免数据的不完整性。
-- 非空约束确保了某些关键字段(如姓名)必须有值,这样可以避免数据的不完整性。

唯一约束 (unique)

唯一约束确保字段或字段组合的值在表中是唯一的。

作用:避免重复数据。

SQL语句:

mysql 复制代码
create table student (
id int primary key,
name varchar(100) not null,
email varchar(255) unique
);

默认值约束 (default)

默认值约束为字段提供默认值,在插入新记录时不指定值时自动使用。

作用:简化数据输入。

SQL语句:

mysql 复制代码
create table student (
id int primary key,
name varchar(100) not null,
age int default 18
);
-- 默认值约束可以在插入记录时如果没有指定某些字段的值时,默认使用设定的值,从而简化数据输入过程

检查约束 (check)

检查约束确保字段值满足特定条件。

作用:防止无效数据的插入

SQL语句:

mysql 复制代码
create table student (
id int primary key,
name varchar(100) not null,
age int check (age ≥ 0 and age ≤ 150)
);
-- 检查约束确保了年龄字段的值在合理的范围内,这样可以避免无效的数据插入。

自增字段 (auto_increment)

自增字段在每次插入新记录时自动增加,通常用于主键字段。

作用:简化主键的管理。

SQL语句:

mysql 复制代码
create table student (
id int auto_increment primary key,
name varchar(100) not null,
age int
);
-- 自增字段确保了每次插入新记录时,主键字段自动递增,不需要手动指定,这样可以简化主键的管理。

三. 数据相关操作

插入(INSERT)

mysql 复制代码
INSERT INTO tb (c1, c2,...)
VALUES (v1, v2,...);

查询(SELECT)

mysql 复制代码
SELECT column1, column2, ...
FROM table_name
WHERE condition;

删除(DELETE)

mysql 复制代码
DELETE FROM table_name WHERE condition;

更新(UPDATE)

mysql 复制代码
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

四. 数据查询

1.查询-字段别名

语法说明:

字段别名是通过 AS 关键字或者直接跟在列名后使用,可以给查询结果中的列名赋予新的名称,方便展示或者处理。

mysql 复制代码
查询用户信息并给电话列命名为"联系电话"
SELECT name, phone AS 联系电话 FROM user;

2.查询-条件查询

语法说明:

条件查询是通过 WHERE 子句指定查询条件,只返回符合条件的记录

mysql 复制代码
查询特定用户的电话号码
SELECT * FROM user WHERE phone = '13812345678';

3.查询-模糊查询

语法说明

模糊查询是通过 LIKE 操作符配合通配符 % 和 _ 实现模式匹配。

%表示一个或多个字符,_表示一个字符

mysql 复制代码
查询身份证号码包含 "678" 的用户
SELECT * FROM user WHERE nric LIKE '%678%';
mysql 复制代码
查询房间编号中第三个字符为 "号" 的房间
SELECT * FROM room WHERE no LIKE '__号%';

4.查询-排序查询

语法说明:

排序查询是通过 ORDER BY 子句对查询结果进行排序,可以指定一个或多个列,并指定升序(ASC,默认)或降序(DESC)

mysql 复制代码
按价格升序显示所有房间的信息
SELECT * FROM room ORDER BY price ASC;
mysql 复制代码
按类型名称降序显示所有房间的信息
SELECT * FROM room ORDER BY type_id DESC;

5.查询-去重查询

语法说明:

去重查询是通过 DISTINCT 关键字去除查询结果中的重复行,常用于统计不同的值。

mysql 复制代码
显示所有房间的价格分段
SELECT DISTINCT price FROM room;

6.LIMIT 的使用

LIMIT 子句用于限制从数据库表中选择的记录数量。它通常用于分页显示结果或者获取前几条记录。

mysql 复制代码
SELECT ... FROM table_name
LIMIT offset,count;

7.SQL中的函数

字符串函数

  1. UPPER(column) - 将字符串转换为大写。
  2. LOWER(column) - 将字符串转换为小写。
  3. CONCAT(column1, column2, ...) - 将多个字符串连接成一个字符串。
  4. SUBSTRING(column, start, length) - 截取字符串的一部分。
  5. LENGTH(column) - 获取字符串的长度。
  6. replace(column, old, new) - 将字符串转换为小写。

数学函数

  1. ABS(column) - 计算绝对值。
  2. CEIL(column) - 向上取整。
  3. FLOOR(column) - 向下取整。
  4. ROUND(column) - 四舍五入。

日期函数

  1. NOW() - 获取当前日期和时间。
  2. YEAR(date) - 提取日期中的年份。
  3. MONTH(date) - 提取日期中的月份。
  4. DAY(date) - 提取日期中的天数。

聚合函数

COUNT() : 计算符合条件的行数。

mysql 复制代码
计算所有用户的总数:
SELECT COUNT(*) AS 总用户数
FROM user;

SUM() : 计算数值列的总和。

mysql 复制代码
计算所有房间的价格总和:
SELECT SUM(price) AS 总价格
FROM room;

AVG() : 计算数值列的平均值。

mysql 复制代码
计算所有房间的平均价格:
SELECT AVG(price) AS 平均价格
FROM room;

MAX() : 找出一列中的最大值。

mysql 复制代码
找出最贵的房间价格
SELECT MAX(price) AS 最高价格
FROM room;

MIN() : 找出一列中的最小值。

mysql 复制代码
找出最便宜的房间价格
SELECT MIN(price) AS 最低价格
FROM room;

其他函数

  1. IFNULL(column, default_value) - 如果列值为 NULL,则返回默认值。

8.联表查询

内联接(INNER JOIN)

概念:

INNER JOIN 只返回两个表中匹配的行。如果某一行在其中一个表中没有匹配,则该行不会出现在结果集中。

mysql 复制代码
列出所有房间及其对应的类型名称:
SELECT r.no AS 房间编号, t.name AS 类型名称
FROM room r
INNER JOIN type t ON r.type_id = t.id;

左联接(LEFT JOIN)

概念:

LEFT JOIN 返回左表中的所有行和右表中匹配的行。如果右表中没有匹配,则使用NULL填充右表中的列。

mysql 复制代码
列出所有房间及其对应的类型名称(即使没有类型也要列出):
SELECT r.no AS 房间编号, t.name AS 类型名称
FROM room r
LEFT JOIN type t ON r.type_id = t.id;

右联接(RIGHT JOIN)

概念:

RIGHT JOIN 返回右表中的所有行和左表中匹配的行。如果左表中没有匹配,则使用NULL填充左表中的列。

mysql 复制代码
列出所有房间类型及其对应的房间信息(即使没有房间也要列出):
SELECT t.name AS 类型名称, r.no AS 房间编号, r.description AS 描述, r.price AS 价格
FROM type t
RIGHT JOIN room r ON t.id = r.type_id;

9.分组及筛选

概念:

GROUP BY 子句用于组合数据,通常与聚合函数一起使用。

HAVING 子句用于对 GROUP BY 子句生成的结果集进行筛选。

mysql 复制代码
计算每个用户的预定次数:
SELECT u.name AS 用户姓名, COUNT(*) AS 预定次数
FROM user u
INNER JOIN plan p ON u.id = p.user_id
GROUP BY u.name;
相关推荐
秃头摸鱼侠7 分钟前
MySQL查询语句(续)
数据库·mysql
MuYiLuck15 分钟前
【redis实战篇】第八天
数据库·redis·缓存
睡觉待开机15 分钟前
6. MySQL基本查询
数据库·mysql
大熊猫侯佩1 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(三)
数据库·swiftui·swift
大熊猫侯佩1 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(二)
数据库·swiftui·swift
大熊猫侯佩1 小时前
用异步序列优雅的监听 SwiftData 2.0 中历史追踪记录(History Trace)的变化
数据库·swiftui·swift
大熊猫侯佩1 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(一)
数据库·swiftui·swift
Ares-Wang1 小时前
负载均衡LB》》HAproxy
运维·数据库·负载均衡
AI.NET 极客圈1 小时前
.NET 原生驾驭 AI 新基建实战系列(四):Qdrant ── 实时高效的向量搜索利器
数据库·人工智能·.net
weixin_470880262 小时前
MySQL体系架构解析(二):MySQL目录与启动配置全解析
数据库·mysql·面试·mysql体系架构·mysql bin目录