2012-03-08 6 views
3

테이블을 만들었습니다. master-domain. 이 표에는 3 개의 레코드 만 있어야합니다. mysql 데이터베이스가 그 수보다 많은 레코드만을 허용하도록 어떻게 제한 할 수 있습니까? 구체적인 SQL 명령이 있습니까?테이블에 저장할 수있는 레코드 수 제한

이 내 현재 SQL이다 :

CREATE TABLE `mydatabase`.`master-domain` 
(
`domain` VARCHAR(50) NOT NULL COMMENT 'Domain Name', 
PRIMARY KEY (`domain`) 
) 

PS. 나는 godaddy를 가지고 있으며 MySQL 데이터베이스 외에 phpMyAdmin도 포함되어 있습니다.

+4

레코드가 3 개 이하인 db 테이블을 원하십니까? 데이터베이스를 사용하지 않을 수도 있습니다. – Churk

+0

@churk 데이터베이스 사용은 필수이며이 테이블은 다른 규칙을 가진 일련의 테이블 중 하나입니다 – Omar

+0

다른 도메인을 추가하면 어떻게됩니까? – Ben

답변

1

MAX_ROWS parameter을 살펴볼 수 있습니다. 그러나,이 일반적으로 테이블 크기를 디스크 크기보다 크게 만드는 데 사용되는 믿고 당신이 그것을 사용하여 찾고 제한을 얻을 것이라고 생각하지 않습니다. 또는 상위 3 개 행을 선택할 수도 있습니다.

데이터베이스를 사용하여 3 개의 행만 저장할 필요가 있다는 점에 의문을 가지고 있습니다. 전체 낭비로 보입니다.

+0

(도메인 이름 \ VARCHAR (50) NOT NULL COMMENT '도메인 이름') PRIMARY KEY (\'도메인 \ ') )'CREATE TABLE \'mydatabase \'. \'마스터 도메인 \ MAX_ROWS = 3'이지만 작동하지 않습니다. 여전히 더 많은 레코드를 삽입 할 수 있습니다. – Omar

+1

MAX_ROWS는 행 수 제한에 사용되지 않습니다. 데이터를 저장하고 공간을 예약하는 방법에 대한 지침으로 DB 파일을 만들 때 사용됩니다. 아래에 내 대답을 올렸습니다. 시도 해봐. –

5

테이블의 기본 키를 ENUM 필드로 만들 수 있습니다. 예를 들어 :

CREATE TABLE test (
    id enum('1','2') NOT NULL, 
    domain varchar(50) NOT NULL, 
    primary key (id)); 

당신이 그것을 업데이트 명시 적으로 ID를 설정해야합니다 ""로, "1"또는 "2"*이 null 일 수 없습니다 만 각각 하나 개의 레코드가있을 수 있습니다. 신분증. 도메인은 여전히 ​​ domain 필드에 저장되어 있으므로이 데이터베이스를 쿼리하는 외부 시스템이 원하는 결과를 얻는데 아무런 문제가 없기를 바랍니다.

도메인 이름이 고유해야하는 현재 제한 사항을 복제하려면 unique key (domain)을 추가 할 수도 있습니다.

* enum이 실제로 문자열 유형이기 때문에 빈 문자열이 허용됩니다 (NULL과 같지 않음). 따라서 총 3 개의 ID 값을 허용하려면 두 개의 허용 된 ID 값을 지정하십시오.


번체 : 여기에서 달성/예방하려는 것은 무엇입니까? 테이블에 레코드를 추가 할 수있는 자동화 된 프로세스가 있습니까? 실수로 실수로 계정을 탈취 한 사람이 계정을 탈취 할 수 없다는 것을 확인하려고합니까?

레코드를 삽입 할 수있는 프로세스가 사용자에게 실행중인 경우 세 레코드를 테이블에 넣은 다음 자신의 INSERT 권한을 제거 할 수 있습니다. 기존 레코드를 여전히 변경할 수는 있지만 명시 적으로 권한을 다시 부여하지 않으면 더 이상 추가 할 수 없습니다.

+0

'set '을 사용하면 최대 8 (= 2^3) 개의 다른 ID를 가질 수 있습니다. 'ENUM' 타입이나 FK를 3 열이있는 다른 테이블에 추가해야합니다. –

+1

FK 답변에 대한이 질문을 참조하십시오 : [MySQL에서 트리거 및 제약 조건을 사용하는 레코드 수 제한] (http://stackoverflow.com/questions/9621509/limit-number-of-records-using-trigger-and-constraints- in-mysql/9622048 # 9622048) –

+0

@ypercube 고맙습니다.하지만 조금 더 자세히 설명해 주시겠습니까? 이 테이블 정의를 테스트 한 결과 세 항목으로 제한됩니다. ID 필드는 중복을 가질 수 없으며, 널이 될 수 없으며 다른 값은 1 또는 3으로 변경된 후 "중복 항목"오류를 생성합니다. 나는 내가 무엇인가를 바라보고있는 것을 완전히 믿을 만하다. 그러나 나는 무엇을 말할 수 없다. 다시 한 번 감사드립니다! – octern

0

MySQL에서 제공하는 inbuilt 기능이 없다고 생각합니다. 한 가지 해결책은 트리거를 만들 수 있다는 것입니다.

CREATE TRIGGER your_trigger_name 
BEFORE INSERT ON master-domain 
FOR EACH ROW 
BEGIN 
    DECLARE cnt INT; 

    SELECT count(*) INTO cnt FROM master-domain; 

    IF cnt = 10 THEN 
     SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'You can store only 3 records.'; 
    END IF; 
END; 

테이블 위에서 위의 트리거를 시도하십시오. 희망이 당신을 도울 것입니다.

관련 문제