source

MariaDB Virtual Columns - 해시를 얻을 수 있습니까?

bestscript 2023. 1. 16. 20:07

MariaDB Virtual Columns - 해시를 얻을 수 있습니까?

MariaDB에는 다른 열 데이터에 대한 작업을 자동으로 수행할 수 있는 가상 열이 있습니다.예를 들어, 아래 표 정의에 나타난 것처럼 단순히 10 또는 1000으로 나누어 메트릭 측정의 다른 단위로 데이터를 표시하려면 이 방법이 좋습니다.

CREATE TABLE a (
     id INT NOT NULL AUTO_INCREMENT,
     distance_meters INT (11),
     distance_kilometers FLOAT (11,3) AS (distance_meters / 1000) VIRTUAL,
     PRIMARY KEY ( id )
) ENGINE=InnoDB;

그러나 테이블 열의 하위 집합의 해시인 가상 열을 만들려면 어떻게 해야 합니까?예: 아래 표는 이름과 급여를 해시하는 것을 목적으로 하고 있기 때문에 이전 해시 리스트와 비교하여 나중에 직원 이름이나 급여가 변경되었는지 쉽게 확인할 수 있습니다.나는 전체 줄의 해시를 원하지 않는다.

CREATE TABLE employees (
    id INT NOT NULL,
    name VARCHAR(200),
    salary INT(12),
    age int(3),
    hash VARCHAR(AS (MD5(concat(name, salary)))) PERSISTENT,
    PRIMARY KEY ( id )
) ENGINE=InnoDB;

https://mariadb.com/kb/en/mariadb/documentation/sql-commands/data-definition/create/virtual-columns/에서 설명한 대로 중괄호를 사용하여 구문을 사용합니다.

교체하다VARCHAR타고CHAR(32)md5 해시의 길이는 32자입니다.

사용하다concat_ws대신concat이름이나 급여가 있을 때 적절히 처리하다NULL이름과 급여는 공백으로 구분합니다.

CREATE TABLE employees (
    id INT NOT NULL,
    name VARCHAR(200),
    salary INT(12),
    age int(3),
    hash CHAR(32) AS (MD5(concat_ws(' ', name, salary))) PERSISTENT,
    PRIMARY KEY ( id )
) ENGINE=InnoDB;

이 표현은 MariaDB 가상 컬럼에 대해 완전히 합법적입니다.영구 열이므로 인덱싱할 수도 있습니다.

참고로 VARCHAR 뒤에 구문 오류가 있습니다.

언급URL : https://stackoverflow.com/questions/27204514/mariadb-virtual-columns-can-i-have-a-hash