복붙노트

[SQL] MySQL의 : 계산 된 열

SQL

MySQL의 : 계산 된 열

난 그냥 문제에 SQL 및 달렸다을 사용하기 시작하고 있습니다.

내 데이터베이스에서 나는 현재 두 테이블, 영화관 및 극장이있다. 나는 카운트 영화관 테이블의 영화와 같은 CinemaID (외래 키)와 함께 극장 테이블에있는 극장의 수. 내가 같은 일에 도착하는 영화관 테이블에서 "극장 번호의 #을 열을 만들려고 해요 SQL 쿼리 :

SELECT cinemas.CinemaID,Town,COUNT(*) AS '# of Theatres'
FROM cinemax.cinemas,cinemax.theatres
WHERE cinemas.CinemaID=theatres.CinemaID
GROUP BY cinemas.CinemaID;

그러나 자동으로 위의 쿼리와 삽입 각 행에 값을 수행하는, 영화관 테이블의 열을 만들 수 있는지 알고 싶어.

내가 단지 (심지어 가능하면) 이러한 계산 열을 만드는 방법을 배우고 싶다, 속도가 정말 문제가되지 않습니다 그래서 아주 작은 데이터베이스가 될 것입니다.

해결법

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

    1.것이 가능하다. 하지만 당신은 그것을 할 것이다.

    것이 가능하다. 하지만 당신은 그것을 할 것이다.

    즉, 비정규라고 - 보통 전혀 좋은 생각이 아니다.

    때로는 그러나, 당신은 절대적으로합니다 (예 좋은 이유 근처에 아무데도) 어떤 이상한 이유로 뭔가를 비정규 화해야 할 수도 있습니다. 이러한 경우, 자동으로 트리거 코드를 추가 아무것도 결과에 영향을 미칠 수있는 시스템에 변경 될 때마다 값을 관리해야합니다.

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

    2.계산 된 열은 일반적으로 사용자가 행마다 산출 할 수있는 값을 의미한다. MySQL은 그를 지원하지 않지만, SQL Server는 않습니다. 예를 들어, 영구적으로 두 열의 합을 저장합니다 :

    계산 된 열은 일반적으로 사용자가 행마다 산출 할 수있는 값을 의미한다. MySQL은 그를 지원하지 않지만, SQL Server는 않습니다. 예를 들어, 영구적으로 두 열의 합을 저장합니다 :

    create table Table1 (a int, b int, c as a+b persisted)
    

    그러나, 당신은 집계, 행의 그룹에 대한 값을 저장하기 위해 찾고 있습니다. MySQL과 SQL 서버 지원은 집계와 전망을 구체화하지 않지만, 오라클을 수행합니다

    create table Table1 (a int, b int);
    
    create materialized view View1 as
    select  a
    ,       count(*) as Cnt
    from    Table1
    group by
        a;
    

    그러나 MySQL은, 당신이 할 수있는 가장 가까운 주기적으로 테이블을 채 웁니다 cronjob에이다 :

    truncate table Table1Summary;
    insert Table1Summary (a, Cnt) select a, count(*) from Table1;
    

    당신은 구체화 된 뷰와 같은 테이블을 조회 할 수 있습니다; 그것은 빨리 될 수 있지만 최신이 보장되지 않습니다.

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

    3.MySQL의에서 당신은 당신은 당신이하고자 실제 열을 원하는 경우

    MySQL의에서 당신은 당신은 당신이하고자 실제 열을 원하는 경우

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

    4.MySQL은 지원 5.7에서 열을 생성 않습니다

    MySQL은 지원 5.7에서 열을 생성 않습니다

  5. from https://stackoverflow.com/questions/5422729/mysql-computed-column by cc-by-sa and MIT license