복붙노트

[SQL] 나는 MySQL은 테이블 별칭을 만들려면 어떻게해야합니까

SQL

나는 MySQL은 테이블 별칭을 만들려면 어떻게해야합니까

나는 MySQL의에 (A MSSQL 서버에 테이블을 연결했다)는 MS Access 응용 프로그램을 마이그레이션하고 있습니다.

일부 MSACCESS 테이블 명명 문제를 극복하기위한 수단으로, 나는 MySQL 데이터베이스에있는 기존 테이블을 가리 킵니다 MySQL의 테이블 별칭을 추가 할 수있는 솔루션을 모색하고있다. 이상적으로는 MySQL은 또한 고객의 테이블을 가리키는 것 MySQL의에서 별명 'dbo_customers'을 만들 싶습니다.

나는이 같은 쿼리 안에 별칭에 테이블 이름을 원하고 있지 않다 명확하게하려면 :

SELECT * FROM customers AS dbo_customers

그러나 오히려 내가 할 문제 다음 쿼리 싶습니다 :

SELECT * FROM dbo_customers

그것은 고객 테이블에서 데이터를 반환해야합니다.

해결법

  1. ==============================

    1.내 머리 위로 떨어져

    내 머리 위로 떨어져

    CREATE VIEW dbo_customers AS
    SELECT * FROM customers
    

    뷰가 갱신 가능으로 어쩌면하지만 최적의 솔루션은 작동합니다. 확실히 읽기 위해 일에만

  2. ==============================

    2.당신은보기를 만들 수 있습니다.

    당신은보기를 만들 수 있습니다.

    CREATE VIEW dbo_customers AS SELECT * FROM customers;
    

    그런 당신을 위해 일을하지 않는 경우에는 테이블의 그림자 사본을 만들어보십시오 및 동기화 테이블을 유지하기 위해 트리거를 사용할 수 있습니다.

    예를 들면 :

    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
    

    아니 정확히 '별칭', 멀리 완벽한에서. 다른 모든 방법이 실패한다면 그것은 옵션입니다.

  3. ==============================

    3.MERGE 테이블 엔진을 통해 MySQL을위한 간단한 해결책이있다 :

    MERGE 테이블 엔진을 통해 MySQL을위한 간단한 해결책이있다 :

    우리는 테이블 이름 rus_vacancies을하고 영어 상응하는 필요 상상

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

    이제 테이블 rus_vacancies는 읽기 - 쓰기 작업 테이블 eng_vacancies 같음

    한 가지 제한 - 원래 테이블이 엔진이 있어야는 =의 MyISAM은 (쉽게 "테이블 변경 rus_vacancies 엔진 =의 MyISAM"하여 수행 할 수 있습니다)

  4. ==============================

    4.@OMG 조랑말 조랑말 코멘트 말했다 :

    @OMG 조랑말 조랑말 코멘트 말했다 :

    ... 그것은 나에게 명백한 답을 보인다.

    당신은 MySQL의 테이블 고객에 대한 ODBC 연결된 테이블을 만들 경우 고객을 호출하고 모든 당신은 dbo_customers에 테이블 이름을 변경하기 만하면됩니다. 나는이 목적을 위해 MySQL의에서보기를 만들 볼 수있는 절대적으로 필요하다.

    단지 혼란 및 유지 보수 문제 (즉, 그것은 연결된 테이블에 대한 간단 이어질 것 - 즉, MySQL의 테이블이 같은 일 이름없는 때 나는 SQL Server 테이블 이름을 사용 된 액세스 응용 프로그램을 싫어했다 가능한 액세스 프론트 엔드)은 MySQL의 테이블과 같은 이름을 가지고있다. 나는 당신의 위치에 있다면, 나는 검색을 얻고 유틸리티를 교체하고 전체 액세스 프론트 엔드에 걸쳐 MySQL의 테이블 이름을 가진 모든 SQL Server 테이블 이름을 바꾸십시오. 당신은 가능성이 한 번에 그것을 하나 개의 테이블을해야 할 것입니다,하지만 내 생각에 지금이 작업을 수행하는 데 걸리는 시간 이상의 선명도에 액세스 프론트 엔드의 개발과 향후를 위해 구성 될 예정이다.

  5. ==============================

    5.난 항상에서 Access에서 내 "SQL 연결"테이블의 이름을 변경

    난 항상에서 Access에서 내 "SQL 연결"테이블의 이름을 변경

    {NAME}에 {dbo_NAME}.

    링크는 {dbo_NAME} 같은 테이블 이름을 만들지 만 액세스 때때로 dbo_ 접두사에 문제가 있습니다.

  6. ==============================

    6.별명은 좋은 것입니다,하지만 MySQL은 그러한 기능이 없습니다.

    별명은 좋은 것입니다,하지만 MySQL은 그러한 기능이 없습니다.

    당신의 요구를 충족 할 수 있습니다 하나의 옵션은 뷰를 작성 외에, 로컬 FEDERATED 스토리지 엔진을 사용하는 것입니다.

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

    페더 레이 티드 스토리지 엔진과 함께 몇 가지 제한 사항이 현재있다. 여기에 몇 특히 중요한 것들이다 :

  7. ==============================

    7.당신은 고객 테이블에 의해 백업됩니다 dbo_customers라는 뷰를 만들 수 있습니다.

    당신은 고객 테이블에 의해 백업됩니다 dbo_customers라는 뷰를 만들 수 있습니다.

  8. from https://stackoverflow.com/questions/1890155/how-do-i-create-a-table-alias-in-mysql by cc-by-sa and MIT license