1. 程式人生 > >對比數據庫字段不同的sql (mysql版)

對比數據庫字段不同的sql (mysql版)

tab mysql 字段 char HERE comm 不存在 PE set

-- 使用test庫 `test_project_management` `oel_project_management`

USE test;
-- 舊表
DROP TABLE old_column_info;
CREATE TABLE `old_column_info` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `table_schema` VARCHAR(64) NOT NULL COMMENT ‘數據庫‘,
  `table_name` VARCHAR(64) NOT NULL COMMENT ‘表名‘,
  `table_comment` VARCHAR(128) DEFAULT NULL COMMENT ‘表備註‘,
  `column_name` VARCHAR(64) NOT NULL COMMENT ‘列名‘,
  `column_type` VARCHAR(32) NOT NULL COMMENT ‘列類型‘,
  `is_nullable` VARCHAR(8) NOT NULL COMMENT ‘是否可為空‘,
  `column_default` VARCHAR(32) DEFAULT NULL COMMENT ‘默認值‘,
  `column_comment` VARCHAR(128) DEFAULT NULL COMMENT ‘列備註‘,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

-- 舊表
DROP TABLE new_column_info;
CREATE TABLE `new_column_info` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `table_schema` VARCHAR(64) NOT NULL COMMENT ‘數據庫‘,
  `table_name` VARCHAR(64) NOT NULL COMMENT ‘表名‘,
  `table_comment` VARCHAR(128) DEFAULT NULL COMMENT ‘表備註‘,
  `column_name` VARCHAR(64) NOT NULL COMMENT ‘列名‘,
  `column_type` VARCHAR(32) NOT NULL COMMENT ‘列類型‘,
  `is_nullable` VARCHAR(8) NOT NULL COMMENT ‘是否可為空‘,
  `column_default` VARCHAR(32) DEFAULT NULL COMMENT ‘默認值‘,
  `column_comment` VARCHAR(128) DEFAULT NULL COMMENT ‘列備註‘,
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

-- 插入舊表結構
INSERT INTO `old_column_info` (
  `table_schema`,
  `table_name`,
  `table_comment`,
  `column_name`,
  `column_type`,
  `is_nullable`,
  `column_default`,
  `column_comment`
) 
SELECT ‘project_management‘, tab.table_name, tab.table_comment, col.`COLUMN_NAME`, col.`COLUMN_TYPE`, col.`IS_NULLABLE`, col.`COLUMN_DEFAULT`, col.`COLUMN_COMMENT` 
FROM information_schema.`TABLES` tab, information_schema.columns col
WHERE col.table_schema = tab.`TABLE_SCHEMA`
AND col.table_name = tab.`TABLE_NAME`
AND col.table_schema = ‘test_project_management‘;

-- 插入舊表結構
INSERT INTO `new_column_info` (
  `table_schema`,
  `table_name`,
  `table_comment`,
  `column_name`,
  `column_type`,
  `is_nullable`,
  `column_default`,
  `column_comment`
) 
SELECT ‘project_management‘, tab.table_name, tab.table_comment, col.`COLUMN_NAME`, col.`COLUMN_TYPE`, col.`IS_NULLABLE`, col.`COLUMN_DEFAULT`, col.`COLUMN_COMMENT` 
FROM information_schema.`TABLES` tab, information_schema.columns col
WHERE col.table_schema = tab.`TABLE_SCHEMA`
AND col.table_name = tab.`TABLE_NAME`
AND col.table_schema = ‘oel_project_management‘;

-- 查看字段名稱未變單數據結構變了的
SELECT o.table_schema, o.table_name, o.table_comment, 
o.`COLUMN_NAME` AS old_column_name, o.`COLUMN_TYPE` AS old_column_type,
n.`COLUMN_NAME` AS new_column_name, n.`COLUMN_TYPE` AS new_column_type
FROM old_column_info o, new_column_info n
WHERE o.`table_schema` = n.table_schema
AND o.`table_name` = n.table_name
AND o.`column_name` = n.column_name
AND (o.column_type != n.column_type
OR o.`is_nullable` != n.`is_nullable`);

-- 查看字段名稱未變單數據結構變了的
SELECT o.table_schema, o.table_name, o.table_comment, 
o.`COLUMN_NAME` AS old_column_name, o.`COLUMN_TYPE` AS old_column_type,
n.`COLUMN_NAME` AS new_column_name, n.`COLUMN_TYPE` AS new_column_type
FROM old_column_info o, new_column_info n
WHERE o.`table_schema` = n.table_schema
AND o.`table_name` = n.table_name
AND o.`column_name` = n.column_name
AND o.column_type != n.column_type;

-- 查詢老庫裏存在但新庫裏不存在的數據
SELECT
o.table_schema, o.table_name, o.table_comment, 
o.`COLUMN_NAME` AS old_column_name, o.`COLUMN_TYPE` AS old_column_type
FROM old_column_info o
WHERE NOT EXISTS(
SELECT 1 FROM new_column_info n
WHERE  o.`table_schema` = n.table_schema
AND o.`table_name` = n.table_name
AND o.`column_name` = n.column_name
);

-- 查詢新庫裏存在但老庫裏不存在的數據
SELECT
n.table_schema, n.table_name, n.table_comment, 
n.`COLUMN_NAME` AS new_column_name, n.`COLUMN_TYPE` AS new_column_type
FROM new_column_info n
WHERE NOT EXISTS(
SELECT 1 FROM old_column_info o
WHERE  o.`table_schema` = n.table_schema
AND o.`table_name` = n.table_name
AND o.`column_name` = n.column_name
);


對比數據庫字段不同的sql (mysql版)