mysql 函数切割机_MySQL 函数

本文通过具体的示例展示了如何在Oracle与MySQL数据库中进行数据定义与操作,包括建表、插入数据、使用数学与字符串函数等。此外还介绍了日期函数及数据类型的转换方法。

红色标题 TAG 中附有 ORACLE 特殊语句,与 MySQL 中的语句书写方法略有不同

建表语句

PS:NUMERIC 是大多数 DBMS 都支持的一种数据类型,通过 NUMBERIC ( 全体位数 , 小数位数 ) 的形式来指定数值的大小。

-- DDL :创建表

CREATE TABLE SampleMath

(m NUMERIC (10,3),

n INTEGER,

p INTEGER);

-- NUMERIC(10,3) 和 DECIMAL(10,3) 是等效的, 即 10个有效位数字,3个小数位数字

INSERT INTO SampleMath(m, n, p) VALUES (500, 0, NULL);

INSERT INTO SampleMath(m, n, p) VALUES (-180, 0, NULL);

INSERT INTO SampleMath(m, n, p) VALUES (NULL, NULL, NULL);

INSERT INTO SampleMath(m, n, p) VALUES (NULL, 7, 3);

INSERT INTO SampleMath(m, n, p) VALUES (NULL, 5, 2);

INSERT INTO SampleMath(m, n, p) VALUES (NULL, 4, NULL);

INSERT INTO SampleMath(m, n, p) VALUES (8, NULL, 3);

INSERT INTO SampleMath(m, n, p) VALUES (2.27, 1, NULL);

INSERT INTO SampleMath(m, n, p) VALUES (5.555,2, NULL);

INSERT INTO SampleMath(m, n, p) VALUES (NULL, 1, NULL);

INSERT INTO SampleMath(m, n, p) VALUES (8.76, NULL, NULL);

-- DDL :创建表

CREATE TABLE SampleStr

(str1 VARCHAR(40),

str2 VARCHAR(40),

str3 VARCHAR(40);

INSERT INTO SampleStr (str1, str2, str3) VALUES ('opx','rt',NULL);

INSERT INTO SampleStr (str1, str2, str3) VALUES ('abc','def' ,NULL);

INSERT INTO SampleStr (str1, str2, str3) VALUES ('山田','太郎' ,'是我');

INSERT INTO SampleStr (str1, str2, str3) VALUES ('aaa',NULL ,NULL);

INSERT INTO SampleStr (str1, str2, str3) VALUES (NULL,'xyz',NULL);

INSERT INTO SampleStr (str1, str2, str3) VALUES ('@!#$%',NULL,NULL);

INSERT INTO SampleStr (str1, str2, str3) VALUES ('ABC',NULL,NULL);

INSERT INTO SampleStr (str1, str2, str3) VALUES ('aBC',NULL,NULL);

INSERT INTO SampleStr (str1, str2, str3) VALUES ('abc太郎','abc','ABC');

INSERT INTO SampleStr (str1, str2, str3) VALUES ('abcdefabc','abc','ABC');

INSERT INTO SampleStr (str1, str2, str3) VALUES ('micmic','i','I');

绝对值函数 ABS()

-- 获取 m 的绝对值 m_abs

select m,

abs(m) as m_abs

from samplemath;

求余函数 MOD()

-- n % p 也可以获得结果(SQL-Server 中只支持这种用法)

select n,

p,

mod(n, p)

FROM samplemath;

大小写转换函数 LOWER() & UPPER()

-- 将 str 字符串全部转成小写

SELECT str1,LOWER(str1) FROM samplestr;

-- 将 str 字符串全部转成大写

SELECT str1,UPPER(str1) FROM samplestr;

计算字符串长度函数 LENGTH()

-- SQL-Server 中把 LENGTH 替换成 LEN

SELECT str1,LENGTH(str1) FROM samplestr;

替换字符串函数 REPLACE()

-- REPLACE(对象字符串,替换前的字符串,替换后的字符串)

SELECT str1,str2,str3,REPLACE(str1,str2,str3) AS str1_replace FROM samplestr;

-- 可以观察 ID = 9,10,11 的记录

-- 可以常量替换

SELECT str1,REPLACE(str1,"mic","wtf") AS str1_replace FROM samplestr;

字符串拼接函数 CONCAT() 和 ||

-- ORACLE PostGreSQL 中才能使用的语法

/*

SELECT str1, str2,

str1 || str2 AS str_concat

FROM SampleStr;

SELECT str1, str2, str3,

str1 || str2 || str3 AS str_concat

FROM SampleStr

WHERE str1 = '山田';

*/

-- SQL-SERVER 中可以使用的语法

/*

SELECT str1, str2, str3,

str1 + str2 + str3 AS str_concat

FROM SampleStr;

*/

-- MYSQL 中可以使用的语法

SELECT str1, str2, str3,

CONCAT(str1,str2,str3) AS str_concat

FROM SampleStr;

字符串切割函数 SUBSTRING() & SUBSTR()

-- SUBSTRING函数(PostgreSQL/MySQL专用语法)

-- SUBSTRING(对象字符串 FROM 截取的起始位置 FOR 截取的字符数)

SELECT str1,SUBSTRING(str1 FROM 3 FOR 2) AS str1_substring

from samplestr;

-- SQL Server 中写法做了简化

SELECT str1,

SUBSTRING(str1, 3, 2) AS sub_str

FROM SampleStr;

-- Oracle 中再次做了简化

SELECT str1,

SUBSTR(str1, 3, 2) AS sub_str

FROM SampleStr;

四舍五入函数 ROUND()

-- 针对 m 数字四舍五入到小数点后 n 位

-- ROUND(对象数值,保留小数的位数)

SELECT m,

n,

ROUND(m, n) AS m_round FROM samplemath;

日期函数 CURRENT_DATE/CURRENT_TIME/CURRENT_TIMESTAMP

-- 当前日期

SELECT CURRENT_DATE;

-- ORACLE 中需要指定临时表 DUAL

SELECT CURRENT_DATE FROM DUAL;

-- 当前时间

SELECT CURRENT_TIME;

-- ORACLE 中需要指定临时表 DUAL

SELECT CURRENT_TIME FROM DUAL;

-- CURRENT_TIMESTAMP 函数 = CURRENT_DATE + CURRENT_TIME

SELECT CURRENT_TIMESTAMP;

-- ORACLE 中需要指定临时表 DUAL

SELECT CURRENT_TIMESTAMP FROM DUAL;

日期切割函数 EXTRACT()

-- 使用 EXTRACT 函数可以截取出日期数据中的一部分,例如“年”“月”,或者“小时”“秒”等

-- 该函数的返回值并不是日期类型而是数值类型

SELECT CURRENT_TIMESTAMP,

EXTRACT(YEAR FROM CURRENT_TIMESTAMP) AS year,

EXTRACT(MONTH FROM CURRENT_TIMESTAMP) AS month,

EXTRACT(DAY FROM CURRENT_TIMESTAMP) AS day,

EXTRACT(HOUR FROM CURRENT_TIMESTAMP) AS hour,

EXTRACT(MINUTE FROM CURRENT_TIMESTAMP) AS minute,

EXTRACT(SECOND FROM CURRENT_TIMESTAMP) AS second;

-- 同样地, ORACLE 中需要指定临时表 DUAL

SELECT CURRENT_TIMESTAMP,

EXTRACT(YEAR FROM CURRENT_TIMESTAMP) AS year,

EXTRACT(MONTH FROM CURRENT_TIMESTAMP) AS month,

EXTRACT(DAY FROM CURRENT_TIMESTAMP) AS day,

EXTRACT(HOUR FROM CURRENT_TIMESTAMP) AS hour,

EXTRACT(MINUTE FROM CURRENT_TIMESTAMP) AS minute,

EXTRACT(SECOND FROM CURRENT_TIMESTAMP) AS second

FROM DUAL;

NULL 转换函数 COALESCE(),IFNULL(),NVL()

NULL 转换函数,即将值为 NULL 的值转换为指定值

COALESCE 函数在流行的 RDBMS 中都带有, IFNULL() 是 MySQL 自带的简化版函数,NVL 是 ORACLE 自带的简化版函数

-- COALESCE 函数会选择不是 NULL 的显示

SELECT COALESCE(NULL, 1) AS col_1,

COALESCE(NULL, 'test', NULL) AS col_2,

COALESCE(NULL, NULL, '2009-11-01') AS col_3;

-- 如果 str2 字段值为 NULL 那么将其置为 0

SELECT str2,COALESCE(str2,"0") AS str2_coalesce

FROM SampleStr;

-- 上一条语句可以用 IFNULL 函数替换

SELECT str2,IFNULL(str2,"0") AS str2_coalesce

FROM SampleStr;

-- 如果 str1 为 NULL 置为 str2,如果 str2 为 NULL 置为 str1,如果都为 NULL 置为 0

SELECT str1,str2,COALESCE(str1,str2,'0') AS str1_str2_coalesce

FROM SampleStr;

-- COALESCE 函数的逻辑是,CLALESCE(value1,value2,value3,....) 其中可以包含无限个值

-- 但是会获取第一个非 NULL 的值作为该函数的返回值

-- 相比 IFNULL 函数,COALESCE 函数的可用性更强,但 IFNULL 函数更加简化

-- ORACLE 中与 IFNULL 函数相对应的是 NVL 函数

类型转换函数 CAST()

-- SQL Server PostgreSQL

-- SELECT CAST('0001' AS INTEGER) AS int_col;

-- MySQL 需要加 SIGNED

SELECT CAST('0001' AS SIGNED INTEGER) AS int_col;

-- Oracle

-- SELECT CAST('0001' AS INTEGER) AS int_col FROM DUAL;

-- SQL Server PostgreSQL MySQL

SELECT CAST('2009-12-14' AS DATE) AS date_col;

-- Oracle

SELECT CAST('2009-12-14' AS DATE) AS date_col

FROM DUAL;

<think> 我们根据用户要求,使用PyCharm作为开发工具,结合Python(Flask框架)和MySQL数据库,制定一个14天的后端开发学习计划。 计划涵盖:功能开发、数据库操作、API接口构建及其他相关内容(如调试、测试、部署等)。 注意:每天的学习目标具体明确,结合PyCharm的使用。 参考引用: [1] 提到了使用Python+Flask开发RESTful API,MySQL数据库,PyCharm作为IDE -> 这将作为我们技术栈的基础。 [2] 提到了Django,但我们这里采用Flask(因为引用[1]明确使用Flask),但数据库操作部分可参考MySQL。 [3] 提到了开发工具,其中PyCharm是重点,我们将利用PyCharm的功能(如调试、数据库工具等)。 [4] 关于灾难恢复,我们可以在后续学习中简单涉及(如数据库备份),但14天计划中不作为重点。 14天计划如下: **第1天:环境搭建与PyCharm基础** - 学习目标:安装Python、PyCharm、MySQL;配置PyCharm项目环境。 - 具体内容: 1. 安装Python并配置环境变量。 2. 安装PyCharm(社区版即可),学习创建项目、配置Python解释器。 3. 安装MySQL数据库,学习基本配置(root密码等)。 4. 在PyCharm中配置数据库连接(使用Database工具窗口)。 5. 创建虚拟环境(venv)并激活。 - 实践任务:创建一个名为`backend_learning`的PyCharm项目,并成功连接本地MySQL。 **第2天:Flask基础与第一个API** - 学习目标:使用Flask创建简单的Web应用,编写第一个API接口。 - 具体内容: 1. 安装Flask:`pip install flask`。 2. 编写最小Flask应用:`app.py`,运行并访问。 3. 创建第一个路由:`/`返回"Hello World"。 4. 创建第二个路由:`/api/greet`,返回JSON格式的问候语(如`{"message": "Good morning"}`)。 5. 使用PyCharm的Run/Debug配置运行应用,并调试。 - 实践任务:编写两个路由,并使用Postman测试。 **第3天:MySQL数据库操作(一)** - 学习目标:学习MySQL基本操作,在PyCharm中执行SQL语句。 - 具体内容: 1. 使用PyCharm的Database工具创建数据库`mydb`。 2. 创建表:例如`users`表(id, username, email)。 3. 学习基本的SQL:INSERT、SELECT、UPDATE、DELETE。 4. 在PyCharm中执行这些SQL语句,并观察结果。 - 实践任务:创建`users`表,并插入两条记录,然后查询出来。 **第4天:MySQL数据库操作(二)与Python集成** - 学习目标:使用PyMySQLmysql-connector-python连接Flask和MySQL。 - 具体内容: 1. 安装PyMySQL:`pip install pymysql`。 2. 在Flask中配置数据库连接信息(如主机、用户、密码、数据库名)。 3. 编写一个函数,用于获取数据库连接,并执行查询。 4. 创建一个路由`/api/users`,从数据库查询所有用户并返回JSON。 - 实践任务:实现查询所有用户的路由,并在Postman中测试。 **第5天:构建RESTful API(一):用户管理** - 学习目标:实现用户的增删改查(CRUD)API。 - 具体内容: 1. 设计RESTful风格的API端点: - GET /api/users:获取所有用户 - POST /api/users:创建新用户 - GET /api/users/<id>:获取单个用户 - PUT /api/users/<id>:更新用户 - DELETE /api/users/<id>:删除用户 2. 使用Flask实现这些端点(先不考虑异常情况)。 - 实践任务:完成上述5个API,并使用Postman逐一测试。 **第6天:数据验证与错误处理** - 学习目标:对API输入进行验证,并处理错误。 - 具体内容: 1. 使用Flask的`request`对象获取JSON数据。 2. 验证输入数据(如用户名不能为空,邮箱格式)。 3. 返回适当的错误响应(状态码400等)。 4. 处理数据库操作异常(如唯一约束冲突)。 - 实践任务:在创建用户和更新用户时,加入数据验证,并测试错误情况。 **第7天:使用PyCharm进行调试与测试** - 学习目标:掌握PyCharm的调试技巧,编写单元测试。 - 具体内容: 1. 学习在PyCharm中设置断点、单步调试、变量查看。 2. 使用Flask的测试客户端编写单元测试(使用unittest或pytest)。 3. 编写针对用户API的测试用例(成功和失败场景)。 4. 在PyCharm中运行测试并查看覆盖率。 - 实践任务:为第5天的用户API编写至少3个测试用例。 **第8天:项目结构优化与蓝图** - 学习目标:优化Flask项目结构,使用蓝图(Blueprints)组织路由。 - 具体内容: 1. 将项目拆分为多个模块(如app.py, models.py, routes/)。 2. 使用Flask的蓝图功能,将用户相关的路由组织在单独的蓝图中。 3. 重构现有代码,将用户API移到蓝图中。 - 实践任务:创建蓝图`user_bp`,并注册到应用上,确保原有API正常工作。 **第9天:用户认证与授权(一)** - 学习目标:实现用户的注册和登录。 - 具体内容: 1. 在用户表中添加密码字段(存储哈希密码,不要明文)。 2. 使用库(如werkzeug)生成密码哈希。 3. 实现注册接口:接收用户名、邮箱、密码,保存到数据库(密码哈希后存储)。 4. 实现登录接口:验证用户名和密码,返回认证令牌(如JWT)。 - 实践任务:完成注册和登录接口,并测试。 **第10天:用户认证与授权(二)** - 学习目标:使用JWT实现API的保护和用户身份识别。 - 具体内容: 1. 学习JWT(JSON Web Token)的基本原理。 2. 使用Flask扩展(如flask-jwt-extended)生成和验证JWT。 3. 保护API:要求某些API必须携带有效的JWT(如获取用户信息)。 4. 在受保护的路由中获取当前用户信息。 - 实践任务:将用户信息获取接口(GET /api/users)改为需要JWT认证,并测试。 **第11天:数据库进阶:关系与查询** - 学习目标:处理多表关系(如用户和文章),复杂查询。 - 具体内容: 1. 创建新表`posts`(id, title, content, user_id)。 2. 建立外键关系:一个用户有多篇文章。 3. 编写带有JOIN的查询,获取用户及其文章。 4. 创建API:获取某个用户的所有文章。 - 实践任务:实现文章表和相应的API(获取某用户的文章),并测试。 **第12天:异步任务与Celery基础** - 学习目标:使用Celery处理异步任务(如发送邮件)。 - 具体内容: 1. 安装Celery和Redis(作为消息代理)。 2. 配置Celery与Flask集成。 3. 编写一个发送邮件的异步任务(模拟)。 4. 在用户注册成功后,异步发送欢迎邮件。 - 实践任务:实现异步发送邮件的任务,并在注册接口中调用。 **第13天:项目部署准备** - 学习目标:学习使用Gunicorn部署Flask应用,配置Nginx反向代理。 - 具体内容: 1. 安装Gunicorn:`pip install gunicorn`,并编写wsgi入口。 2. 使用Gunicorn运行Flask应用(本地测试)。 3. 安装Nginx,配置反向代理到Gunicorn。 4. 配置静态文件服务。 - 实践任务:在本地部署Flask应用,通过Nginx访问。 **第14天:持续集成与备份策略** - 学习目标:配置GitHub Actions实现CI,数据库备份。 - 具体内容: 1. 将项目代码推送到GitHub仓库。 2. 编写GitHub Actions配置文件,运行单元测试。 3. 学习MySQL备份命令(mysqldump),编写备份脚本。 4. (可选)将备份文件上传到云存储。 - 实践任务:配置CI,当push代码时自动运行测试;编写一个备份脚本。 注意:每天的内容可以适当调整,如果遇到困难可以延长学习时间。整个过程中,要充分利用PyCharm的功能(如代码提示、调试、数据库工具等)。 以上计划覆盖了后端开发的主要方面,并围绕PyCharm展开。通过14天的学习,可以掌握使用PyCharm进行Flask+MySQL后端开发的核心技能。 §§相关问题§§ 1. 如何在PyCharm中高效调试Flask应用? 2. 使用Flask开发RESTful API时,有哪些常见的身份验证方法? 3. 在部署Flask应用到生产环境时,需要注意哪些安全事项? 4. 如何优化Flask应用的数据库查询性能? </think> 以下是使用 **PyCharm 进行后端开发**的 14 天具体学习计划,涵盖 **功能开发、MySQL 操作、API 构建及扩展技能**,结合 Python/Flask 技术栈和 PyCharm 高效开发特性: --- ### **第 1 天:环境配置与 Flask 基础** - **目标**:搭建开发环境,创建 Flask 项目 - **内容**: 1. 安装 PyCharm,配置 Python 虚拟环境(`venv`) 2. 创建 Flask 项目,理解 `app.py` 基础结构 3. 编写第一个路由 `/hello` 返回 JSON 响应 - **PyCharm 技巧**: - 使用 **Run/Debug Configurations** 一键启动服务 - 通过 **Database 工具** 预连接 MySQL(需安装驱动)[^1][^3] --- ### **第 2 天:MySQL 集成与模型设计** - **目标**:连接 MySQL,设计数据模型 - **内容**: 1. 安装 `flask-sqlalchemy` 和 `mysqlclient` 2. 配置数据库 URI(`mysql://user:password@localhost/db_name`) 3. 定义 `User` 模型(含 `id`, `username`, `email` 字段) - **实践**: ```python # models.py from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True) email = db.Column(db.String(120), unique=True) ``` --- ### **第 3 天:CRUD 功能实现** - **目标**:完成用户增删改查功能 - **内容**: 1. 编写 `create_user()`:接收 POST 请求,插入数据 2. 实现 `get_user(id)`:查询单条用户数据 3. 开发 `delete_user(id)`:逻辑删除记录 - **PyCharm 技巧**: - 使用 **Python Console** 测试 SQLAlchemy 查询 - **Database 工具** 直接预览表数据[^2][^3] --- ### **第 4 天:RESTful API 设计** - **目标**:构建符合 REST 规范的 API - **内容**: 1. 设计 API 端点: - `GET /api/users` → 用户列表 - `POST /api/users` → 创建用户 2. 使用 `flask-restful` 模块化路由 3. 返回标准 HTTP 状态码(200, 201, 404) - **实践**: ```python from flask_restful import Api, Resource api = Api(app) class UserResource(Resource): def get(self, user_id): user = User.query.get(user_id) return {'username': user.username}, 200 ``` --- ### **第 5 天:请求验证与错误处理** - **目标**:增强 API 健壮性 - **内容**: 1. 使用 `marshmallow` 验证请求参数(如邮箱格式) 2. 全局异常处理:拦截 `404 Not Found` 和 `500 Internal Error` 3. 返回结构化错误信息: ```json {"error": "Invalid email", "code": 400} ``` --- ### **第 6 天:单元测试与调试** - **目标**:保障代码质量 - **内容**: 1. 使用 `pytest` 编写 API 端点测试 2. 模拟数据库操作(`pytest-flask-sqlalchemy`) 3. **PyCharm 调试**: - 设置断点追踪变量 - 使用 **HTTP Client** 发送测试请求(替代 Postman)[^3] --- ### **第 7 天:身份认证(JWT)** - **目标**:实现用户登录与权限控制 - **内容**: 1. 安装 `flask-jwt-extended` 2. 生成 JWT 令牌: ```python access_token = create_access_token(identity=user.id) ``` 3. 添加路由保护:`@jwt_required()` --- ### **第 8 天:关系型数据建模** - **目标**:处理复杂数据关系 - **内容**: 1. 创建 `Post` 模型(关联 `User` 外键) 2. 实现一对多关系: ```python class Post(db.Model): user_id = db.Column(db.Integer, db.ForeignKey('user.id')) author = db.relationship('User', backref='posts') ``` 3. 编写 API:获取用户的所有文章 --- ### **第 9 天:PyCharm 数据库工具进阶** - **目标**:高效管理数据库 - **内容**: 1. 使用 **Database 工具**: - 执行 SQL 脚本 - 可视化编辑表结构 - 数据导入/导出 2. 版本控制:集成 **Liquibase** 管理迁移脚本[^3] --- ### **第 10 天:异步任务(Celery)** - **目标**:解耦耗时操作 - **内容**: 1. 集成 Celery:异步发送邮件 2. 配置 Redis 作为消息代理 3. 在 PyCharm 中启动 **Celery Worker** --- ### **第 11 天:API 文档自动化** - **目标**:生成交互式文档 - **内容**: 1. 使用 `flask-swagger-ui` 2. 通过注释生成 OpenAPI 规范: ```python @swagger.model class UserModel: fields = ('id', 'username', 'email') ``` 3. 访问 `/swagger` 查看文档[^1] --- ### **第 12 天:Docker 容器化** - **目标**:实现环境一致性 - **内容**: 1. 编写 `Dockerfile`: ```dockerfile FROM python:3.9 RUN pip install -r requirements.txt CMD ["flask", "run", "--host=0.0.0.0"] ``` 2. 配置 `docker-compose.yml`(含 MySQL 服务) 3. 在 PyCharm 中运行 **Docker 容器**[^1] --- ### **第 13 天:CI/CD 流水线** - **目标**:自动化测试部署 - **内容**: 1. 配置 GitHub Actions: - 代码推送时运行测试 - 构建 Docker 镜像推送到仓库 2. 部署到云服务器(AWS/Aliyun)[^1] --- ### **第 14 天:监控与优化** - **目标**:提升生产环境稳定性 - **内容**: 1. 集成 Prometheus 监控 API 性能 2. 使用 Flask-Caching 缓存高频查询 3. 配置日志切割(`logging.handlers.RotatingFileHandler`) --- ### 关键工具栈总结 | 类别 | 工具 | 作用 | |------------|-----------------------|-------------------------------| | **框架** | Flask + SQLAlchemy | API 开发与 ORM 操作 | | **数据库** | MySQL + PyCharm 工具 | 数据存储与可视化管理 | | **测试** | pytest + HTTP Client | 自动化测试 | | **部署** | Docker + GitHub Actions | 容器化与 CI/CD | ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值