MySQL关系型数据库学习

学习参考链接https://www.runoob.com/mysql/mysql-tutorial.html

Windows 安装MYSQL服务端的步骤:https://www.runoob.com/w3cnote/windows10-mysql-installer.html

1. 概念学习

MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

MySQL 使用标准的 SQL 数据语言形式。

MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。

  • 表头(header): 每一列的名称;
  • 列(col): 具有相同数据类型的数据的集合;
  • 行(row): 每一行用来描述某条记录的具体信息;
  • 值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
  • 键(key): 键的值在当前列中具有唯一性。

2. MySQL权限管理

客户端连接权限

bash 复制代码
CREATE USER 'username'@'host' IDENTIFIED BY 'password';



表管理权限

bash 复制代码
GRANT privileges ON database_name.* TO 'username'@'host';

3. MySQL配置文件

/etc/my.cnf 文件配置

/etc/my.cnf 文件是 MySQL 配置文件,用于配置 MySQL 服务器的各种参数和选项。

一般情况下,你不需要修改该配置文件,该文件默认配置如下:

bash 复制代码
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

[mysql.server]
user=mysql
basedir=/var/lib

[safe_mysqld]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

在配置文件中,你可以指定不同的错误日志文件存放的目录,一般你不需要改动这些配置。

/etc/my.cnf 文件在不同的系统和 MySQL 版本中可能有所不同,但是一般包含以下几个部分:

  1. 基本设置
    basedir: MySQL 服务器的基本安装目录。
    datadir: 存储 MySQL 数据文件的位置。
    socket: MySQL 服务器的 Unix 套接字文件路径。
    pid-file: 存储当前运行的 MySQL 服务器进程 ID 的文件路径。
    port: MySQL 服务器监听的端口号,默认是 3306。
  2. 服务器选项
    bind-address: 指定 MySQL 服务器监听的 IP 地址,可以是 IP 地址或主机名。
    server-id: 在复制配置中,为每个 MySQL 服务器设置一个唯一的标识符。
    default-storage-engine: 默认的存储引擎,例如 InnoDB 或 MyISAM。
    max_connections: 服务器可以同时维持的最大连接数。
    thread_cache_size: 线程缓存的大小,用于提高新连接的启动速度。
    query_cache_size: 查询缓存的大小,用于提高相同查询的效率。
    default-character-set: 默认的字符集。
    collation-server: 服务器的默认排序规则。
  3. 性能调优
    innodb_buffer_pool_size: InnoDB 存储引擎的缓冲池大小,这是 InnoDB 性能调优中最重要的参数之一。
    key_buffer_size: MyISAM 存储引擎的键缓冲区大小。
    table_open_cache: 可以同时打开的表的缓存数量。
    thread_concurrency: 允许同时运行的线程数。
  4. 安全设置
    skip-networking: 禁止 MySQL 服务器监听网络连接,仅允许本地连接。
    skip-grant-tables: 以无需密码的方式启动 MySQL 服务器,通常用于恢复忘记的 root 密码,但这是一个安全风险。
    auth_native_password=1: 启用 MySQL 5.7 及以上版本的原生密码认证。
  5. 日志设置
    log_error: 错误日志文件的路径。
    general_log: 记录所有客户端连接和查询的日志。
    slow_query_log: 记录执行时间超过特定阈值的慢查询。
    log_queries_not_using_indexes: 记录未使用索引的查询。
  6. 复制设置
    master_host 和 master_user: 主服务器的地址和复制用户。
    master_password: 复制用户的密码。
    master_log_file 和 master_log_pos: 用于复制的日志文件和位置。

4. MySQL表格

表格的列属性

MySQL 数据类型

MySQL 中定义数据字段的类型对你数据库的优化是非常重要的。

MySQL 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

5. MySQL客户端

安装 MySQL 后,你可以通过以下几种方式连接到 MySQL 服务端:

1、使用命令行客户端连接

2、使用图形化工具连接

常用 MySQL 图形化管理工具:

MySQL Workbench(官方工具):https://www.mysql.com/cn/products/workbench/

Navicat(付费):https://www.navicat.com/

DBeaver:https://dbeaver.io/

phpMyAdmin(基于Web):https://www.phpmyadmin.net/

DbGate下载地址:https://dbgate.org/download/

6. python使用MySQL数据库

python 复制代码
pip install mysql-connector-python
python 复制代码
pip install pymysql



ORM 框架

对于复杂应用,可以考虑使用 ORM (对象关系映射) 框架,如 SQLAlchemy 或 Django ORM。

7. 防止SQL注入

防范 SQL 注入:

使用参数化查询或预编译语句: 使用参数化查询(Prepared Statements)可以有效防止 SQL 注入,因为它们在执行查询之前将输入数据与查询语句分离。

输入验证和转义: 对用户输入进行适当的验证,并使用合适的转义函数(如mysqli_real_escape_string)来处理输入,以防止恶意注入。

最小权限原则: 给予数据库用户最小的权限,确保它们只能执行必要的操作,以降低潜在的损害。

使用ORM框架: 使用对象关系映射(ORM)框架(如Hibernate、Sequelize)可以帮助抽象 SQL 查询,从而降低 SQL 注入的风险。

禁用错误消息显示: 在生产环境中,禁用显示详细的错误消息,以防止攻击者获取有关数据库结构的敏感信息。

相关推荐
板栗焖小鸡5 分钟前
STM32-PWM驱动无源蜂鸣器
stm32·学习
Code季风9 分钟前
Gin 中间件详解与实践
学习·中间件·golang·go·gin
晋阳十二夜6 小时前
【压力测试之_Jmeter链接Oracle数据库链接】
数据库·oracle·压力测试
GDAL7 小时前
Node.js v22.5+ 官方 SQLite 模块全解析:从入门到实战
数据库·sqlite·node.js
DCTANT8 小时前
【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库
java·数据库·spring boot·mysql·opengauss
sealaugh328 小时前
aws(学习笔记第四十八课) appsync-graphql-dynamodb
笔记·学习·aws
水木兰亭9 小时前
数据结构之——树及树的存储
数据结构·c++·学习·算法
鱼摆摆拜拜9 小时前
第 3 章:神经网络如何学习
人工智能·神经网络·学习
aha-凯心9 小时前
vben 之 axios 封装
前端·javascript·学习
程序员岳焱9 小时前
Java 与 MySQL 性能优化:MySQL全文检索查询优化实践
后端·mysql·性能优化