MySQL 学习笔记:从基础到进阶

一、数据库简介

数据库是按照数据结构来组织、存储和管理数据的仓库,MySQL 是一种常用的关系型数据库管理系统,以其开源、高效、可靠等特点广泛应用于各种 Web 应用开发中。

二、MySQL 数据库的安装与卸载

安装 MySQL 需注意选择合适的版本,安装过程中配置好相关参数,如端口号、字符集等。卸载时要确保彻底删除相关文件和注册表信息,避免残留数据影响后续安装。

三、MySQL 数据库概念

  1. 数据库:存放数据的集合,可包含多个表。
  2. :由行(记录)和列(字段)组成,用于存储具体的数据。
  3. 字段:表中的列,定义数据的类型和约束。
  4. 记录:表中的行,包含一组相关的数据值。

四、SQL 语言

SQL(Structured Query Language)即结构化查询语言,用于数据库的通信和操作。

  1. 分类
    • 数据定义语言(DDL):用于创建、修改和删除数据库对象,如数据库、表等。
    • 数据操作语言(DML):用于对数据库中的数据进行增、删、改、查操作。
    • 数据控制语言(DCL):用于控制数据库的访问权限等。

五、数据库的操作(CURD)

  1. 创建数据库

    CREATE DATABASE database_name;

  2. 查看数据库

    SHOW DATABASES;

  3. 删除数据库

    DROP DATABASE database_name;

  4. 修改数据库:较少直接修改数据库,通常通过修改数据库配置文件实现。

六、表结构操作(CURD)

  1. 创建表

    CREATE TABLE table_name (
    field1 type(length) constraint,
    field2 type(length) constraint,
    field3 type(length) constraint
    );

注意事项:

  • 表定义用小括号,结尾加分号。
  • 字段间用逗号分隔,最后一个字段后无逗号。
  • 字符串类型需指定长度,int 默认长度 11。
  1. 执行 SQL 语句

    • SELECT DATABASE();:查询当前使用的数据库。
    • USE database_name;:选择要使用的数据库。
    • 执行创建表语句。
  2. 查看表信息

    DESC table_name;

七、数据库的数据类型

  1. 数值类型 :如INT(整数)、DOUBLE(浮点数)等。
  2. 日期和时间类型 :如DATE(日期)、DATETIME(日期时间)等。
  3. 字符串类型 :如VARCHAR(可变长度字符串)、CHAR(固定长度字符串)、TEXT(大文本)等。

八、单表的约束

  1. 主键约束(重要)代表记录的唯一标识。
    • 关键字:primary key 通过该关键字声明某一列为主键。
    • 唯一 值就不能相同
    • 非空 值也不能为空
    • 被引用 (和外键一起来使用)
sql 复制代码
create table dept(
did int primary key auto_increment, dname varchar(30)
);

create table emp(
eid int primary key auto_increment, ename varchar(30),
sal double, dno int
);

insert into dept values (1,'研发部'); insert into dept values (2,'人事部');

insert into emp values (null,'聪聪',15000,1); insert into emp values (null,'邦邦',5000,1); insert into emp values (null,'美美',6000,2);
insert into emp values (null,'小凤',8000,2);
insert into emp values (null,'如花',8000,null);

问题:
*	直接把研发部删除掉。delete from dept where did = 1; 能删除成功。
*	在现实生活中,不合理。如果你避免问题的发生,两个表之间设置关系。

1.	引入外键的约束
2.	添加外键
*	正常的情况下(一个部门有多个员工,一个员工只能属于一个部门)
*	设置员工标签的dno字段,作为外键,指向部门表的主键。
*	修改员工的表,在员工添加外键。
* alter table emp add foreign key emp (dno) references dept (did);

3.	直接添加外键
*	在创建表的时候,指定外键
create table emp(
eid int primary key auto_increment, ename varchar(30),
sal double, dno int,
foreign key emp(dno) references dept (did)
);

3.直接删除部门,这回不行了。
delete from dept where did = 1;

对于外键的设置,一对多的情况下,在多的一方增加字段作为外键指向一的那一方的主键。比如上面例子中的员工和部门。

九、删除和查看表

  1. 删除表

    DROP TABLE table_name;

  2. 查看表

    SHOW TABLES;

十、修改表

  1. 添加字段

    ALTER TABLE table_name ADD column_name type;

  2. 修改字段

    ALTER TABLE table_name MODIFY column_name new_type;

  3. 删除字段

    ALTER TABLE table_name DROP column_name;

十一、数据的操作(CRUD)

  1. 插入数据(INSERT)

    INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,...);

  2. 修改数据(UPDATE)

    UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;

  3. 删除数据(DELETE)

    DELETE FROM table_name WHERE condition;

  4. 查询数据(SELECT)

    • 基本查询

    SELECT column1, column2 FROM table_name;

  • 使用运算和别名

    SELECT column1 + column2 AS sum_result FROM table_name;

  • 使用 WHERE 条件过滤

    SELECT * FROM table_name WHERE column_name = value;

  • WHERE 子句中的运算 :如比较运算(<, >, <=, >=, <>)、逻辑运算(AND, OR, NOT)等。

  • ORDER BY 排序

    SELECT * FROM table_name ORDER BY column_name ASC|DESC;

十二、聚集函数

  1. COUNT 记数

    SELECT COUNT(column_name) FROM table_name;

  2. SUM 求和

    SELECT SUM(column_name) FROM table_name;

  3. AVG 求平均值

    SELECT AVG(column_name) FROM table_name;

  4. MAX 求最大值

    SELECT MAX(column_name) FROM table_name;

  5. MIN 求最小值

    SELECT MIN(column_name) FROM table_name;

十三、分组(GROUP BY)

  1. 使用 GROUP BY 字段进行分组

    SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1;

  2. HAVING 过滤分组结果

    SELECT column1, aggregate_function(column2) FROM table_name GROUP BY column1 HAVING condition;

HAVING 和 WHERE 均可实现过滤,但 HAVING 可使用聚集函数,WHERE 不能,HAVING 通常跟在 GROUP BY 之后。

十四、多表查询

  1. 内连接

    • 显式内连接

    SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column;

  • 隐式内连接

    SELECT * FROM table1, table2 WHERE table1.column = table2.column;

  1. 外连接

    • 左外连接

    SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.column = table2.column;

  • 右外连接

    SELECT * FROM table1 RIGHT OUTER JOIN table2 ON table1.column = table2.column;

子查询:在一个查询中嵌套另一个查询,如:

SELECT * FROM table1 WHERE column > (SELECT AVG(column) FROM table1);

十五、表的设计

  1. 一对多关系:一个表中的一条记录对应另一个表中的多条记录。
  2. 多对多关系:两个表中的多条记录相互对应,通常通过中间表实现。
  3. 一对一关系:两个表中的记录一一对应,较少使用。
相关推荐
阿噜噜小栈6 分钟前
Cursor 无限续杯
经验分享·笔记
19岁开始学习1 小时前
Go学习-入门
开发语言·学习·golang
m0_748232641 小时前
mysql的主从配置
android·mysql·adb
ianozo2 小时前
CTF 代码学习日记 PHP
java·学习·php
大G哥2 小时前
用DeepSeek来帮助学习three.js加载3D太极模形
开发语言·前端·javascript·学习·ecmascript
没有不重的名么2 小时前
MATLAB基础学习相关知识
数据结构·学习·matlab
omage3 小时前
cornerstone3D学习笔记-MPR
笔记·学习·vtk·dicom·mpr
虾球xz3 小时前
游戏引擎学习第114天
学习·游戏引擎
tian-ming3 小时前
MySQL(1)基础篇
数据库·mysql
隔壁老王1564 小时前
postgresql实时同步数据表mysql
数据库·mysql·postgresql