销售网站平台搭建,网站的做公司,云服务器推荐,一个服务器怎么做两个网站一、Win10 与Ubuntu安装
以下是一篇针对 Ubuntu 安装 MySQL 的过程中写的示例#xff1a;
---
# Ubuntu 安装 MySQL 详细指南
在本教程中#xff0c;我们将向您展示如何在 Ubuntu 上安装 MySQL#xff0c;并完成基本的安全配置。以下是具体步骤#xff1a;
# 1. 安装 …一、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 客户端连接 MySQL 数据库
### 1. 启动 Navicat 客户端 双击 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 查询语句并点击“运行”按钮查看查询结果。 - **管理表**右键点击数据库或表可以创建、修改、删除表以及导入和导出数据。
## 三、使用 Navicat 的小贴士
- **优化连接设置**在连接属性中您可以设置字符集、连接超时、SSL 等选项以优化连接性能和安全性。 - **管理数据和对象**Navicat 提供了丰富的数据和对象管理功能如数据编辑器、架构设计工具、数据导出和导入工具等方便您进行数据库开发和维护工作。 - **备份和恢复数据库**Navicat 的“数据传输”功能可以帮助您轻松备份和恢复数据库。您可以将数据从一个数据库传输到另一个数据库或者导出数据为 SQL 脚本文件。
## 四、总结 Navicat 是一个非常实用的数据库管理工具可以帮助您高效地管理和操作 MySQL 数据库。通过以上步骤您可以轻松地使用 Navicat 客户端连接 MySQL 数据库并进行各种操作。如果您遇到任何问题或需要进一步的帮助请随时联系我。
三、DDL
表相关的 DDL 操作详解
在数据库管理中表是存储数据的基本结构。通过 DDLData 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数据操纵语言数据的增删改查
在数据库操作中DMLData 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数据控制语言用户与权限管理
在数据库管理中DCLData 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
2. **浮点数float** - 浮点数用于表示小数支持科学计数法。 - 示例y 3.14z 1.2e-3
3. **字符串str** - 字符串是字符的序列可以用单引号、双引号或三引号定义。 - 示例name Alice
4. **布尔值bool** - 布尔值只有两个可能的值True 和 False。 - 示例is_valid True
5. **None 类型None** - None 是一个特殊的值表示“空”或“无”。 - 示例result None
### 二、容器数据类型
1. **列表list** - 列表是一种有序集合可以包含不同类型的元素。 - 示例numbers [1, 2, 3, 4, 5]
2. **元组tuple** - 元组是不可变的有序集合用于存储固定的数据。 - 示例point (3, 4)
3. **字典dict** - 字典是键值对的集合用于存储任意类型的数据。 - 示例person {name: Bob, age: 25}
4. **集合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无符号
2. **浮点数类型** - **FLOAT**4 个字节单精度浮点数 - **DOUBLE**8 个字节双精度浮点数
3. **高精度小数类型DECIMAL** - **DECIMAL(M, D)**可以精确地表示固定点数其中 M 是整数和小数的总位数D 是小数位数。 - 示例salary DECIMAL(10, 2) 表示可以存储最多 10 位数字其中 2 位是小数。
### 二、字符串类型
1. **固定长度字符串CHAR** - **CHAR(N)**固定长度的字符串类型最多可以存储 N 个字符。 - 示例name CHAR(50) 表示该字段最多存储 50 个字符。
2. **可变长度字符串VARCHAR** - **VARCHAR(N)**可变长度的字符串类型最多可以存储 N 个字符。 - 示例description VARCHAR(255) 表示该字段最多存储 255 个字符。
3. **文本类型TEXT** - **TEXT**用于存储大量文本数据。 - 示例content TEXT 用于存储文章内容。
4. **枚举类型ENUM** - **ENUM**用于定义一组有限的值这些值必须在列创建时指定。 - 示例gender ENUM(男, 女, 保密) DEFAULT 保密 定义了一个性别字段其可能的值只能是 男、女 或 保密。
### 三、时间与日期类型
1. **DATE** - 日期类型格式为 YYYY-MM-DD。 - 示例birth_date DATE 用于存储日期。
2. **DATETIME** - 日期和时间类型格式为 YYYY-MM-DD HH:MM:SS。 - 示例create_time DATETIME 用于存储日期和时间。
3. **TIMESTAMP** - 时间戳类型格式为 YYYY-MM-DD HH:MM:SS可以自动更新为当前时间。 - 示例regist_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP 定义了一个注册时间字段默认值为当前时间。
4. **TIME** - 时间类型格式为 HH:MM:SS。 - 示例duration TIME 用于存储时间。
### 四、布尔值类型
- 在 MySQL 中没有专门的布尔类型通常使用 TINYINT 类型来表示布尔值其中 0 表示假False1 表示真True。 - 示例is_active TINYINT 可以用作布尔类型。
### 五、二进制类型
1. **BLOB** - **BLOB** 用于存储二进制数据如图片、音频文件等。 - 示例photo BLOB 用于存储照片。
2. **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)
)
BEGINUPDATE employeesSET salary new_salaryWHERE 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 进行数据库操作的示例。
# 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, aliceexample.com)with connection.cursor() as cursor:cursor.execute(insert_sql, data)connection.commit()print(数据插入成功)
## 查询数据select_sql SELECT id, name, age, email FROM userswith 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 %sdata (26, Alice)with connection.cursor() as cursor:cursor.execute(update_sql, data)connection.commit()print(数据更新成功)
## 删除数据delete_sql DELETE FROM users WHERE name %sdata (Alice,)with connection.cursor() as cursor:cursor.execute(delete_sql, data)connection.commit()print(数据删除成功)
#
finally:# 关闭数据库连接connection.close()
#