MySQL 入门“鸡”础

一、Win10 与Ubuntu安装

以下是一篇针对 Ubuntu 安装 MySQL 的过程中写的示例:


Ubuntu 安装 MySQL 详细指南

在本教程中,我们将向您展示如何在 Ubuntu 上安装 MySQL,并完成基本的安全配置。以下是具体步骤:

1. 安装 MySQL

在终端中输入以下命令以安装 MySQL 服务器:

```

sudo apt install mysql-server

```

安装过程中,您可能需要输入管理员密码进行确认。

安装完成后,MySQL 服务将自动启动。

2. 运行安全脚本

MySQL 提供了一个安全脚本,可以帮助您完成一些基本的安全配置。运行以下命令:

```

sudo mysql_secure_installation

```

脚本交互内容:

  • **设置 Root 用户密码验证插件**:

选择您希望使用的密码验证插件。如果您希望禁用密码验证,可以选择 `2` 或 `3`。

```

Select a password validation policy (Press [Enter] to skip):

  1. Low Length >=8

  2. Medium Length >=8, numeric, mixed case, and special characters

  3. Strong Length >=8, numeric, mixed case, special characters and dictionary file

```

  • **设置 Root 用户密码**:

如果您之前没有设置 Root 用户密码,需要在此处设置。输入您选择的密码并确认。

  • **删除匿名用户**:

建议删除匿名用户以增强安全性。输入 `Y` 并按回车。

  • **禁止 Root 用户远程登录**:

禁止 Root 用户远程登录可以提高安全性。输入 `Y` 并按回车。

  • **删除测试数据库**:

删除测试数据库以减少不必要的安全隐患。输入 `Y` 并按回车。

  • **刷新权限**:

输入 `Y` 并按回车以刷新权限并应用更改。

3. 登录 MySQL

使用以下命令以 Root 用户身份登录 MySQL:

```

sudo mysql

```

您将进入 MySQL 的命令行界面。

4. 创建新用户

为了增强安全性,建议创建一个新的 MySQL 用户。运行以下命令:

```

CREATE USER 'temp'@'%' IDENTIFIED BY '123456';

```

这条命令将在所有网络接口上创建一个名为 `temp` 的用户,密码为 `123456`。

5. 修改 MySQL 配置文件

编辑 MySQL 的配置文件以允许远程访问。运行以下命令:

```

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

```

找到 `bind-address` 行,并将其值修改为 `0.0.0.0`,如下所示:

```

bind-address = 0.0.0.0

```

保存并退出文件。

6. 重启 MySQL 服务

运行以下命令以重启 MySQL 服务,使配置更改生效:

```

sudo systemctl restart mysql

```

7. 验证远程访问

使用以下命令从远程机器连接到 MySQL 服务器:

```

mysql -utemp -p -h 192.168.29.128

```

输入用户 `temp` 的密码 `123456`,如果连接成功,您将进入 MySQL 的命令行界面。

8. 测试 MySQL

运行以下命令以测试 MySQL 是否正常工作:

```

SHOW DATABASES;

```

您应该能够看到 MySQL 数据库列表。


总结

通过以上步骤,您已经在 Ubuntu 上成功安装并配置了 MySQL。如果您遇到任何问题,请随时联系我。

二、Navicat客户端连接

以下是一篇关于使用 Navicat 客户端连接 MySQL 数据库的示例:

使用 Navicat 客户端连接 MySQL 数据库

一、Navicat 简介

Navicat 是一个强大的数据库管理工具,支持多种数据库系统,如 MySQL、MariaDB、SQL Server、Oracle 等。它提供了一个直观的图形界面,方便用户管理和操作数据库。

双击 Navicat 图标,启动客户端。在主界面中,您可以看到左侧的导航栏和右侧的数据库连接列表。

2. 创建新的数据库连接

点击导航栏中的"连接"按钮,或使用快捷键 `Ctrl + N`,打开"新建连接"对话框。

3. 配置连接参数

  • **连接名称**:输入一个易于识别的名称,例如"Local MySQL"。

  • **主机名或 IP 地址**:如果 MySQL 服务器运行在本地计算机上,请输入 `127.0.0.1` 或 `localhost`。如果是远程服务器,请输入对应的 IP 地址或域名。

  • **端口**:MySQL 的默认端口是 `3306`。如果您使用了其他端口,请输入对应的端口号。

  • **用户名**:输入您的 MySQL 用户名,例如 `temp`。

  • **密码**:输入对应的用户密码,例如 `123456`。

  • **默认数据库**(可选):如果您希望在连接时自动选择某个数据库,请在此输入数据库名称。如果不确定,可以留空。

4. 测试连接

点击"测试连接"按钮,检查连接是否成功。如果连接失败,Navicat 将提示错误信息。请根据错误信息检查连接参数是否正确。

5. 保存连接

如果测试连接成功,点击"保存"按钮,将连接信息保存到连接列表中。您可以在左侧导航栏中看到新创建的连接。

6. 连接到数据库

在连接列表中双击新创建的连接,或右键点击连接并选择"连接"。输入用户密码(如果需要),然后点击"确定"。

7. 进行基本操作

连接成功后,您可以在 Navicat 的右侧窗口中看到数据库列表、表结构、数据记录等信息。您可以通过以下方式执行基本操作:

  • **查看数据库列表**:在左侧导航栏中展开"数据库"节点,查看所有数据库。

  • **执行 SQL 查询**:点击"查询"按钮或使用快捷键 `Ctrl + Shift + N` 打开查询编辑器。输入 SQL 查询语句并点击"运行"按钮,查看查询结果。

  • **管理表**:右键点击数据库或表,可以创建、修改、删除表,以及导入和导出数据。

  • **优化连接设置**:在连接属性中,您可以设置字符集、连接超时、SSL 等选项,以优化连接性能和安全性。

  • **管理数据和对象**:Navicat 提供了丰富的数据和对象管理功能,如数据编辑器、架构设计工具、数据导出和导入工具等,方便您进行数据库开发和维护工作。

  • **备份和恢复数据库**:Navicat 的"数据传输"功能可以帮助您轻松备份和恢复数据库。您可以将数据从一个数据库传输到另一个数据库,或者导出数据为 SQL 脚本文件。

四、总结

Navicat 是一个非常实用的数据库管理工具,可以帮助您高效地管理和操作 MySQL 数据库。通过以上步骤,您可以轻松地使用 Navicat 客户端连接 MySQL 数据库,并进行各种操作。如果您遇到任何问题或需要进一步的帮助,请随时联系我。

三、DDL

表相关的 DDL 操作详解

在数据库管理中,表是存储数据的基本结构。通过 DDL(Data Definition Language,数据定义语言)语句,我们可以创建、查看、修改和删除表。以下是关于表操作的 DDL 语句的详细说明和示例。

一、展示所有表

要查看当前数据库中的所有表,可以使用以下命令:

```

SHOW TABLES;

```

执行该命令后,数据库将返回当前数据库中所有表的列表。

二、创建表

创建表是定义表结构的过程,包括列名、数据类型和约束等。以下是创建表的基本语法:

```

CREATE TABLE 表名 (

列名1 数据类型 约束,

列名2 数据类型 约束,

...

);

```

示例:创建 `employees` 表

```

CREATE TABLE employees (

employee_id INT PRIMARY KEY AUTO_INCREMENT,

first_name VARCHAR(50),

last_name VARCHAR(50),

department_id INT,

hire_date DATE,

salary DECIMAL(10, 2)

);

```

  • **解释**:

  • `employee_id`:员工 ID,主键,自动递增。

  • `first_name`:员工名,最大长度 50。

  • `last_name`:员工姓,最大长度 50。

  • `department_id`:部门 ID,整数类型。

  • `hire_date`:雇佣日期,日期类型。

  • `salary`:薪水,小数类型,最多 10 位数字,其中 2 位小数。

三、查看表结构

要查看表的结构,可以使用以下命令:

```

DESCRIBE 表名;

```

或者简写为:

```

DESC 表名;

```

示例:查看 `employees` 表结构

```

DESCRIBE employees;

```

执行该命令后,数据库将返回 `employees` 表的列信息,包括列名、数据类型、是否允许 NULL 等。

四、删除表

删除表是永久删除表及其所有数据的操作。以下是删除表的语法:

```

DROP TABLE 表名;

```

示例:删除 `employees` 表

```

DROP TABLE employees;

```

  • **注意**:删除表是不可逆的操作,执行后表及其所有数据将被永久删除。在执行删除操作前,请确保已经备份重要数据。

五、修改表

修改表包括添加列、删除列和修改列等操作。以下是修改表的语法:

```

ALTER TABLE 表名

操作;

```

1. 添加列

```

ALTER TABLE 表名

ADD 列名 数据类型 约束;

```

示例:向 `employees` 表添加 `age` 列

```

ALTER TABLE employees

ADD age INT;

```

2. 删除列

```

ALTER TABLE 表名

DROP COLUMN 列名;

```

示例:从 `employees` 表删除 `age` 列

```

ALTER TABLE employees

DROP COLUMN age;

```

3. 修改列

```

ALTER TABLE 表名

CHANGE 原列名 新列名 数据类型 约束;

```

示例:将 `employees` 表的 `first_name` 列重命名为 `name`

```

ALTER TABLE employees

CHANGE first_name name VARCHAR(50);

```

通过以上 DDL 语句,您可以轻松地创建、查看、修改和删除表,从而有效地管理数据库中的数据结构。在实际应用中,根据具体需求选择合适的 DDL 语句,可以提高数据库的灵活性和可维护性。

四、DML

DML(数据操纵语言):数据的增删改查

在数据库操作中,DML(Data Manipulation Language,数据操纵语言)是用于对数据库中的数据进行操作的语言。DML 主要包括数据的增删改查操作,即插入(INSERT)、删除(DELETE)、更新(UPDATE)和查询(SELECT)。以下是 DML 的详细说明和示例。

一、查询(SELECT)

查询操作用于从数据库中检索数据。以下是查询的基本语法:

```

SELECT * FROM 表名;

```

  • **解释**:查询表中的所有列和所有数据。

示例:查询 `employees` 表中的所有数据

```

SELECT * FROM employees;

```

查询特定列

```

SELECT 列名 FROM 表名;

```

  • **解释**:只查询表中的指定列。

示例:查询 `employees` 表中的 `first_name` 和 `salary` 列

```

SELECT first_name, salary FROM employees;

```

二、插入(INSERT)

插入操作用于向数据库表中添加新数据。以下是插入的基本语法:

1. 全列插入

```

INSERT INTO 表名 VALUES (列1, 列2, ...), (列1, 列2, ...), ...;

```

  • **解释**:向表中插入多行数据,每行数据包含所有列的值。

示例:向 `employees` 表中插入多行数据

```

INSERT INTO employees VALUES

(1, '张', '三', 1, '2024-01-01', 8000.00),

(2, '李', '四', 2, '2024-02-15', 9000.00);

```

2. 缺省插入

```

INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), ...;

```

  • **解释**:向表中插入多行数据,每行数据只包含指定列的值,其他列使用默认值或 NULL。

示例:向 `employees` 表中插入多行数据,只指定部分列

```

INSERT INTO employees (first_name, last_name, department_id, hire_date, salary) VALUES

('王五', '周', 2, '2024-07-10', 9500.00),

('赵六', '钱', 3, '2024-08-20', 10000.00);

```

3. 使用 `SET` 语法插入

```

INSERT INTO 表名 SET 列1 = 值1, 列2 = 值2, ...;

```

  • **解释**:向表中插入一行数据,指定列的值。

示例:向 `employees` 表中插入一行数据

```

INSERT INTO employees SET

first_name = '孙八',

last_name = '孙',

department_id = 1,

hire_date = '2024-09-01',

salary = 8500.00;

```

三、删除(DELETE)

删除操作用于从数据库表中删除数据。以下是删除的基本语法:

```

DELETE FROM 表名 WHERE 条件;

```

  • **解释**:删除表中满足指定条件的数据。

示例:删除 `employees` 表中 `employee_id` 为 4 的记录

```

DELETE FROM employees WHERE employee_id = 4;

```

  • **注意**:删除操作是不可逆的,执行前请确保条件正确,避免误删数据。

四、修改(UPDATE)

修改操作用于更新数据库表中的数据。以下是修改的基本语法:

```

UPDATE 表名 SET 列1 = 值1, 列2 = 值2, ... WHERE 条件;

```

  • **解释**:更新表中满足指定条件的记录,将指定列的值修改为新值。

示例:将 `employees` 表中 `employee_id` 为 2 的记录的 `salary` 修改为 11000.00

```

UPDATE employees SET salary = 11000.00 WHERE employee_id = 2;

```

  • **注意**:修改操作会立即更新数据,执行前请确保条件和修改内容正确。

五、总结

DML 语句是数据库操作中常用的语句,用于对数据进行增删改查操作。通过合理使用 DML 语句,可以有效地管理和操作数据库中的数据。在实际应用中,根据具体需求选择合适的 DML 语句,确保数据的准确性和完整性。

五、DCL

# DCL(数据控制语言):用户与权限管理

在数据库管理中,DCL(Data Control Language,数据控制语言)用于管理用户和权限。通过 DCL 语句,可以创建用户、修改密码、删除用户,以及分配和取消权限。以下是 DCL 的详细说明和示例。

一、用户管理

1. 创建用户

```

CREATE USER '用户名'@'%' IDENTIFIED BY '密码';

```

  • **解释**:创建一个新用户,`用户名` 是用户的名称,`%` 表示用户可以从任何主机连接,`密码` 是用户的登录密码。

示例:创建用户 `temp`

```

CREATE USER 'temp'@'%' IDENTIFIED BY '123456';

```

2. 修改密码

```

ALTER USER '用户名'@'%' IDENTIFIED BY '新密码';

```

  • **解释**:修改指定用户的密码,`新密码` 是用户的新的登录密码。

示例:修改用户 `temp` 的密码

```

ALTER USER 'temp'@'%' IDENTIFIED BY '654321';

```

3. 删除用户

```

DROP USER '用户名'@'%';

```

  • **解释**:删除指定用户。

示例:删除用户 `temp`

```

DROP USER 'temp'@'%';

```

二、权限管理

1. 查看权限

```

SHOW GRANTS FOR '用户名'@'%';

```

  • **解释**:查看指定用户的权限。

示例:查看用户 `temp` 的权限

```

SHOW GRANTS FOR 'temp'@'%';

```

2. 分配权限

(1)列权限

```

GRANT SELECT, UPDATE(列名) ON 数据库.表 TO '用户名'@'%';

```

  • **解释**:授予用户对指定列的权限,如 SELECT 和 UPDATE。

示例:授予用户 `temp` 对 `employees` 表的 `salary` 列的 SELECT 和 UPDATE 权限

```

GRANT SELECT, UPDATE(salary) ON employees.employees TO 'temp'@'%';

```

(2)表权限

```

GRANT SELECT, UPDATE, DELETE, INSERT ON 数据库.表 TO '用户名'@'%';

```

  • **解释**:授予用户对指定表的权限,如 SELECT、UPDATE、DELETE 和 INSERT。

示例:授予用户 `temp` 对 `employees` 表的所有权限

```

GRANT SELECT, UPDATE, DELETE, INSERT ON employees.employees TO 'temp'@'%';

```

(3)数据库权限

```

GRANT SELECT, UPDATE, DELETE, INSERT ON 数据库.* TO '用户名'@'%';

```

  • **解释**:授予用户对指定数据库中所有表的权限,如 SELECT、UPDATE、DELETE 和 INSERT。

示例:授予用户 `temp` 对 `employees` 数据库中所有表的所有权限

```

GRANT SELECT, UPDATE, DELETE, INSERT ON employees.* TO 'temp'@'%';

```

(4)全局权限

```

GRANT ALL ON *.* TO '用户名'@'%';

```

  • **解释**:授予用户对所有数据库和表的全部权限。

示例:授予用户 `temp` 全局权限

```

GRANT ALL ON *.* TO 'temp'@'%';

```

3. 取消权限

```

REVOKE 权限 ON 数据库.表 FROM '用户名'@'%';

```

  • **解释**:取消用户对指定对象的权限。

示例:取消用户 `temp` 对 `employees` 表的 SELECT 和 UPDATE 权限

```

REVOKE SELECT, UPDATE ON employees.employees FROM 'temp'@'%';

```

三、总结

DCL 语句是数据库管理中用于用户和权限管理的重要工具。通过合理使用 DCL 语句,可以有效地控制用户对数据库的访问权限,确保数据库的安全性和完整性。在实际应用中,根据具体需求分配和取消权限,可以提高数据库的安全性和可维护性。

六、外键

# 外键约束:确保数据完整性的强大工具

在数据库设计中,外键(Foreign Key)约束是一种用于确保数据完整性的机制。通过外键约束,可以建立表与表之间的关联关系,确保数据的一致性和准确性。本文将详细介绍外键的基本概念、创建方法、以及在删除或更新操作中的行为。

一、外键的基本概念

外键是一个表中的列或列的组合,它引用了另一个表的主键列或唯一键列。通过外键约束,可以确保在一个表中引用的值在另一个表中是存在的。例如,在一个学校管理系统中,`student` 表中可能有一个 `teacher_id` 列,该列引用了 `teacher` 表中的 `teacher_id` 列。这样,通过外键约束,可以确保 `student` 表中的 `teacher_id` 值在 `teacher` 表中是存在的。

二、创建表时设置外键

在创建表时,可以通过 `CONSTRAINT` 关键字设置外键约束。以下是一个示例:

```

CREATE TABLE student (

student_id INT PRIMARY KEY AUTO_INCREMENT,

student_name VARCHAR(50),

teacher_id INT,

CONSTRAINT fk_teacher_id FOREIGN KEY (teacher_id) REFERENCES teacher(teacher_id) ON UPDATE CASCADE ON DELETE CASCADE

);

```

  • **解释**:

  • `CONSTRAINT fk_teacher_id`:定义外键约束的名称,通常命名为 `fk_` 加上引用的列名,例如 `fk_teacher_id`。

  • `FOREIGN KEY (teacher_id)`:指定 `teacher_id` 列为外键列。

  • `REFERENCES teacher(teacher_id)`:指定外键列引用的表和列,即 `teacher` 表的 `teacher_id` 列。

  • `ON UPDATE CASCADE`:当引用的主键值更新时,级联更新外键列的值。

  • `ON DELETE CASCADE`:当引用的主键值删除时,级联删除外键列的记录。

三、创建表之后添加外键

如果在创建表时没有设置外键约束,可以在之后通过 `ALTER TABLE` 语句添加外键约束。以下是一个示例:

```

ALTER TABLE student

ADD CONSTRAINT fk_teacher_id FOREIGN KEY (teacher_id) REFERENCES teacher(teacher_id);

```

  • **解释**:

  • `ALTER TABLE student`:指定要修改的表为 `student` 表。

  • `ADD CONSTRAINT fk_teacher_id`:添加名为 `fk_teacher_id` 的外键约束。

  • `FOREIGN KEY (teacher_id)`:指定 `teacher_id` 列为外键列。

  • `REFERENCES teacher(teacher_id)`:指定外键列引用的表和列,即 `teacher` 表的 `teacher_id` 列。

四、删除外键

如果需要删除外键约束,可以使用 `ALTER TABLE` 语句。以下是一个示例:

```

ALTER TABLE student

DROP FOREIGN KEY fk_teacher_id;

```

  • **解释**:

  • `ALTER TABLE student`:指定要修改的表为 `student` 表。

  • `DROP FOREIGN KEY fk_teacher_id`:删除名为 `fk_teacher_id` 的外键约束。

五、删除或更新操作中的行为

在外键约束中,可以指定在删除或更新引用的主键值时的行为。以下是常见的行为选项:

1. RESTRICT(默认行为)

  • **解释**:当尝试删除或更新引用的主键值时,如果存在依赖的外键记录,操作将被拒绝。

  • **示例**:如果在 `teacher` 表中删除一个 `teacher_id`,而 `student` 表中存在引用该 `teacher_id` 的记录,则删除操作将被拒绝。

2. CASCADE

  • **解释**:当删除或更新引用的主键值时,依赖的外键记录将被级联删除或更新。

  • **示例**:如果在 `teacher` 表中删除一个 `teacher_id`,而 `student` 表中存在引用该 `teacher_id` 的记录,则这些记录将被级联删除。

六、总结

外键约束是数据库设计中确保数据完整性的重要工具。通过合理使用外键约束,可以建立表与表之间的关联关系,确保数据的一致性和准确性。在实际应用中,根据具体需求选择合适的外键约束行为(如 RESTRICT 或 CASCADE),可以有效地管理数据的删除和更新操作。

七、查询语句

查询语句:SQL 中的强大工具

在数据库操作中,查询语句(SQL)是用于从数据库中检索数据的基本工具。通过查询语句,可以实现各种复杂的数据检索需求,包括查询所有数据、按条件查询、排序、去重、模糊查询以及使用聚合函数等。以下是查询语句的详细说明和示例。

一、查询表中所有数据

1. 查询表中所有数据

```sql

SELECT * FROM employees;

```

  • **解释**:查询 `employees` 表中的所有数据,`*` 表示选择所有列。

二、按条件查询

2. 按条件查询

```sql

SELECT first_name, last_name FROM employees WHERE department_id = 2;

```

  • **解释**:查询 `employees` 表中 `department_id` 为 2 的员工的 `first_name` 和 `last_name`。

三、按某一列排序

3. 按某一列排序

```sql

SELECT first_name, salary FROM employees ORDER BY salary DESC;

```

  • **解释**:

  • `ASC`:升序(默认),按某一列的值从小到大排序。

  • `DESC`:降序,按某一列的值从大到小排序。

  • 示例中按 `salary` 列降序排列,显示 `first_name` 和 `salary`。

四、查询去重值

4. 查询去重值

```sql

SELECT DISTINCT department_id FROM employees;

```

  • **解释**:查询 `employees` 表中所有唯一的 `department_id`。

五、使用通配符模糊查询

5. 使用通配符模糊查询

```sql

SELECT * FROM employees WHERE first_name LIKE '张%';

```

  • **解释**:

  • `%`:表示任意字符序列,可以是零个或多个字符。

  • `_`:表示任意单个字符。

  • 示例中查询 `first_name` 以 `张` 开头的所有员工。

六、聚合函数

聚合函数用于对一组值进行计算并返回单个值。以下是常用的聚合函数及其示例。

1. COUNT(*)

  • **解释**:统计查询结果中的记录行数。如果需要统计特定列中的非空值的记录数,可以使用 `COUNT(column_name)`;如果需要统计所有行(包括 NULL 值),则应使用 `COUNT(*)`。

示例:统计 `employees` 表中的所有记录数

```sql

SELECT COUNT(*) FROM employees;

```

2. SUM()

  • **解释**:计算数值列的总和。

示例:计算 `employees` 表中 `salary` 列的总和

```sql

SELECT SUM(salary) FROM employees;

```

3. AVG()

  • **解释**:计算数值列的平均值。

示例:计算 `employees` 表中 `salary` 列的平均值

```sql

SELECT AVG(salary) FROM employees;

```

4. MAX()

  • **解释**:返回数值列的最大值。

示例:返回 `employees` 表中 `salary` 列的最大值

```sql

SELECT MAX(salary) FROM employees;

```

5. MIN()

  • **解释**:返回数值列的最小值。

示例:返回 `employees` 表中 `salary` 列的最小值

```sql

SELECT MIN(salary) FROM employees;

```

七、GROUP BY

1. GROUP BY

  • **解释**:用于将数据按照某一列或多列进行分组,通常与聚合函数搭配使用。

示例:按 `department_id` 分组,计算每个部门的员工数量和平均薪水

```sql

SELECT department_id, COUNT(*) AS employee_count, AVG(salary) AS average_salary

FROM employees

GROUP BY department_id;

```

  • **解释**:

  • `GROUP BY department_id`:按 `department_id` 列进行分组。

  • `COUNT(*) AS employee_count`:计算每个部门的员工数量。

  • `AVG(salary) AS average_salary`:计算每个部门的平均薪水。

八、HAVING

1. HAVING

  • **解释**:用于过滤分组后的结果,类似于 `WHERE`,但 `HAVING` 用于聚合后的结果。

示例:按 `department_id` 分组,计算每个部门的员工数量和平均薪水,只显示员工数量大于 5 的部门

```sql

SELECT department_id, COUNT(*) AS employee_count, AVG(salary) AS average_salary

FROM employees

GROUP BY department_id

HAVING employee_count > 5;

```

  • **解释**:

  • `HAVING employee_count > 5`:过滤分组后的结果,只显示员工数量大于 5 的部门。

九、常用函数集合

1. 字符串函数

  • `LENGTH(string)`:返回字符串的长度。

  • `UPPER(string)`:将字符串转换为大写。

  • `LOWER(string)`:将字符串转换为小写。

  • `CONCAT(string1, string2, ...)`:连接多个字符串。

  • `SUBSTRING(string, start, length)`:从字符串的指定位置开始,提取指定长度的子字符串。

2. 数学函数

  • `ROUND(number, decimal_places)`:将数字四舍五入到指定的小数位数。

  • `CEIL(number)`:返回大于或等于指定数字的最小整数。

  • `FLOOR(number)`:返回小于或等于指定数字的最大整数。

  • `ABS(number)`:返回数字的绝对值。

  • `SQRT(number)`:返回数字的平方根。

3. 日期和时间函数

  • `NOW()`:返回当前日期和时间。

  • `CURDATE()`:返回当前日期。

  • `CURTIME()`:返回当前时间。

  • `DATE_ADD(date, INTERVAL expr)`:在日期上添加指定的时间间隔。

  • `DATE_SUB(date, INTERVAL expr)`:在日期上减去指定的时间间隔。

十、总结

查询语句(SQL)是数据库操作中不可或缺的一部分,通过灵活使用各种查询语句和函数,可以实现复杂的数据检索和分析需求。在实际应用中,根据具体需求选择合适的查询语句和函数,可以提高数据检索的效率和准确性。

八、数据类型

数据类型总结

一、基础数据类型

  1. **整数(int)**
  • Python 中的整数可以是正数、负数或零,没有大小限制。

  • 示例:`x = 10`

  1. **浮点数(float)**
  • 浮点数用于表示小数,支持科学计数法。

  • 示例:`y = 3.14`,`z = 1.2e-3`

  1. **字符串(str)**
  • 字符串是字符的序列,可以用单引号、双引号或三引号定义。

  • 示例:`name = "Alice"`

  1. **布尔值(bool)**
  • 布尔值只有两个可能的值:`True` 和 `False`。

  • 示例:`is_valid = True`

  1. **None 类型(None)**
  • None 是一个特殊的值,表示"空"或"无"。

  • 示例:`result = None`

二、容器数据类型

  1. **列表(list)**
  • 列表是一种有序集合,可以包含不同类型的元素。

  • 示例:`numbers = [1, 2, 3, 4, 5]`

  1. **元组(tuple)**
  • 元组是不可变的有序集合,用于存储固定的数据。

  • 示例:`point = (3, 4)`

  1. **字典(dict)**
  • 字典是键值对的集合,用于存储任意类型的数据。

  • 示例:`person = {"name": "Bob", "age": 25}`

  1. **集合(set)**
  • 集合是无序且不重复的元素集合,用于数学运算。

  • 示例:`fruits = {"apple", "banana", "orange"}`

MySQL 数据类型总结

一、数字类型

  1. **整数类型**
  • **TINYINT**:1 个字节,范围 -128 ~ 127(有符号),0 ~ 255(无符号)

  • **SMALLINT**:2 个字节,范围 -32768 ~ 32767(有符号),0 ~ 65535(无符号)

  • **MEDIUMINT**:3 个字节,范围 -8388608 ~ 8388607(有符号),0 ~ 16777215(无符号)

  • **INT**:4 个字节,范围 -2147483648 ~ 2147483647(有符号),0 ~ 4294967295(无符号)

  • **BIGINT**:8 个字节,范围 -9223372036854775808 ~ 9223372036854775807(有符号),0 ~ 18446744073709551615(无符号)

  1. **浮点数类型**
  • **FLOAT**:4 个字节,单精度浮点数

  • **DOUBLE**:8 个字节,双精度浮点数

  1. **高精度小数类型(DECIMAL)**
  • **DECIMAL(M, D)**:可以精确地表示固定点数,其中 `M` 是整数和小数的总位数,`D` 是小数位数。

  • 示例:`salary DECIMAL(10, 2)` 表示可以存储最多 10 位数字,其中 2 位是小数。

二、字符串类型

  1. **固定长度字符串(CHAR)**
  • **CHAR(N)**:固定长度的字符串类型,最多可以存储 `N` 个字符。

  • 示例:`name CHAR(50)` 表示该字段最多存储 50 个字符。

  1. **可变长度字符串(VARCHAR)**
  • **VARCHAR(N)**:可变长度的字符串类型,最多可以存储 `N` 个字符。

  • 示例:`description VARCHAR(255)` 表示该字段最多存储 255 个字符。

  1. **文本类型(TEXT)**
  • **TEXT**:用于存储大量文本数据。

  • 示例:`content TEXT` 用于存储文章内容。

  1. **枚举类型(ENUM)**
  • **ENUM**:用于定义一组有限的值,这些值必须在列创建时指定。

  • 示例:`gender ENUM('男', '女', '保密') DEFAULT '保密'` 定义了一个性别字段,其可能的值只能是 `男`、`女` 或 `保密`。

三、时间与日期类型

  1. **DATE**
  • 日期类型,格式为 `YYYY-MM-DD`。

  • 示例:`birth_date DATE` 用于存储日期。

  1. **DATETIME**
  • 日期和时间类型,格式为 `YYYY-MM-DD HH:MM:SS`。

  • 示例:`create_time DATETIME` 用于存储日期和时间。

  1. **TIMESTAMP**
  • 时间戳类型,格式为 `YYYY-MM-DD HH:MM:SS`,可以自动更新为当前时间。

  • 示例:`regist_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP` 定义了一个注册时间字段,默认值为当前时间。

  1. **TIME**
  • 时间类型,格式为 `HH:MM:SS`。

  • 示例:`duration TIME` 用于存储时间。

四、布尔值类型

  • 在 MySQL 中没有专门的布尔类型,通常使用 `TINYINT` 类型来表示布尔值,其中 `0` 表示假(False),`1` 表示真(True)。

  • 示例:`is_active TINYINT` 可以用作布尔类型。

五、二进制类型

  1. **BLOB**
  • **BLOB** 用于存储二进制数据,如图片、音频文件等。

  • 示例:`photo BLOB` 用于存储照片。

  1. **BIT**
  • **BIT(N)** 表示比特位,可以存储二进制数据,最多 `N` 位。

  • 示例:`flags BIT(8)` 用于存储 8 位的比特数据。

总结

  • **Python** 数据类型涵盖了基本数据类型和容器数据类型,提供了丰富的数据表示方式。

  • **MySQL** 数据类型用于定义数据库表中列的属性,包括数字类型、字符串类型、时间与日期类型等,每种类型都有其特定的用途和存储方式。

  • 在实际开发中,根据数据的性质和需求选择合适的数据类型,可以提高数据存储和查询的效率。

九、扩展知识

一、表关系

表关系是数据库设计中的基础概念,它描述了不同表之间的关联方式。常见的表关系包括一对一、一对多和多对多。

1.1 一对一关系

在一对一关系中,两个表通过一个外键字段相互关联,每个表中的一条记录只能对应另一个表中的一条记录。例如,员工表和身份证表之间的一对一关系。员工表中可以包含一个"身份证号"字段,作为外键关联到身份证表的主键。

1.2 一对多关系

一对多关系是最常见的一种表关系,一个表中的一条记录可以对应另一个表中的多条记录。例如,用户表和收货地址表之间的一对多关系。用户表中的每个用户可以有多个收货地址,收货地址表中通过一个外键字段关联到用户表的主键。

1.3 多对多关系

多对多关系需要通过一个中间表来实现,中间表包含两个相关表的外键。例如,顾客和商品之间通过订单表建立多对多关系。订单表中包含顾客的外键和商品的外键,从而实现顾客和商品之间的关联。

二、视图

视图是一种虚拟表,其内容由查询定义。视图可以简化复杂的查询,提供数据的逻辑抽象,并且可以作为数据库安全机制的一部分。

2.1 示例

sql复制

复制代码
CREATE VIEW vue_students AS
SELECT name, age FROM students WHERE gender = 'male';

该视图从学生表中筛选出性别为男的学生的姓名和年龄信息,用户可以通过视图来查询数据,而无需关心底层表的结构。

三、函数与存储过程

函数和存储过程是数据库中的重要编程工具,用于实现复杂的业务逻辑。

3.1 函数

函数用于执行特定的计算并返回一个值。例如,SELECT database(), user(), version(), now(), currentdate(); 是一些内置函数的示例。

3.2 存储过程

存储过程是一组预编译的 SQL 语句,用于执行复杂的任务。例如,以下是一个更新员工工资的存储过程:

sql复制

复制代码
DELIMITER //
CREATE PROCEDURE update_salary(
    IN employee_id INT,
    IN new_salary DECIMAL(10, 2)
)
BEGIN
    UPDATE employees
    SET salary = new_salary
    WHERE id = employee_id;
END //
DELIMITER ;

通过调用存储过程 CALL update_salary(1, 9000);,可以更新指定员工的工资。

四、索引

索引是提高数据库查询性能的关键技术。以下是一些常见的索引类型和方法。

4.1 索引类型

  • 主键索引:基于表的主键创建的索引。

  • 唯一索引:确保索引列中的值是唯一的。

  • 普通索引:最常用的索引,没有唯一性限制。

  • 联合索引:基于多个列创建的索引。

  • 全文本索引:用于全文搜索。

4.2 常见的方法

  • B 树索引:适用于范围查询和排序。

  • 哈希索引:适用于精确匹配查询。

五、存储引擎

存储引擎是 MySQL 用于处理数据存储和检索的核心组件。以下是一些常见的存储引擎。

5.1 InnoDB

  • 特点:支持外键、事务和行级锁。

  • 适用场景:适用于需要高可靠性和事务支持的场景。

5.2 MyISAM

  • 特点:不支持事务,查询性能较好。

  • 适用场景:适用于以读操作为主的场景。

六、事务

事务是数据库中的一个重要概念,用于确保数据的一致性和完整性。事务需要满足 ACID 原则。

6.1 ACID 原则

  • 原子性:事务中的所有操作要么全部成功,要么全部失败。

  • 一致性:事务执行前后数据库的状态保持一致。

  • 隔离性:事务之间的执行相互隔离。

  • 持久性:事务一旦提交,其结果是永久的。

十、Pymysql使用

pymysql 是一个用于与 MySQL 数据库交互的 Python 库。以下是使用 pymysql 进行数据库操作的示例。

python 复制代码
# 2. 数据库连接

import pymysql

# 数据库连接配置
db_config = {
    "host": "localhost",
    "user": "root",
    "password": "123456",
    "database": "python2412",
    "port": 3306,
    "charset": "utf8mb4"
}

# 建立连接
connection = pymysql.connect()
try:
    # 创建表
    create_table_sql = """
    CREATE TABLE IF NOT EXISTS users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50) NOT NULL,
        age INT,
        email VARCHAR(100)
    )
    """
    with connection.cursor() as cursor:
        cursor.execute(create_table_sql)
        print("表创建成功!")
#
    # 插入数据
    insert_sql = "INSERT INTO users (name, age, email) VALUES (%s, %s, %s)"
    data = ("Alice", 25, "[email protected]")
    with connection.cursor() as cursor:
        cursor.execute(insert_sql, data)
        connection.commit()
        print("数据插入成功!")
#
    # 查询数据
    select_sql = "SELECT id, name, age, email FROM users"
    with connection.cursor() as cursor:
        cursor.execute(select_sql)
        result = cursor.fetchall()
        print("查询结果:")
        for row in result:
            print(row)
#
    # 更新数据
    update_sql = "UPDATE users SET age = %s WHERE name = %s"
    data = (26, "Alice")
    with connection.cursor() as cursor:
        cursor.execute(update_sql, data)
        connection.commit()
        print("数据更新成功!")
#
    # 删除数据
    delete_sql = "DELETE FROM users WHERE name = %s"
    data = ("Alice",)
    with connection.cursor() as cursor:
        cursor.execute(delete_sql, data)
        connection.commit()
        print("数据删除成功!")
#
finally:
    # 关闭数据库连接
    connection.close()
#
相关推荐
JavaGuide8 小时前
公司来的新人用字符串存储日期,被组长怒怼了...
后端·mysql
用户27784491049939 小时前
借助DeepSeek智能生成测试用例:从提示词到Excel表格的全流程实践
人工智能·python
怒放吧德德10 小时前
MySQL篇:MySQL主从集群同步延迟问题
后端·mysql·面试
数据智能老司机11 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
JavaEdge在掘金11 小时前
ssl.SSLCertVerificationError报错解决方案
python
Eip不易也不e12 小时前
教程之同时安装两个版本的 mysql
mysql
数据智能老司机12 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
我不会编程55512 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
松果猿12 小时前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
老歌老听老掉牙12 小时前
平面旋转与交线投影夹角计算
python·线性代数·平面·sympy