如何确保MySQL和Doris数据变更的规范性?
- 行业动态
- 2024-12-31
- 4518
MySQL数据变更_Doris数据变更规范要求在执行数据更新或删除操作时,必须确保数据的一致性和完整性。要遵守权限管理原则,防止未经授权的访问和修改。
MySQL和Doris是两种流行的数据库管理系统,它们在数据变更方面有不同的规范和最佳实践,以下是对这两种数据库的数据变更规范的详细描述:
MySQL数据变更规范
1. 使用UPDATE语句修改数据
基本语法:UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
示例:假设有一个名为employees的表,包含id,name,position, 和salary列,要更新id为1的员工的薪水和职位,可以使用以下SQL语句:
UPDATE employees SET salary = 80000, position = 'Senior Developer' WHERE id = 1;
注意事项:确保条件准确,以免误操作不需要修改的行。
2. 确保数据一致性和完整性
使用约束:如主键、外键、唯一键和检查约束,在更新订单金额时,必须确保customer_id存在:
UPDATE orders SET order_amount = 150.00 WHERE order_id = 10 AND customer_id IN (SELECT id FROM customers);
3. 采用事务机制进行安全操作
事务的基本语法:
START TRANSACTION; -一系列的SQL操作 COMMIT;
错误处理:如果出现错误,可以使用ROLLBACK命令撤销所有操作:
START TRANSACTION; UPDATE accounts SET balance = balance 100 WHERE account_id = 1; UPDATE accounts SET balance = balance + 100 WHERE account_id = 2; -如果出现错误,撤销事务 ROLLBACK;
4. 使用备份和日志记录
创建备份:使用mysqldump工具:
mysqldump -u username -p database_name > backup.sql
日志记录:在应用程序中记录所有数据修改操作,便于审计和问题排查。
5. 使用触发器自动修改数据
创建触发器:创建一个触发器记录工资更新:
CREATE TRIGGER after_salary_update AFTER UPDATE ON employees FOR EACH ROW BEGIN INSERT INTO salary_log (employee_id, old_salary, new_salary, update_time) VALUES (OLD.id, OLD.salary, NEW.salary, NOW()); END;
6. 使用存储过程批量修改数据
创建存储过程:将所有薪水大于50000的员工的职位更新为Senior Developer:
DELIMITER // CREATE PROCEDURE update_high_salary_employees() BEGIN UPDATE employees SET position = 'Senior Developer' WHERE salary > 50000; END // DELIMITER ;
调用存储过程:CALL update_high_salary_employees();
7. 使用开发工具进行数据修改
常用工具:MySQL Workbench、phpMyAdmin、DBeaver等,这些工具提供图形用户界面,使得数据修改更加直观和便捷。
Doris数据变更规范
1. 禁止直接使用DELETE或UPDATE语句
替代方法:使用CDC(Change Data Capture)的upsert方式来实现数据变更。
2. 避免业务高峰期进行加减字段或修改字段类型和注释
建议:在业务低峰期,停止相关表的写入和修改业务后,通过重建表方式实现以上操作:
步骤:新建一个表,该表结构和需进行增删改字段的表结构相同,在新建表中增加需要添加的新字段、删除不需要的字段、或修改需改变类型的字段,选取指定字段数据插入到新创建的表中,然后交换两个表的名称。
3. 特殊大SQL操作设置查询超时时间参数
Hint方式设置Session会话变量:不要设置全局的系统变量。
SELECT /*+ SET_VAR(query_timeout = xxx*/ from table;
4. BloomFilter索引构建条件
适用场景:BloomFilter适用于非前缀过滤,查询会根据该列高频过滤,而且查询条件大多是in和=过滤,适用于高基数列,如身份证号等。
限制:数据基数在一半左右,对于Bitmap, BloomFilter适用于高基数列,因为如果创建在低基数的列上,性别”列,每个Block几乎都会包含所有取值,导致BloomFilter索引失去意义。
5. bitmap索引构建范围
适用数据类型:适用于低基数的列上,建议在100到10000之间,如职业、地市等,特定类型的查询例如count、or、and等逻辑操作因为只需要进行位运算。
6. 倒排索引加速模糊匹配
适用场景:亿级别以上数据,如果有模糊匹配,使用倒排索引或者是NGram Bloomfilter,对于某个范围数据在分区分桶和前缀索引中都不好设计的情况,可以考虑引入倒排索引加速。
7. 单表物化视图限制
数量限制:单表物化视图不能超过6个,单笔物化视图是实时构建,在unique模型上物化视图只能起到Key重新排序的作用,不能做数据的聚合。
8. JSON数据类型使用建议
推荐:建议使用JSON数据类型代替字符串类型存放JSON数据。
无论是MySQL还是Doris,在进行数据变更时都需要遵循一定的规范和最佳实践,以确保数据的安全性、一致性和完整性,根据具体的业务需求和数据库特性,选择合适的方法和工具也是非常重要的。
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:http://www.xixizhuji.com/fuzhu/379044.html