Soru MySQL'de bir tablo takma adını nasıl oluştururum


Bir MS Access uygulamasını (MSSQL Sunucusuna bağlanmış tablolar) MySQL'e geçiriyorum.

Bazı MSAccess tablo adlandırma sorunlarının üstesinden gelmenin bir yolu olarak, MySQL veritabanındaki mevcut bir tabloya işaret edecek bir MySQL tablo takma adının eklenmesi için bir çözüm arıyorum. İdeal olarak, mysql'de mysql'de de müşterinin masasına işaret eden 'dbo_customers' takma adını oluşturmak istiyorum.

Açık olmak gerekirse ben değil Bu gibi bir sorgu içinde bir tablo adı takma istemek:

SELECT * FROM customers AS dbo_customers

Ancak, aşağıdaki sorguyu yayınlamak istiyorum:

SELECT * FROM dbo_customers

ve müşterinin tablosundan veri döndürmesini sağlayın.


21
2017-12-11 18:56


Menşei


Tabloyu neden yeniden adlandırmıyorsunuz? - OMG Ponies
Bazı durumlarda tabloyu yeniden adlandırmak işe yaramaz. Örneğin, farklı adlandırma kurallarına sahip iki ORM sistemi ile çalışıyorsanız, her ikisinin de iyi çalışması için bir takma ada sahip olmanız gerekir. Bu durumda, bu arada kabul edilen çözüm benim için yeterince iyi oldu :) - Nimo


Cevaplar:


Başımın üstünden

CREATE VIEW dbo_customers AS
SELECT * FROM customers

Belki de en iyi çözüm değil ama görünüm güncellenebilir olarak çalışmalıdır. Kesinlikle Okumak İçin Çalışacak


33
2017-12-11 18:58



İlk yazımda da verileri güncelleyebilmem gerektiğini söylemeliydim. Görüşlerin bir şekilde güncellenmesi mümkün değilse, bir görünümün ihtiyaçlarımı karşılayacağını sanmıyorum. - rswolff
evet, bu manzara güncellenebilir. - longneck
Bunun gerçekten en basit çözüm olduğunu düşünmüyorum. - David-W-Fenton
Kesinlikle en basit David. Orijinal tabloya neredeyse aynı şekilde davranacaktır. Bunu yazabilir, çeşitli sorgularda birleştirebilirsiniz, vb. Performans bilge, emin değilim, ancak yazılım ve sorgularınızın bakış açısından, görünüm MOST amaçları için gerçek bir tablodan ayırt edilemez olacaktır. - Shayne
Neden bu hiç kötü bir çözüm olmaz? Soruyu mükemmel bir şekilde yanıtlıyor gibi görünüyor. Verimsiz mi? Özgün geliştiricinin, "güvenlik-belirsizliği" olarak, kullanıcı bilgi tablosunu uzun bir rastgele karakter dizesi olarak adlandırdığı eski bir sistemle çalışıyorum. "Kullanıcılar" olarak erişmeyi çok isterim. (Çeşitli nedenlerle hayır, mevcut tabloyu yeniden adlandıramıyorum.) - Stephen R


Bir Görünüm.

CREATE VIEW dbo_customers AS SELECT * FROM customers;

Bu sizin için işe yaramazsa, tablonun gölge kopyasını oluşturmayı deneyebilir ve tabloları senkronize tutmak için Tetikleyicileri kullanabilirsiniz.

Örneğin:

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

Tam olarak bir 'takma' değil ve mükemmel olmaktan çok uzak. Ama tüm bunlar başarısız olursa bir seçenek.


6
2017-12-11 18:58





@OMG Ponies ponies bir yorumda şunları söyledi:

Tabloyu neden yeniden adlandırmıyorsunuz?

... ve bana açık bir cevap gibi görünüyor.

MySQL tablo müşterileri için ODBC bağlantılı bir tablo oluşturursanız, bunlar müşteri olarak adlandırılır ve yapmanız gereken tek şey tabloyu dbo_customers olarak yeniden adlandırmaktır. Bu amaçla MySQL'te bir görünüm oluşturmak için görebileceğim kesinlikle bir şey yoktur.

Bu, MySQL tabloları aynı şey olarak adlandırılmadığında SQL Server tablo adlarını kullanan bir Access uygulamasına sahip olmaktan nefret ediyorum - bu sadece kafa karıştırıcı ve bakım sorunlarına yol açacaktır (örn. Mümkün olan yerlerde, MySQL tabloları ile aynı isimlere sahip olmak için Erişim ön ucu. Eğer senin yerinde olsaydım, bir arama alır ve yardımcı programını değiştiririm ve tüm SQL Server tablosu isimlerini, tüm Access ön uç boyunca MySQL tablo isimleri ile değiştirirdim. Muhtemelen bir masada bir tablo yapmak zorunda kalırsınız, ama bence, şimdi bunu yapmak için gereken süre, Erişim ön ucunun geliştirilmesi ile ileriye dönük olarak ortaya konulandan daha fazla olacaktır.


1
2018-01-15 19:21



Düzenli kullanım durumunda daha eski bir işlem için ödeme yapmanız ve eski kod tabanı ile veritabanı çalışmanızın gerekmesidir. - PHPst


Her zaman Access'teki "SQL'e bağlı" tablolarımı yeniden adlandırırım.

{dbo_NAME} için {NAME}.

Bağlantı, tablo adını şöyle oluşturur: {dbo_NAME} Ancak erişim bazen dbo_ öneki ile ilgili sorunlar yaşıyor.


1
2017-08-23 19:08





Takma adlar güzel olurdu, ancak MySQL DEĞİL böyle bir özellik var.

Görünüm oluşturmanın yanı sıra, ihtiyaçlarınızı karşılayabilecek bir seçenek de FEDERATED depolama motoru Yerel olarak.

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://fed_user@localhost:9306/federated/customers';

Şu anda bazı FEDERATED depolama altyapısı ile sınırlamalar. İşte özellikle önemli olanlardan birkaçı:

  • FEDERATED tabloları işlemleri desteklemiyor
  • FEDERATED tabloları sorgu önbelleği ile çalışmaz

1
2017-07-02 13:27





Bir görünüm adlı dbo_customers tarafından desteklenen customers tablo.


0
2017-12-11 18:59





MERGE tablo motoru ile MySQL için daha basit bir çözüm var:

adında bir tablo olduğunu hayal et rus_vacancies ve İngilizce eşdeğerine ihtiyacı var

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);

şimdi masa rus_vacancies tabloya eşittir eng_vacancies herhangi bir okuma-yazma işlemi için

bir sınırlama - orijinal tablo MOTOR = MyISAM olmalıdır (bu kolayca yapılabilir "alter table rus_vacancies ENGINE=MyISAM")


-1
2018-01-15 10:03





Tablo için bir görünüm oluşturmalı ve bundan seçmelisiniz.


-2
2017-09-17 12:26



Bu yüzden yorum özelliği var. Lütfen cevabınızı daha açıklayınız. - Ahmed Ekri