基于create table语句更改数据库

时间:2016-11-04 06:40:21

标签: mysql sql

我有这张桌子

dcast(setDT(df1)[, rn := 1:.N, by = ID], ID ~ rn, value.var = 'Action_Number')

然后可以使用更新版本的表

CREATE TABLE `users` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(255) NOT NULL,
  `password` varchar(250) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`) USING BTREE,
  FULLTEXT KEY `dgd` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=150 DEFAULT CHARSET=utf8;

有没有办法生成CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `email` varchar(255) NOT NULL, `password` varchar(250) NOT NULL, `name` varchar(50) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`) USING BTREE, FULLTEXT KEY `dgd` (`email`) ) ENGINE=InnoDB AUTO_INCREMENT=150 DEFAULT CHARSET=utf8; 语句以适应新的变化?我希望能够自动升级到更新的版本,但保留表数据。

我发现this似乎与我正在寻找的oracle相当 - ALTER

2 个答案:

答案 0 :(得分:1)

您可以在创建后更改表格,以便创建新列:

ALTER TABLE users ADD COLUMN Name VARCHAR(250) NOT NULL

答案 1 :(得分:0)

上面的答案肯定有效,但如果您的桌子太大,它可能会锁定您的桌子并使您的桌子不可用。如果您不想要停机,可以使用pt-online-schema来执行此操作。

从下面的脚本中创建一个shell脚本并执行它

    #!/bin/bash

    DBUSER=username
    DBPASS=password
    DBSCHEMA=db_name
    TABLE=table_name

    ALTER_SQL="modify column destination_url text;" #what you want to modify or add

    pt-online-schema-change \
            --alter "$ALTER_SQL" \
            --charset utf8 \
            --nocheck-replication-filters \
            --chunk-size 10000 \
            --critical-load Threads_running=10000 \
            --nodrop-new-table \
            --max-load Threads_running=50 \
            --progress time,60 \
            --recursion-method none \
            --statistics \
            --pid $HOST.pid \
            --host $HOST \
            --execute \
            u=$DBUSER,p=$DBPASS,D=$DBSCHEMA,t=$TABLE >> output.log 2>&1 &