当前位置:   article > 正文

Mysql 升级如何对比表结构差异_比较两个表表结构mysql

比较两个表表结构mysql

最近在升级公司的一个项目时,由于需要升级的版本与现场版本的时间跨度过大,研发在进行开发的时候没有记录sql变更,导致一时间难以弄清楚,需要做哪些sql调整,梳理下怎么比较处数据库结构的差异。

比较表差异

  • 查出所有表 (测试环境和现场环境)
  1. SELECT table_name, table_schema FROM information_schema.tables
  2. where table_schema = 'your database';
  • 解析数据(node.js)

  1. const { STR, FILE } = require("../../libs");
  2. function compare() {
  3. let nowTable = readTable("tables1.sql");
  4. let oldTables = readTable("tables.sql");
  5. let diff = []
  6. nowTable.forEach(x => {
  7. if (!oldTables.includes(x)) {
  8. diff.push(x);
  9. }
  10. })
  11. FILE.writeJson(`${__dirname}/table_diff.json`, diff, true);
  12. }
  13. function readTable(file) {
  14. let content = FILE.read(`${__dirname}/${file}`)
  15. let tables = []
  16. STR.splitToLines(content, "\r\n").forEach(x => {
  17. let names = x.split("|");
  18. tables.push(names[1].trim());
  19. })
  20. return tables;
  21. }
  22. compare();
  • 输出差异结果    
  1. [
  2. "evs_template_page_language",
  3. "evs_ai_archive_bind",
  4. "evs_ai_store",
  5. "evs_content_property_language",
  6. "evs_content_property_rich_text_language",
  7. "evs_model_language",
  8. "evs_model_property_language",
  9. "evs_stream_server_log",
  10. "evs_template_page_language",
  11. "evs_video_meeting",
  12. "evs_video_meeting_log",
  13. "evs_video_raw_copy"
  14. ]

比较字段差异

  • 查出所有字段   

SELECT table_name, table_schema,column_name FROM INFORMATION_SCHEMA.COLUMNS where table_schema = 'your database';
  •  解析字段(js)
  1. const { STR, FILE, ARRAY } = require("../../libs");
  2. function compare() {
  3. let nowTable = readTable("log1.sql");
  4. let oldTables = readTable("log.sql");
  5. let diff = []
  6. nowTable.forEach(x => {
  7. let target= ARRAY.findFirst(oldTables,y=>y.table==x.table&&y.column==x.column);
  8. if (!target) {
  9. diff.push(x);
  10. }
  11. })
  12. FILE.writeJson(`${__dirname}/log_diff.json`, diff, true);
  13. }
  14. function readTable(file) {
  15. let content = FILE.read(`${__dirname}/${file}`)
  16. let tables = []
  17. STR.splitToLines(content, "\r\n").forEach(x => {
  18. let names = x.split("|");
  19. let data={
  20. table:names[1].trim(),
  21. column:names[3].trim(),
  22. }
  23. tables.push(data);
  24. })
  25. return tables;
  26. }
  27. compare();
  • 输出结果
  1. [
  2. {
  3. "table": "evs_live",
  4. "column": "evs_resolution"
  5. },
  6. {
  7. "table": "evs_live",
  8. "column": "evs_channel_no"
  9. },
  10. {
  11. "table": "evs_model_property",
  12. "column": "evs_support_multi_language"
  13. },
  14. {
  15. "table": "evs_model_property",
  16. "column": "evs_model_propertycol"
  17. },
  18. {
  19. "table": "evs_tag",
  20. "column": "evs_default_tag"
  21. }
  22. ]

上述代码仅参考,还可以检测到字段长度、非空、默认值等变更,更完善的代码请查看

JasmineProject  专业的项目管理工具  免费使用

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/957557
推荐阅读
相关标签
  

闽ICP备14008679号