2009-12-11 15 views
18

Ich migriere eine MS Access Anwendung (die Tabellen mit einem MSSQL Server verbunden hat) zu MySQL.Wie erstelle ich einen Tabellenalias in MySQL

Als Mittel zur Behebung einiger Probleme bei der Benennung von MSAccess-Tabellen suche ich nach einer Lösung, um einen MySQL-Tabellenalias hinzuzufügen, der auf eine vorhandene Tabelle in der MySQL-Datenbank verweist. Idealerweise möchte ich den Alias ​​'dbo_customers' in mysql erstellen, der auch in mysql auf die customs-Tabelle verweist.

Um klar zu sein Ich bin nicht wollen einen Tabellennamen in einer Abfrage wie folgt an Alias:

SELECT * FROM customers AS dbo_customers 

Aber lieber würde Ich mag die folgende Abfrage der Lage Problem sein:

SELECT * FROM dbo_customers 

und es gibt Daten aus der Tabelle Kunden zurück.

+6

Warum nicht die Tabelle umbenennen arbeiten? –

+3

In einigen Fällen funktioniert das Umbenennen der Tabelle nicht. Wenn Sie beispielsweise mit zwei ORM-Systemen mit unterschiedlichen Namenskonventionen arbeiten, benötigen Sie einen Alias, damit beide gut funktionieren. In diesem Fall, übrigens, die akzeptierte Lösung war gut genug für mich :) – Nimo

Antwort

31

Aus der Spitze von meinem Kopf

CREATE VIEW dbo_customers AS 
SELECT * FROM customers 

Vielleicht sollte nicht die beste Lösung, aber arbeiten wie die Ansicht aktualisierbar ist. Funktioniert definitiv für Nur Lesen

+0

Ich hätte in meinem ursprünglichen Beitrag gesagt, dass ich in der Lage sein muss, die Daten auch zu aktualisieren. Ich glaube nicht, dass eine Ansicht meinen Bedürfnissen entspricht - es sei denn, die Ansichten sind irgendwie aktualisierbar? – rswolff

+4

Ja, diese Ansicht ist aktualisierbar. – longneck

+0

Ich glaube wirklich nicht, dass dies die einfachste Lösung ist. –

5

Sie können eine View erstellen.

CREATE VIEW dbo_customers AS SELECT * FROM customers; 

Wenn das nicht für Sie arbeiten, könnten Sie versuchen, eine Schattenkopie der Tabelle erstellen, und Trigger verwenden synchronisiert die Tabellen zu halten.

Zum Beispiel:

CREATE TABLE t1(id serial primary key, field varchar(255) not null); 
CREATE TABLE dbo_t1(id serial primary key, field varchar(255) not null); 

-- INSERT trigger 
CREATE TRIGGER t1_dbo_insert AFTER INSERT ON t1 
FOR EACH ROW BEGIN 
    INSERT INTO dbo_t1 SET field = NEW.field; 
    -- No need to specify the ID, it should stay in-sync 
END 

-- UPDATE trigger 
CREATE TRIGGER t1_dbo_update AFTER UPDATE ON t1 
FOR EACH ROW BEGIN 
    UPDATE dbo_t1 SET field = NEW.field WHERE id = NEW.id; 
END 

-- DELETE trigger 
CREATE TRIGGER t1_dbo_delete AFTER DELETE ON t1 
FOR EACH ROW BEGIN 
    DELETE FROM dbo_t1 WHERE id = OLD.id; 
END 

Nicht gerade ein 'Alias' und bei weitem nicht perfekt. Aber es ist eine Option, wenn alles andere fehlschlägt.

0

Sie könnten eine view mit dem Namen dbo_customers erstellen, die von der Tabelle customers unterstützt wird.

-1

gibt es eine einfachere Lösung für MySQL über MERGE -Tabelle Motor:

vorstellen, wir Tabelle rus_vacancies genannt haben und brauchen seine englische Entsprechung

create table eng_vacancies select * from rus_vacancies; 
delete from eng_vacancies; 
alter table eng_vacancies ENGINE=MERGE; 
alter table eng_vacancies UNION=(rus_vacancies); 

jetzt Tisch rus_vacancies gleich zu Tisch eng_vacancies für jede Lese-Schreib Operationen

eine Einschränkung - Original-Tabelle muss ENGINE = MyISAM (kann leicht durch "alter table rus_vacancies ENGINE=MyISAM")

0

@OMG Ponies sagte Pony in einem Kommentar:

Warum die Tabelle nicht umbenennen?

... und es scheint die offensichtliche Antwort zu mir.

Wenn Sie eine ODBC-verknüpfte Tabelle für die MySQL-Tabelle Kunden erstellen, wird es Kunden genannt und dann müssen Sie nur die Tabelle in dbo_customers umbenennen.Es besteht absolut keine Notwendigkeit, dass ich zu diesem Zweck eine Sicht in MySQL erstellen kann.

Ich würde es hassen, eine Access-App zu haben, die SQL Server-Tabellennamen verwendet, wenn die MySQL-Tabellen nicht das gleiche genannt werden - das ist nur verwirrend und führt zu Wartungsproblemen (dh es ist einfacher für die verknüpften Tabellen im Access-Frontend haben, wo immer möglich, die gleichen Namen wie die MySQL-Tabellen. Wenn ich in Ihrer Position wäre, würde ich ein Dienstprogramm zum Suchen und Ersetzen erhalten und alle SQL Server-Tabellennamen durch die MySQL-Tabellennamen im gesamten Access-Frontend ersetzen. Sie müssen wahrscheinlich immer einen Tisch gleichzeitig machen, aber meiner Meinung nach wird die Zeit, die dafür benötigt wird, mehr als wettgemacht werden, wenn es darum geht, das Frontend von Access zu entwickeln. Tabellen in Access von

{dbo_NAME}-{NAME}

+0

ein regulärer Anwendungsfall ist das Auschecken zu einem älteren Commit und Sie benötigen Datenbank arbeiten mit der älteren Codebasis. – PHPst

1

ich immer meine "zu SQL verknüpft" umbenannt.

Der Link erstellt den Tabellenname als {dbo_NAME}, aber Zugriff hat gelegentlich Probleme mit dem Präfix dbo_.

-2

Sie müssen eine Ansicht für die Tabelle erstellen und dann daraus auswählen.

+0

Deshalb haben wir Kommentare Feature. Bitte machen Sie Ihre Antwort näher erläutert. –

1

Aliase wäre nett, aber MySQL hat NICHT haben eine solche Funktion.

Eine Option, die Ihren Anforderungen neben der Erstellung einer Ansicht dienen kann, ist die lokale Verwendung des FEDERATED storage engine.

CREATE TABLE dbo_customers (
    id  INT(20) NOT NULL AUTO_INCREMENT, 
    name VARCHAR(32) NOT NULL DEFAULT '', 
    PRIMARY KEY (id), 
) 
ENGINE=FEDERATED 
DEFAULT CHARSET=latin1 
CONNECTION='mysql://[email protected]:9306/federated/customers'; 

Es gibt zur Zeit einige limitations with the FEDERATED storage engine. Hier sind ein paar besonders wichtige:

  • FÖDERIERTE Tabellen unterstützen keine Transaktionen
  • FEDERATED-Tabellen mit dem Abfrage-Cache nicht