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;
왜 이것을 선호하는지 모르겠지만, 다른 사람들이 이것에 대해 도움이 필요하다면 여기 있습니다.:)
MySQL 매뉴얼에서 제안하는 솔루션은 다음과 같습니다.
expr을 LAST_INSERT_ID() 인수로 지정하면 인수 값이 함수에 의해 반환되고 LAST_INSERT_ID()에 의해 반환되는 다음 값으로 기억됩니다.이를 사용하여 시퀀스를 시뮬레이션할 수 있습니다.
시퀀스 카운터를 유지하고 초기화할 테이블을 만듭니다.
mysql> CREATE TABLE sequence (id INT NOT NULL); mysql> INSERT INTO sequence VALUES (0);
표를 사용하여 다음과 같은 시퀀스 번호를 생성합니다.
mysql> UPDATE sequence 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())을 사용하여 자체 시퀀스 값을 얻을 수 있으므로 자체 시퀀스 값을 생성하는 다른 클라이언트에 영향을 주거나 영향을 받지 않으므로 다중 사용자가 안전합니다.
이 기사를 확인해 보세요.그것이 당신이 원하는 것을 얻는 데 도움이 될 것이라고 믿습니다.테이블이 이미 존재하고 테이블에 데이터가 이미 있는 경우 다른 레코드에 대해 이미 존재하는 값을 할당하려는 auto_increment 때문에 발생하는 오류일 수 있습니다.
간단히 말해서, 다른 사람들이 이미 논평에서 언급했듯이, Oracle에서 생각되고 처리되는 시퀀스는 MySQL에 존재하지 않습니다.그러나 auto_increment를 사용하여 원하는 작업을 수행할 수 있습니다.
특정 오류에 대한 추가 세부 정보가 없으면 더 구체적인 도움말을 제공하기가 어렵습니다.
갱신하다
CREATE TABLE ORD (
ORDID INT NOT NULL AUTO_INCREMENT,
//Rest of table code
PRIMARY KEY (ordid)
)
AUTO_INCREMENT = 622;
이 링크는 auto_increment의 사용법을 설명하는 데도 유용합니다.AUTO_INCREMENT 값을 설정하는 것은 특별히 열 속성으로 지정된 것이 아니라 테이블 옵션으로 나타납니다.
또한 위의 링크 중 하나에 따라 테이블에 대한 변경을 통해 자동 증분 시작 값을 설정할 수 있습니다.
ALTER TABLE ORD AUTO_INCREMENT = 622;
업데이트 2 다음은 자동 증분을 사용하는 작업 sqlfiddle 예제에 대한 링크입니다.
이 정보가 도움이 되길 바랍니다.
SEQUENCES like it works on 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가 0이면 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.
-- ===================================================================
증분 테이블을 만들면 삽입된 행이 삭제되지 않습니다.그 이유는 ID-s가 들어 있는 db에 큰 dumb 데이터를 저장하지 않기 위해서입니다.그렇지 않으면 mysql을 다시 시작할 경우 최대 기존 행을 가져오고 문서 http://dev.mysql.com/doc/refman/5.0/en/innodb-auto-increment-handling.html 에서 언급한 대로 해당 시점부터 계속 증가합니다.
AUTO_INCREMENT와 다른 것이 필요한 경우에도 트리거를 사용할 수 있습니다.
저는 이것이 저에게 효과가 있다는 것을 알았습니다.열을 변경하지만 동일한 이름을 유지한다고 MYSQL에 말합니다.
변경 가능한 ORDID 변경 ORDID int(10) 부호 없는 auto_increment;
ORD 테이블의 ORDID 열에 자동 증분을 시작하라는 메시지가 표시됩니다.그런 다음 다음 명령을 실행합니다.
ALTERTABLE ORDER AUTO_INCREMENT = 85;
예를 들어, 85에서 다음 행을 시작합니다.
언급URL : https://stackoverflow.com/questions/26578313/how-do-i-create-a-sequence-in-mysql
'programing' 카테고리의 다른 글
출력 파일 이름, select-string이 있는 문자열이 아님 (0) | 2023.08.21 |
---|---|
Swift 3에서 현재 날짜를 확인하시겠습니까? (0) | 2023.08.21 |
테이블 가져오기 및 생성과 관련된 sql (0) | 2023.08.21 |
Excel VBA 숫자 배열을 내림차순으로 정렬하는 가장 빠른 방법은 무엇입니까? (0) | 2023.08.21 |
내 앱 또는 앱의 종속성이 Android Advertising Id 정책을 위반합니까? (0) | 2023.08.21 |