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, "alice@example.com")
    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()
#
相关推荐
守城小轩23 分钟前
Chromium 136 编译指南 - Android 篇:开发工具安装(三)
android·数据库·redis
尽兴-28 分钟前
如何将多个.sql文件合并成一个:Windows和Linux/Mac详细指南
linux·数据库·windows·sql·macos
Deng94520131428 分钟前
基于Python的旅游数据可视化应用
python·numpy·pandas·旅游·数据可视化技术
2401_8786247931 分钟前
pytorch 自动微分
人工智能·pytorch·python·机器学习
胖达不服输34 分钟前
「日拱一码」021 机器学习——特征工程
人工智能·python·机器学习·特征工程
小小不董1 小时前
深入理解oracle ADG和RAC
linux·服务器·数据库·oracle·dba
胚芽鞘6811 小时前
查询依赖冲突工具maven Helper
java·数据库·maven
screenCui2 小时前
macOS运行python程序遇libiomp5.dylib库冲突错误解决方案
开发语言·python·macos
小眼睛羊羊2 小时前
pyinstaller打包paddleocr
python
宇钶宇夕2 小时前
SIMATIC S7-1200的以太网通信能力:协议与资源详细解析
运维·服务器·数据库·程序人生·自动化