fix_mes_tables_primary_keys.sql 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. -- 修复 mes_moentry 和 mes_morder 表的主键问题
  2. -- 执行此脚本前,请先执行 check_mes_tables_primary_keys.sql 检查当前主键情况
  3. USE aidopdev;
  4. -- 如果 mes_moentry 表有多个主键约束,删除后重建
  5. -- 注意:如果表中已有数据,请谨慎操作并备份数据
  6. -- 1. 删除 mes_moentry 表的现有主键(如果存在多个)
  7. SET @drop_pk_moentry = (SELECT IF(
  8. COUNT(*) > 0,
  9. 'ALTER TABLE mes_moentry DROP PRIMARY KEY',
  10. 'SELECT ''mes_moentry PRIMARY KEY not found'' AS info'
  11. ) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
  12. WHERE TABLE_SCHEMA = 'aidopdev'
  13. AND TABLE_NAME = 'mes_moentry'
  14. AND CONSTRAINT_TYPE = 'PRIMARY KEY');
  15. PREPARE stmt FROM @drop_pk_moentry;
  16. EXECUTE stmt;
  17. DEALLOCATE PREPARE stmt;
  18. -- 2. 重新添加 mes_moentry 表的主键(只以 Id 作为主键)
  19. SET @add_pk_moentry = (SELECT IF(
  20. COUNT(*) = 0,
  21. 'ALTER TABLE mes_moentry ADD PRIMARY KEY (Id)',
  22. 'SELECT ''mes_moentry PRIMARY KEY already exists'' AS info'
  23. ) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
  24. WHERE TABLE_SCHEMA = 'aidopdev'
  25. AND TABLE_NAME = 'mes_moentry'
  26. AND CONSTRAINT_TYPE = 'PRIMARY KEY');
  27. PREPARE stmt FROM @add_pk_moentry;
  28. EXECUTE stmt;
  29. DEALLOCATE PREPARE stmt;
  30. -- 3. 删除 mes_morder 表的现有主键(如果存在多个)
  31. SET @drop_pk_morder = (SELECT IF(
  32. COUNT(*) > 0,
  33. 'ALTER TABLE mes_morder DROP PRIMARY KEY',
  34. 'SELECT ''mes_morder PRIMARY KEY not found'' AS info'
  35. ) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
  36. WHERE TABLE_SCHEMA = 'aidopdev'
  37. AND TABLE_NAME = 'mes_morder'
  38. AND CONSTRAINT_TYPE = 'PRIMARY KEY');
  39. PREPARE stmt FROM @drop_pk_morder;
  40. EXECUTE stmt;
  41. DEALLOCATE PREPARE stmt;
  42. -- 4. 重新添加 mes_morder 表的主键(只以 Id 作为主键)
  43. SET @add_pk_morder = (SELECT IF(
  44. COUNT(*) = 0,
  45. 'ALTER TABLE mes_morder ADD PRIMARY KEY (Id)',
  46. 'SELECT ''mes_morder PRIMARY KEY already exists'' AS info'
  47. ) FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
  48. WHERE TABLE_SCHEMA = 'aidopdev'
  49. AND TABLE_NAME = 'mes_morder'
  50. AND CONSTRAINT_TYPE = 'PRIMARY KEY');
  51. PREPARE stmt FROM @add_pk_morder;
  52. EXECUTE stmt;
  53. DEALLOCATE PREPARE stmt;
  54. SELECT 'Primary keys have been fixed for mes_moentry and mes_morder' AS result;