MySQL에서 시퀀스를 만들려면 어떻게 하나요?

MySQL에서 시퀀스를 만들려고 합니다(저는 전체적으로 SQL을 매우 처음 사용합니다). 다음 코드를 사용하고 있지만 오류가 발생합니다:

CREATE SEQUENCE ORDID INCREMENT BY 1 START WITH 622;

ORDID는 제가 사용 중인 테이블의 필드를 가리킵니다. 시퀀스를 올바르게 만들려면 어떻게 해야 하나요?

편집합니다:

MySQL은 시퀀스를 사용하지 않는다고 합니다. 현재 다음 코드를 사용하고 있지만 이것도 오류가 발생합니다. 어떻게 수정해야 하나요?

CREATE TABLE ORD (
ORDID NUMERIC(4) NOT NULL AUTO_INCREMENT START WITH 622,
//Rest of table code

편집:

해결책을 찾은 것 같습니다. (제가 사용하던) phpMyAdmin의 경우 다음 코드를 사용할 수 있습니다.

ALTER TABLE ORD AUTO_INCREMENT = 622;

왜 이것을 선호하는지 모르겠지만 다른 사람이 이것에 대해 도움이 필요하다면 여기에 있습니다.)

질문에 대한 의견 (7)

이것은 [MySQl 매뉴얼에서 제안하는] 해결책입니다1:

expr이 LAST_INSERT_ID()의 인자로 주어지면, 인수의 값은 인수가 함수에 의해 반환되고 다음 값으로 기억됩니다. LAST_INSERT_ID()가 반환할 값입니다. 이 함수는 다음을 시뮬레이션하는 데 사용할 수 있습니다. 시퀀스를 시뮬레이션하는 데 사용할 수 있습니다:

시퀀스 카운터를 보관할 테이블을 생성하고 초기화합니다:

mysql> CREATE TABLE sequence (id INT NOT NULL); mysql> INSERT INTO sequence VALUES (0);

테이블을 사용하여 다음과 같은 시퀀스 번호를 생성합니다:

mysql> UPDATE 시퀀스 SET id=LAST_INSERT_ID(id+1); mysql> SELECT LAST_INSERT_ID();

UPDATE 문은 시퀀스 카운터를 증가시키고 다음 번에 LAST_INSERT_ID()를 호출하여 업데이트된 값을 반환하도록 합니다. 그리고 SELECT 문은 해당 값을 검색합니다. mysql_insert_id() C API 함수를 사용하여 값을 가져올 수도 있습니다. 섹션 23.8.7.37을 참조하십시오, "mysql_insert_id()".

LAST_INSERT_ID()를 호출하지 않고도 시퀀스를 생성 할 수 있지만 이런 식으로 함수를 사용하는 것의 유용성은 ID 값이 서버에서 마지막으로 자동 생성된 값으로 유지된다는 점입니다. 그것은 여러 클라이언트가 UPDATE 문을 실행할 수 있으므로 다중 사용자에게 안전합니다. 문을 실행하고 SELECT 문을 사용하여 자신의 시퀀스 값을 가져올 수 있기 때문에 다중 사용자에게 안전합니다. (또는 mysql_insert_id()), 다른 클라이언트에 영향을 주거나 영향을 받지 않고 자체 시퀀스 값을 생성하는 클라이언트.

해설 (0)
해결책

이 문서]1를 확인하세요. 원하는 것을 얻는 데 도움이 될 것입니다. 테이블이 이미 존재하고 그 안에 데이터가 이미 있는 경우, 다른 레코드에 이미 존재하는 값을 할당하려고 시도하는 자동 증가로 인해 오류가 발생할 수 있습니다.

요컨대, 다른 사람들이 이미 댓글에서 언급했듯이 오라클에서 생각하고 처리하는 시퀀스는 MySQL에 존재하지 않습니다. 그러나 자동 증가를 사용하여 원하는 것을 달성할 수 있습니다.

특정 오류에 대한 추가 세부 정보가 없으면 더 구체적인 도움을 드리기 어렵습니다.

업데이트

CREATE TABLE ORD (
  ORDID INT NOT NULL AUTO_INCREMENT,
  //Rest of table code
  PRIMARY KEY (ordid)
)
AUTO_INCREMENT = 622;

이 링크는 자동 증가의 사용법을 설명하는 데 도움이 됩니다. 자동 증가 값 설정은 열 속성으로 특별히 지정되는 것이 아니라 테이블 옵션으로 설정하는 것으로 보입니다.

또한 위의 링크 중 하나에 따라 테이블 변경을 통해 자동 증가 시작 값을 설정할 수도 있습니다.

ALTER TABLE ORD AUTO_INCREMENT = 622;

업데이트 2 다음은 자동 증분을 사용하는 작동하는 SQLFiddle 예제에 대한 링크입니다.
이 정보가 도움이 되길 바랍니다.

해설 (5)

증분 테이블을 만들 때 삽입 된 행을 삭제하지 않도록주의해야합니다. 그 이유는 ID가 포함 된 큰 멍청한 데이터를 DB에 저장하지 않기 위해서입니다. 그렇지 않으면 mysql을 다시 시작할 때 문서 http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html 에 언급된 대로 최대 기존 행을 가져와서 그 시점부터 증분을 계속합니다.

해설 (0)

시퀀스는 다음과 같이 그것에서 작동합 firebird:

-- =======================================================

CREATE TABLE SEQUENCES  
(  
  NM_SEQUENCE VARCHAR(32) NOT NULL UNIQUE,  
  VR_SEQUENCE BIGINT      NOT NULL  
);  

-- ======================================================= --시퀀스를 만듭니다 sSeqName 설정 초기 값입니다. -- =======================================================

DROP PROCEDURE IF EXISTS CreateSequence;  

DELIMITER :)  
CREATE PROCEDURE CreateSequence( sSeqName VARCHAR(32), iSeqValue BIGINT )  
BEGIN  
  IF NOT EXISTS ( SELECT * FROM SEQUENCES WHERE (NM_SEQUENCE = sSeqName) ) THEN  
    INSERT INTO SEQUENCES (NM_SEQUENCE, VR_SEQUENCE)  
    VALUES (sSeqName   , iSeqValue  );  
  END IF;  
END :)  
DELIMITER ;  

-- CALL CreateSequence( 'MySequence', 0 );  

-- ======================================================================= --단위로 순서의 값을 sSeqName 여 iIncrement 하고 반환합니다. -경 iIncrement 제로,의 현재 값을 반환합니 sSeqName. -- =======================================================================

DROP FUNCTION IF EXISTS GetSequenceVal;  

DELIMITER :)  
CREATE FUNCTION GetSequenceVal( sSeqName VARCHAR(32), iIncrement INTEGER )  
RETURNS BIGINT  -- iIncrement can be negative  
BEGIN  
  DECLARE iSeqValue BIGINT;  

  SELECT VR_SEQUENCE FROM SEQUENCES  
  WHERE  ( NM_SEQUENCE = sSeqName )  
  INTO   @iSeqValue;  

  IF ( iIncrement  0 ) THEN  
    SET @iSeqValue = @iSeqValue + iIncrement;  

    UPDATE SEQUENCES SET VR_SEQUENCE = @iSeqValue  
    WHERE  ( NM_SEQUENCE = sSeqName );  
  END IF;

  RETURN @iSeqValue;
END :)  
DELIMITER ;  

-- SELECT GetSequenceVal('MySequence', 1);  -- Adds 1 to MySequence value and returns it.

-- ===================================================================

해설 (1)

필요할 경우 sth 다른 다음의 특징을 계속 사용할 수 있습 트리거합니다.

해설 (0)