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权限管理
客户端连接权限
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
表管理权限
GRANT privileges ON database_name.* TO 'username'@'host';
3. MySQL配置文件
/etc/my.cnf 文件配置
/etc/my.cnf 文件是 MySQL 配置文件,用于配置 MySQL 服务器的各种参数和选项。
一般情况下,你不需要修改该配置文件,该文件默认配置如下:
[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 版本中可能有所不同,但是一般包含以下几个部分:
- 基本设置
basedir: MySQL 服务器的基本安装目录。
datadir: 存储 MySQL 数据文件的位置。
socket: MySQL 服务器的 Unix 套接字文件路径。
pid-file: 存储当前运行的 MySQL 服务器进程 ID 的文件路径。
port: MySQL 服务器监听的端口号,默认是 3306。 - 服务器选项
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: 服务器的默认排序规则。 - 性能调优
innodb_buffer_pool_size: InnoDB 存储引擎的缓冲池大小,这是 InnoDB 性能调优中最重要的参数之一。
key_buffer_size: MyISAM 存储引擎的键缓冲区大小。
table_open_cache: 可以同时打开的表的缓存数量。
thread_concurrency: 允许同时运行的线程数。 - 安全设置
skip-networking: 禁止 MySQL 服务器监听网络连接,仅允许本地连接。
skip-grant-tables: 以无需密码的方式启动 MySQL 服务器,通常用于恢复忘记的 root 密码,但这是一个安全风险。
auth_native_password=1: 启用 MySQL 5.7 及以上版本的原生密码认证。 - 日志设置
log_error: 错误日志文件的路径。
general_log: 记录所有客户端连接和查询的日志。
slow_query_log: 记录执行时间超过特定阈值的慢查询。
log_queries_not_using_indexes: 记录未使用索引的查询。 - 复制设置
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数据库
pip install mysql-connector-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 注入的风险。
禁用错误消息显示: 在生产环境中,禁用显示详细的错误消息,以防止攻击者获取有关数据库结构的敏感信息。