mysql ddl之增加字段

单个字段增加实例

ALTER TABLE `z_board_network_log` add
	`ip_site` varchar(255) DEFAULT NULL COMMENT 'ip地址'

如果要增加多个字段怎么办呢?

可以像这样,把要增加的字段信息用括号括起来

ALTER TABLE `z_board_network_log` add ( 
	`ip_site` varchar(255) DEFAULT NULL COMMENT 'ip地址',
  `lng` double(10,6) DEFAULT NULL COMMENT '经度',
  `lat` double(10,6) DEFAULT NULL COMMENT '纬度',
  `address` varchar(255) DEFAULT NULL COMMENT '地址'
	)

删除字段

ALTER TABLE `z_board_network_log` DROP
	`ip_site2`
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。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值