2016-11-04 9 views
0

ich diese TabelleAlte Datenbank basierend auf Anweisung create table

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; 

Dann eine neuere Version der Tabelle haben ist verfügbar

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; 

Gibt es eine Möglichkeit ALTER Aussagen zu erzeugen, um die neuen anzupassen Änderungen? Ich möchte in der Lage sein, automatisch auf die neuere Version zu aktualisieren, aber die Tabellendaten beizubehalten.

fand ich this, die ein Orakel Äquivalent genau zu sein scheint, was ich suche - CREATE OR REPLACE TABLE

+0

ausführen ‚eine neuere Version der Tabelle zur Verfügung‘ Was meinst du damit? – e4c5

+0

@ e4c5, dass die Tabelle vom Ersteller des Programms geändert wurde (eine neuere Version) und ich möchte meine Version auf dem neuesten Stand halten. –

+0

Wenn Sie von einer Drittanbieter-Software sprechen, werden sie sicherlich Migrationen eingebaut haben. – e4c5

Antwort

1

Sie Tabellen nach der Erstellung ändern können, in Ihrem Fall eine neue Spalte zu erstellen:

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

Ich möchte das automatisch machen, ich gab nur ein Beispiel, offensichtlich weiß ich nicht, was die Änderungen sein werden und ich möchte das nicht von Hand machen. –

+0

Kurz vor der Verwendung eines Programms, um einen Schemavergleich zu tun, würde ich keinen Weg, dies automatisch zu tun, zum Beispiel in MySQL WorkBench – JanR

+0

Oder sehen Sie sich die RedGate SQL Compare Tools sie sind gut, aber auch $$$ – JanR

0

Die obige Antwort funktioniert definitiv, aber es kann Ihre Tabelle sperren und Ihre Tabelle nicht verfügbar machen, wenn Ihre Tabelle zu groß ist. Wenn Sie keine Ausfallzeiten haben möchten, können Sie dazu das pt-online-Schema verwenden.

machen einen Shell-Skript des unten Skript und es

#!/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 & 
Verwandte Themen