首页 > 数据库 >MySQL 入门知识详解

MySQL 入门知识详解

时间:2024-08-03 14:00:33浏览次数:16  
标签:入门 price 查询 详解 products MySQL id 数据库 CREATE

MySQL 入门知识详解

在学习 MySQL 的过程中,初学者需要掌握一些基本概念、常用操作和设计原则。本文将详细讲解这些知识点,并通过具体示例帮助你更好地理解。

1. 基本概念

数据库

数据库是一个用来存储和组织化数据的容器。在 MySQL 中,一个数据库包含多个表。每个数据库通常代表一个应用程序或系统的特定数据存储区域。例如,一个电商平台可能有一个数据库存储用户信息、订单信息和产品信息。

CREATE DATABASE ecommerce;
表(Table)

表是数据库中的一个基本存储单元。每个表有特定的结构,由列(字段)和行(记录)组成。例如,一个用户表可能包含 idnameemail 等列,每一行代表一个用户的数据。

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    email VARCHAR(100) UNIQUE
);
行(Row)和列(Column)
  • 行(Row):表中的每一行代表一个记录或数据实例。比如,用户表中的每一行代表一个用户。
  • 列(Column):表中的每一列代表某种类型的数据属性,比如用户的名字、电子邮件等。
INSERT INTO users (name, email) VALUES ('Alice', '[email protected]');

上面的语句会在 users 表中插入一行数据,表示一个名为 Alice 的用户。

主键(Primary Key)

主键是唯一标识表中每一行记录的列或列的组合。主键值不能重复,也不能为 NULL。它保证了每条记录的唯一性。

CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    order_date DATE
);

在这个示例中,order_id 是订单表中的主键,每个订单都有一个唯一的订单 ID。

外键(Foreign Key)

外键用于建立和加强表之间的连接。它是一列或多列的组合,用于关联另一表中的主键。外键可以帮助维护数据的参照完整性。

CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT,
    order_date DATE,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

这里的 user_idorders 表中的外键,它关联 users 表中的 id 列。

2. 基本操作

连接 MySQL

可以通过命令行或图形化工具(如 MySQL Workbench)连接 MySQL。例如,使用命令行连接:

mysql -u root -p
创建和删除数据库
  • 创建数据库:使用 CREATE DATABASE 命令创建一个新数据库。
CREATE DATABASE my_database;
  • 删除数据库:使用 DROP DATABASE 命令删除一个数据库。
DROP DATABASE my_database;
创建和删除表
  • 创建表:使用 CREATE TABLE 命令创建一个新表,指定列及其数据类型。
CREATE TABLE products (
    product_id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255),
    price DECIMAL(10, 2)
);
  • 删除表:使用 DROP TABLE 命令删除一个表。
DROP TABLE products;
插入数据

使用 INSERT INTO 命令将数据插入表中。

INSERT INTO products (name, price) VALUES ('Laptop', 1299.99);

上面的命令会在 products 表中插入一条记录,表示一台价格为 1299.99 美元的笔记本电脑。

查询数据

使用 SELECT 命令从表中检索数据。可以使用 WHERE 条件筛选数据,ORDER BY 排序,GROUP BY 进行分组。

SELECT * FROM products WHERE price > 1000 ORDER BY price DESC;

上面的查询会返回所有价格高于 1000 美元的产品,并按价格从高到低排序。

更新数据

使用 UPDATE 命令修改表中的数据。

UPDATE products SET price = 1199.99 WHERE name = 'Laptop';

这条语句会将 Laptop 的价格更新为 1199.99 美元。

删除数据

使用 DELETE 命令从表中删除数据。

DELETE FROM products WHERE name = 'Laptop';

上面的命令会删除 nameLaptop 的产品记录。

3. 数据类型

数值类型
  • INT: 整数类型,常用于表示 ID 或计数。
  • FLOATDOUBLE: 浮点数类型,适用于需要存储小数的场景。
  • DECIMAL: 精确小数类型,常用于货币计算。
CREATE TABLE financials (
    amount DECIMAL(10, 2)
);
字符串类型
  • CHAR: 固定长度字符串,适合长度固定的文本数据。
  • VARCHAR: 可变长度字符串,适合长度不固定的文本数据。
  • TEXT: 大文本数据,适合存储大段文字。
CREATE TABLE articles (
    title VARCHAR(255),
    content TEXT
);
日期和时间类型
  • DATE: 存储日期,格式为 YYYY-MM-DD
  • TIME: 存储时间,格式为 HH:MM:SS
  • DATETIME: 存储日期和时间,格式为 YYYY-MM-DD HH:MM:SS
  • TIMESTAMP: 存储时间戳,表示从 1970-01-01 起的秒数。
CREATE TABLE events (
    event_date DATE,
    start_time TIME,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

4. SQL 查询

SELECT 语句

SELECT 是最常用的查询语句,用于从表中检索数据。你可以选择特定的列,使用 WHERE 条件筛选,或使用 ORDER BY 排序结果。

SELECT name, price FROM products WHERE price > 500 ORDER BY name ASC;
聚合函数

聚合函数用于对一组数据进行计算。这些函数通常与 GROUP BY 语句结合使用,以对特定组的数据进行计算。

  • COUNT: 计算行数。
  • SUM: 求和。
  • AVG: 计算平均值。
  • MAX: 求最大值。
  • MIN: 求最小值。
SELECT COUNT(*), AVG(price) FROM products WHERE price > 500;

这条语句会返回价格大于 500 的产品数量及其平均价格。

JOIN 操作

JOIN 操作用于连接两个或多个表,并返回符合条件的记录。最常见的连接类型是 INNER JOIN,它返回匹配两表中记录的结果。

SELECT users.name, orders.order_date
FROM usersINNER JOIN orders ON users.id = orders.user_id;

上面的查询将返回用户及其订单的日期。

子查询

子查询是嵌套在其他 SQL 查询中的查询,用于构建更复杂的查询。子查询通常用于 WHERESELECTFROMHAVING 子句中。

SELECT name FROM products WHERE price = (SELECT MAX(price) FROM products);

这条语句会返回价格最高的产品的名称。

5. 数据库设计

范式(Normalization)

范式化是数据库设计的原则,旨在消除数据冗余和确保数据的一致性。常见的范式包括:

  • 第一范式(1NF): 确保每列保持原子性,即每列的值是不可再分的。
  • 第二范式(2NF): 在符合 1NF 的基础上,确保每个非主键列都完全依赖于主键。
  • 第三范式(3NF): 在符合 2NF 的基础上,确保非主键列不依赖于其他非主键列。
索引(Index)

索引是用于加速查询操作的数据库对象。索引会在指定列上建立,加快搜索速度。主键列通常自动创建索引。

CREATE INDEX idx_price ON products(price);

这条语句在 products 表的 price 列上创建了一个索引,加速基于价格的查询。

视图(View)

视图是一个虚拟表,它是通过查询定义的,可以简化复杂的查询。视图本身不存储数据,而是保存一个 SQL 查询的定义。

CREATE VIEW product_summary ASSELECT name, price FROM products WHERE price > 1000;

使用这个视图,你可以轻松访问所有价格高于 1000 的产品。

存储过程(

Stored Procedure)
存储过程是一组预定义的 SQL 语句,封装了复杂的操作,可以被反复调用。它们帮助简化应用程序中的复杂业务逻辑。

DELIMITER //
CREATE PROCEDURE UpdateProductPrice(IN productId INT, IN newPrice DECIMAL(10, 2))
BEGIN
    UPDATE products SET price = newPrice WHERE product_id = productId;
END //
DELIMITER ;

这个存储过程可以用于更新指定产品的价格。

6. 用户和权限管理

创建用户

使用 CREATE USER 命令创建新的数据库用户。

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
设置权限

使用 GRANT 命令授予用户权限,例如对数据库的 SELECT、INSERT 权限。

GRANT SELECT, INSERT ON my_database.* TO 'newuser'@'localhost';
安全性

为了确保数据库的安全性,应该理解如何保护数据库免受 SQL 注入攻击。常用的做法是使用参数化查询或预编译语句,而不是直接插入用户输入的数据到 SQL 语句中。

SELECT * FROM users WHERE name = ?;

这种形式的查询能防止 SQL 注入攻击。

7. 数据备份和恢复

备份数据库

使用 mysqldump 工具备份数据库,可以确保数据的安全性和可恢复性。

mysqldump -u 用户名 -p 数据库名 > backup.sql
恢复数据库

使用备份文件恢复数据库。

mysql -u 用户名 -p 数据库名 < backup.sql

8. 性能优化

查询优化

通过分析查询执行计划 (EXPLAIN 语句) 来优化查询,确保数据库运行效率高。添加索引或重写查询以提高性能是常见的优化方法。

EXPLAIN SELECT * FROM products WHERE price > 500;

这条语句会显示查询的执行计划,帮助你分析如何优化查询。

数据库设计优化

在设计数据库时,考虑表的规范化和反规范化,根据使用场景选择适当的数据类型和索引。例如,对于访问频繁的列,应当考虑创建索引以加快查询速度。

9. 实践项目

创建一个简单的应用

将以上知识整合到一个实际项目中,如开发一个小型的 Web 应用,使用 MySQL 作为后台数据库。你可以尝试创建一个简单的博客系统,用户可以注册、登录、发布文章、评论文章等。通过实践这些知识点,你将更好地理解和掌握 MySQL。

总结

通过深入学习和实践以上这些知识点,你将能够使用 MySQL 进行数据库的创建、管理、查询优化等操作,为更复杂的数据库开发奠定坚实的基础。每个概念和操作都可以通过实际案例来加深理解,这样学习效果会更好。

标签:入门,price,查询,详解,products,MySQL,id,数据库,CREATE
From: https://blog.csdn.net/Mr_Zhangyuge/article/details/140889675

相关文章

  • 【Linux或者Windows中相关网络工具使用介绍】nc、ping、ifconfig、ipaddr、tcpdump、l
    在实际的网络排错、运维诊断、或者是开发过程中,熟练运用Linux或者Windows当中的有关网络工具,能够助力我们更迅速更精准地定位故障。因而,今天给大家分享几款必掌握的网络利器。1.nc命令在Linux中,nc命令即netcat命令,它被称为网络工具中的“瑞士军刀”,是一个功能强大的......
  • 【K8s】专题八:Kubernetes 服务调度详解
    以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、订阅、转发!欢迎扫码关注个人公众号!目录一、基本介绍二、工作原理三、节点绑定四、亲和性调度1、亲和性类型2、亲和性规则3、NodeAffinity4、PodAffinity五、反亲和性调度1、反......
  • python 爬虫入门实战——爬取维基百科“百科全书”词条页面内链
    1.简述本次爬取维基百科“百科全书”词条页面内链,仅发送一次请求,获取一个html页面,同时不包含应对反爬虫的知识,仅包含最基础的网页爬取、数据清洗、存储为csv文件。爬取网址url为“https://zh.wikipedia.org/wiki/百科全书”,爬取内容为该页面所有内链及内链标识(下图蓝......
  • 【C语言】详解feof函数和ferror函数
    文章目录前言1.feof1.1feof函数原型1.2正确利用函数特性读写文件1.2.1针对文本文件1.2.2针对二进制文件1.3feof函数实例演示2.ferror2.1ferror函数原型前言或许我们曾在网络上看过有关于feof函数,都说这个函数是检查文件是否已经读取结束了。但事实却并非......
  • 区块链入门基础课:《Nethereum教程》零基础玩转以太坊开发(三)合约状态
    今天我们要讨论的是如何与智能合约进行交互,获取合约状态。下面的示例将会详细讲解如何与合约进行交互,及一些概念性的解释,有需要的朋友们可以收藏一下。一:概念解释在下面示例之前呢,我先解释下为什么需要调用合约状态,以及合约状态对开发而言有什么作用。实时的了解合约状......
  • Ubuntu22.04 + Mysql5.7 + Docker + 主备复制方案
    同时运行两个MySQL5.7容器。这种方式可以实现数据库的主-备复制架构,提高系统的可靠性。下面是一个示例,演示如何运行两个MySQL5.7容器,一个作为主节点,一个作为备节点:1.运行主MySQL容器:sudodockerrun-d\--namemysql-57-master\--restart=always\......
  • Ubuntu20.04 + Mysql8.0安装
    1.安装MySQL8.0sudoaptupdatesudoapt-getinstallsoftware-properties-commonsudoapt-getinstallwgetwget-chttps://dev.mysql.com/get/mysql-apt-config_0.8.22-1_all.debsudodpkg-imysql-apt-config_0.8.22-1_all.debsudoapt-getinstallmysql-server......
  • ONNXRuntime: 深度学习模型入门学习简介
    目录ONNXRuntime的作用主要功能跨平台支持性能优化易于集成如何使用ONNXRuntimeONNXRuntime的优缺点优点缺点应用领域1.自然语言处理(NLP)2.计算机视觉(CV)3.语音识别和处理4.推荐系统5.医疗健康6.金融科技(FinTech)具体应用案例微软产品与服......
  • Day16_1--JSP了解学习之EL表达式语言入门教程
    JSP(JavaServerPages)是一个用于生成动态网页的技术。EL(ExpressionLanguage)是JSP中的一种表达式语言,用于简化JSP页面中的Java代码,使其更易于书写和阅读。下面是对JSPEL表达式语言的简要介绍。1.什么是EL?EL(表达式语言)是JSP2.0引入的一种语言,它提供了一种简单的方法来访......
  • [Bugku] web-CTF靶场详解!!!
    平台为“山东安信安全技术有限公司”自研CTF/AWD一体化平台,部分赛题采用动态FLAG形式,避免直接抄袭答案。          平台有题库、赛事预告、工具库、Writeup库等模块。---------------------------------你必须让他停下:                    ......