mysql ddl同步表相差字段
时间: 2023-09-18 20:10:44 浏览: 95
MySQL DDL同步表相差字段可以使用以下步骤:
1. 使用SHOW CREATE TABLE语句获取源表和目标表的DDL语句。
2. 将两个DDL语句分别解析为字段列表。
3. 比较两个字段列表,找出相差的字段。
4. 使用ALTER TABLE语句将目标表添加缺失字段或删除多余字段。
下面是一个示例脚本,可以自动比较并同步两个表的DDL:
```
#!/bin/bash
# source table
src_table="source_table"
src_db="source_database"
# target table
tgt_table="target_table"
tgt_db="target_database"
# get source table ddl
src_ddl=$(echo "SHOW CREATE TABLE ${src_db}.${src_table}" | mysql | tail -n +2 | awk '{print $2}')
# get target table ddl
tgt_ddl=$(echo "SHOW CREATE TABLE ${tgt_db}.${tgt_table}" | mysql | tail -n +2 | awk '{print $2}')
# parse source and target ddl into field lists
src_fields=$(echo ${src_ddl} | awk -F"(" '{print $2}' | awk -F")" '{print $1}' | sed 's/ /\n/g' | sed '/^$/d')
tgt_fields=$(echo ${tgt_ddl} | awk -F"(" '{print $2}' | awk -F")" '{print $1}' | sed 's/ /\n/g' | sed '/^$/d')
# find missing fields in target table
for field in ${src_fields}
do
if [[ ! ${tgt_fields} =~ ${field} ]]
then
echo "Adding field ${field} to ${tgt_db}.${tgt_table}..."
alter_stmt="ALTER TABLE ${tgt_db}.${tgt_table} ADD COLUMN ${field} $(echo ${src_ddl} | grep ${field} | awk -F"${field} " '{print $2}' | sed 's/,//g')"
echo ${alter_stmt} | mysql
fi
done
# find extra fields in target table
for field in ${tgt_fields}
do
if [[ ! ${src_fields} =~ ${field} ]]
then
echo "Dropping field ${field} from ${tgt_db}.${tgt_table}..."
alter_stmt="ALTER TABLE ${tgt_db}.${tgt_table} DROP COLUMN ${field}"
echo ${alter_stmt} | mysql
fi
done
```
注意:这个脚本只能同步字段的添加和删除,不能处理字段顺序、类型、长度等的变化。如果需要完整的DDL同步功能,可以考虑使用开源工具如Liquibase或Flyway。
阅读全文