我有这张桌子
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
答案 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 &