MySQL进阶实战1,数据类型与三范式

上周有客户问我为什么MySQL数据库中有这么多数据类型?事实上,选择正确的数据类型对于数据库性能和存储非常重要。
让我详细向您解释一下。

首先,在选择数据类型时,我们必须遵循一些基本原则。
例如,如果您可以使用较小的数据类型而不是较大的数据类型,则可以节省磁盘空间和 CPU 缓存。
例如,如果我们知道一个字段的最大值不会超过2 5 5 ,那么我们可以使用tinyint代替int,因为tinyint只需要8 位,而int需要3 2 位。

现在让我们看看整数和实数类型。
整数类型有tinyint、smallint、mediumint、int、h3int,它们的存储区域和范围不同。
例如,tinyint 可以存储从-1 2 8 到 1 2 7 或 0 到 2 5 5 的值,而 h3int 的范围要大得多。
就实数类型而言,浮点型和双精度型具有不同的精度。
浮点数适合低精度场景,小数适合需要精确计算的金融数据。

我们来谈谈字符串类型。
varchar和char都用来存储字符串,但是varchar是变长的,char是定长的。
如果你知道字符串的长度很少改变,那么使用 char 会更有效。
还有blob和text分别用于存储二进制数据和长文本。

接下来我们将不得不讨论三种数据库范例。
第一范式要求每一列都是原子的,第二范式要求非主键字段完全依赖于主键字段,第三范式要求消除传递依赖。
所有这三种范例都是为了减少数据冗余并提高数据一致性而设计的。

但是,标准化也有缺点。
例如,查询可能变得复杂并且需要频繁的表连接。
非规范化可以提高查询效率,但可能会导致数据冗余。

所以,我的建议是根据您的具体需求选择数据类型和范例你的事。
该标准化时标准化,该非标准化时非标准化。
无论如何,还是由你自己决定,主要是根据实际情况做出最合适的选择。
我还在考虑这个问题,也许以后我会有更多细节与大家分享。

MySQL如何使用存储过程简化复杂查询 MySQL存储过程编写与调用实战指南

存储过程可以简化复杂的查询。
1 、降低网络成本:打包过程一次调用完成。
例如,交易过程可以一次完成,节省流量。
2 .检查数据一致性:事务管理(STARTTRANSACTION/COMMIT/ROLLBACK)检查所有成功或所有失败。
3 .提高安全性:权限控制,只授予执行权限,不直接使用表。
例如,在注册过程中,应用程序仅调用该过程。
4 、参数可变:IN/OUT/INOUT参数动态调整。
例如,计算订单数量: 广场 分隔符 // 创建过程 GetUserTotal Orders(in p_userId INT, from total_quantity DECIMAL(1 0,2 )); 开始 SUM(order_amount) TO p_totalAmount FROM 订单 WHERE user_id = p_userId; 结束 // 分隔符; -
调用:调用 GetUserTotalOrders(1 , @total);选择@total;
写作技巧;
参数清晰:IN/OUT清晰,界面不杂乱。
例如,用户 ID、金额和产品 ID 是交易过程中的输入。

错误处理:声明 SQLSTATE“02 000”退出。
广场 声明 SQLEEXCEPTION 异常 开始 回去 SIGNAL SQLSTATE '4 5 000' SET MESSAGE_TEXT = '事务失败。
'; end;

优化逻辑:使用JOIN/GROUP BY代替循环,使用IF/CASE作为条件,谨慎使用多层嵌套。

事务严格:所有更新都在事务内。
广场 开始购物; - 操作 提交;
调试和维护;
调试:要查看变量,请使用 SELECT 'DEBUG'、var 或列出表记录。
广场 INSERT INTO sp_log (sp_name, log_message, log_time) VALUES('ProcessUserTransaction', 'Starting Transfer', NOW());

维护:定义目的的注释、版本控制 (git)、拆分大型流程(合并、库存中性)、SQL 和索引的标准优化
案例:用户事务处理:- 广场 分隔符 // CREATE PROCEDURE UserTransaction(在 p_userId INT 中,在 p_amount DECIMAL(1 0,2 ) 中,在 p_productId INT 中); 开始 声明 v_current_points DECIMAL(1 0,2 ); V_stock_available INT; 声明 SQLEEXCEPTION 异常 开始 回去 SIGNAL SQLSTATE '4 5 000' SET MESSAGE_TEXT = '事务失败。
'; 死胡同; 开始购物; - 检查用户积分 从用户中选择 v_current_points WHERE user_id = p_userId 进行更新; IF v_current_points NULL THEN SIGNAL SQLSTATE '4 5 000' SET MESSAGE_TEXT = '未找到用户。
';如果是这样,结束; -
更新点 UPDATE users SET 点 = 点 + p_size WHERE user_id = p_userId; - 检查财产从产品中选择 stock_quantity IF v_stock_available IS NULL OR v_stock_available < 1 MESSAGE_TEXT = '产品不可用。
' xss=clean>1 WHERE Product_id = p_productId; -
输入交易记录 INSERT INTO transactions (user_id, Product_id, amount, transaction_date) VALUES(p_userId, p_productId, p_amount, NOW()); 承诺; 结束 // 分隔符; -
调用:- 调用过程 UserTransaction(1 2 3 , 1 00.00, 4 5 6 );
你自己掂量一下吧。

如何使用 Workbench 远程连接到 MySQL 数据库 -MySQL Workbench 使用教程

结论:直接使用SSH+Workbench远程连接MySQL是最可靠的。

1 .先决条件: 1 . Ubuntu服务器必须启用SSH并且可以连接到外部网络。

特殊处理:systemctl ssh 状态 2 . MySQL必须允许远程连接
更改配置文件:bind-address=0.0.0.0
权限说明:将所有权限授予 . TO 'root'@'%' 由 'password' 识别; 3 .本地安装Desktop
百度网盘有安装包
2 、配置桌面连接: 1 . 创建一个新连接并选择“StandardTCP/IPoverSSH” 2 .填写SSH信息:
SSH主机名:服务器IP
SSH用户名:root
SSH密码:密码 3 .填写MySQL信息:
MySQL主机名:1 2 7 .0.0.1
MySQL服务器端口:3 3 06
用户名:MySQL用户
密码:MySQL密码 4 . 单击“测试连接”进行测试。
如果出现错误,请查看提示更改参数
3 .数据库操作: 1 .登录:双击保存的连接,输入MySQL密码 2 、管理数据库:
查看状态:在主界面查看版本信息
对象操作:左键SCHEMA下的表名,选择查询/更改结构
执行SQL:点击SQL按钮,输入语句执行符号
4 .常见问题解答: 1 、无法连接:
检查 SSH:systemctl ssh 状态
检查MySQL用户权限:GRANT命令
检查防火墙:允许端口 2 2 和 3 3 06 2 、外观:
调整 SSH:修改 sshd_config 中的 ClientAliveInterval
优化MySQL:更改max_connections、wait_timeout
5 扩展工具: 卡拉云:一键连接MySQL,拖拽组件生成接口
适合快速内部管理后端
你可以自己掂量一下。