首页 > 其他分享 >第十三周学习笔记

第十三周学习笔记

时间:2023-12-02 15:11:24浏览次数:41  
标签:第十三 database 数据库 笔记 查询 学习 索引 table name

第十四章学习笔记

1. 数据库基础

1.1 数据库管理系统 (DBMS)

  • 数据库管理系统的概念和作用。
  • MySQL 是一个开源的关系型数据库管理系统 (RDBMS)。

1.2 数据库和表

  • 创建数据库:CREATE DATABASE database_name;
  • 选择数据库:USE database_name;
  • 删除数据库:DROP DATABASE database_name;
  • 创建表:CREATE TABLE table_name (column1 datatype, column2 datatype, ...);
  • 删除表:DROP TABLE table_name;

1.3 数据类型

  • 整数类型:INT, BIGINT, TINYINT, 等。
  • 浮点数类型:FLOAT, DOUBLE.
  • 字符串类型:VARCHAR, CHAR, TEXT.
  • 日期和时间类型:DATE, TIME, DATETIME.

1.4 约束

  • 主键约束:PRIMARY KEY.
  • 外键约束:FOREIGN KEY.
  • 唯一约束:UNIQUE.
  • 默认值约束:DEFAULT.
  • 非空约束:NOT NULL.

2. SQL 查询

2.1 基本查询

  • 查询所有数据:SELECT * FROM table_name;
  • 条件查询:SELECT * FROM table_name WHERE condition;

2.2 排序和限制

  • 排序:SELECT * FROM table_name ORDER BY column_name [ASC|DESC];
  • 限制行数:SELECT * FROM table_name LIMIT number;

2.3 聚合函数

  • COUNT(), SUM(), AVG(), MAX(), MIN() 的使用。
  • GROUP BY 子句:SELECT column_name, COUNT(*) FROM table_name GROUP BY column_name;

2.4 分组和过滤

GROUP BY 和 HAVING 子句的使用。

2.5 连接

INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN 的使用。

2.6 子查询

子查询的基本语法和嵌套查询的应用。

3. 表设计

3.1 范式

  • 第一范式 (1NF):每一列都包含不可再分的原子数据。
  • 第二范式 (2NF):非主键列完全依赖于主键。
  • 第三范式 (3NF):非主键列之间没有传递依赖关系。

3.2 关系

  • 一对一关系,一对多关系,多对多关系的理解和设计。

3.3 索引

  • 了解索引的作用和种类。
  • 创建索引:CREATE INDEX index_name ON table_name(column_name);
  • 删除索引:DROP INDEX index_name ON table_name;

4. 数据库管理

4.1 用户管理

  • 创建用户:CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
  • 赋予权限:GRANT permission ON database_name.table_name TO 'username'@'localhost';
  • 撤销权限:REVOKE permission ON database_name.table_name FROM 'username'@'localhost';

4.2 备份和恢复

  • 备份数据库:mysqldump -u username -p database_name > backup.sql
  • 恢复数据库:mysql -u username -p database_name < backup.sql

5. 性能优化

5.1 查询优化

  • 使用 EXPLAIN 分析查询计划,了解查询执行的步骤和顺序。

5.2 索引优化

  • 选择适当的列作为索引。
  • 避免在列上进行函数操作以保持索引的有效性。

5.3 数据库配置

  • 了解并调整 MySQL 配置文件,根据服务器硬件和工作负载进行优化。

6. 安全性

6.1 访问控制

  • 使用 GRANT 和 REVOKE 控制用户对数据库的访问权限。

6.2 数据加密

  • 使用 SSL/TLS 加密数据库连接。
  • 对敏感数据进行加密存储。

苏格拉底挑战



问题及解决方案

1. 性能问题

1.1 查询性能慢

  • 问题原因: 可能是没有合适的索引,查询语句写得不够优化。
  • 解决方案:
  • 分析查询计划,使用 EXPLAIN 命令找出性能瓶颈。
  • 优化查询语句,确保索引被充分利用。
  • 考虑对频繁查询的列创建合适的索引。

1.2 数据库连接过多

  • 问题原因: 大量并发连接可能导致数据库性能下降。
  • 解决方案:
  • 调整数据库连接池的配置参数,控制最大连接数。
  • 使用连接池技术,如连接池软件或应用服务器中的连接池。

1.3 数据库配置不合理

  • 问题原因: MySQL 配置文件参数设置不合理。
  • 解决方案:
  • 根据服务器硬件和工作负载进行调整配置参数。
  • 考虑使用专业的性能优化工具进行调优。

2. 安全性问题

2.1 未授权访问

  • 问题原因: 数据库用户权限设置不当。
  • 解决方案:
  • 使用 GRANT 和 REVOKE 命令精确控制用户权限。
  • 避免使用过于宽泛的权限赋予,仅赋予必需的权限。

2.2 数据泄露

  • 问题原因: 敏感数据存储不加密,或者数据库连接不安全。
  • 解决方案:
  • 对敏感数据进行加密存储。
  • 使用 SSL/TLS 加密数据库连接。

3. 数据库设计问题

  • 3.1 不合理的表设计
  • 问题原因: 表的范式设计不当,冗余字段过多。
  • 解决方案:
  • 重新设计表结构,符合范式要求。
  • 考虑使用反范式设计,根据实际需求决定是否冗余字段。

3.2 缺乏合适的索引

  • 问题原因: 查询性能差,没有充分利用索引。
  • 解决方案:
  • 分析查询语句,确保索引被充分利用。
  • 考虑添加缺失的索引。

实践

1. 连接到 MySQL 数据库:

import mysql.connector
# 连接到 MySQL 数据库
conn = mysql.connector.connect(
    host="localhost",
    user="your_username",
    password="your_password",
    database="your_database"
)
# 创建一个游标对象
cursor = conn.cursor()

2. 创建表:

# 创建一个名为 students 的表
cursor.execute("""
    CREATE TABLE students (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(255),
        age INT,
        grade VARCHAR(10)
    )
""")

3. 插入数据:

# 插入一条学生记录
cursor.execute("INSERT INTO students (name, age, grade) VALUES (%s, %s, %s)", ("John Doe", 20, "A"))

4. 查询数据:

# 查询所有学生的记录
cursor.execute("SELECT * FROM students")
students = cursor.fetchall()

# 打印查询结果
for student in students:
    print(student)

5. 更新数据:

# 更新学生信息
cursor.execute("UPDATE students SET age = %s WHERE name = %s", (21, "John Doe"))

6. 删除数据:

# 删除学生记录
cursor.execute("DELETE FROM students WHERE name = %s", ("John Doe",))

7. 提交并关闭连接:

# 提交更改并关闭连接
conn.commit()
conn.close()

标签:第十三,database,数据库,笔记,查询,学习,索引,table,name
From: https://www.cnblogs.com/wujiuchun/p/17871623.html

相关文章

  • 2023-2024-1 20231323《计算机基础与程序设计》第十周学习总结
    2023-2024-120231323《计算机基础与程序设计》第十周学习总结作业信息所属课程2023-2024-1-计算机基础与程序设计作业要求2023-2024-1计算机基础与程序设计第周作业作业目标自学教材《计算机科学概论》第12,13,14章《C语言程序设计》第9章并完成云班课测试作业......
  • 【数论】同余 学习笔记
    同余定义费马小定理定理内容:若\(p\)是质数,则有:$\foralla\inZ,a^p\equiva\pmodp$。推论:当\(\gcd(a,p)=1\)时,\(a^{p-1}\equiv1\pmodp\)。裴蜀定理及拓展欧几里德算法裴蜀定理:\(\foralla,b\inZ\),一元二次不定方程\(ax+by=\gcd(a,b)\)有整数......
  • 2023-2024-1 20231420 《计算机基础与程序设计》第十周学习总结
    2023-2024-120231420《计算机基础与程序设计》第十周学习总结1.作业信息这个作业属于哪个课程2023-2024-1《计算机基础与程序设计》这个作业要求在哪里2023-2024-1计算机基础与程序设计第十周作业这个作业的目标1.学习《计算机科学概论》第12,13,14章并完成云班课......
  • Linux学习笔记
    linux12345真实机中安装CentOS(一)真实机中安装CentOS(二)虚拟机VirtualBox安装CentOS8,并配置网络VirtualBox中复制多个服务器并配置不同的ipUbuntu入门CentOS_ServerwithGUI入门Linux分区Linux学习技巧常用命令:复制、剪切、分页、软链接常用命令:文件检......
  • 《信息安全系统设计与实现》第十三周学习笔记
    《信息安全系统设计与实现》第十三周学习笔记第十四章MySQL数据库系统MySQL简介MySQL是一个关系数据库系统在关系数据库中,在关系数据库中,数据存储在表中。每个表由多个行和列组成。表中的数据相互关联。表也可能与其他表有关联。关系结构使得可在表上运行查询来检索信息并......
  • 2023-2024-1 20232323《网络空间安全导论》第四周学习总结
    教材学习内容总结教材学习中的问题和解决过程问题:什么事系统安全院里的基本原则解决方法:查阅资料询问AI 基于AI的学习   ......
  • 【python笔记】弱引用weakref
    参考书籍:《深度学习入门——自制框架》[日]斋藤康毅强引用会出现循环引用的情况classobj(): passa=obj()#使用赋值运算,引用计数加1b=obj()c=obj()#执行到这里,a、b、c的引用计数都为1a.b=b#被对象强引用,引用计数加1b.c=cc.a=a#执行到这里,a、b、......
  • 反演与容斥 学习笔记
    反演与容斥学习笔记二项式反演函数\(f,g\),有以下结论:\[f_k=\sum_{i=0}^k\binom{k}{i}g_i\Longleftrightarrowg_k=\sum_{i=0}^k(-1)^{k-i}\binom{k}{i}f_i\]证明:考虑右式\[\begin{aligned}&\sum_{i=0}^k(-1)^{k-i}\binom{k}{i}f_k\\=&\sum_{i=0......
  • LLM 学习笔记-transformers库的 PreTrainedModel 和 ModelOutput 到底是什么?
    闲言碎语我在刚开始接触huggingface(后简称hf)的transformers库时候感觉很冗杂,比如就模型而言,有PretrainedModel,AutoModel,还有各种ModelForClassification,ModelForCausalLM,AutoModelForPreTraining,AutoModelForCausalLM等等;不仅如此,还设计了多到让人头皮发麻的各......
  • 2023-2024-1 20232401 《网络空间安全导论》第4周学习
    2023-2024-120232401《网络空间安全导论》第4周学习教材内容学习总结网络空间安全导论第四章思维导图教材学习中的问题和解决过程问题1:不理解sql注入的原理问题1解决方案:学习sqlmap的使用方法,了解深层逻辑基于AI的学习......