MySQL 번호 생성 - MySQL beonho saengseong

MySQL에서 Oracle처럼 ROWNUM 사용법

SET구문을 사용하여 ROWNUM 값을 초기화 후 조회

SET @rownum:=0; SELECT @rownum:=@rownum+1, b.* FROM buyingboard b

WHERE절에서 초기화

SELECT @rownum:=@rownum+1, b.* FROM buyingboard b WHERE (@rownum:=0)=0;

FROM절에서 초기화

SELECT @rownum:=@rownum+1, b.* FROM buyingboard b, (SELECT @rownum:=0) TMP;

모두 결과가 아래와 같이 나온다.

But 초기화를 시키지 않을 경우 조회 할 때마다 번호가 바뀌게 된다.

ORDER BY 를 사용할 경우 (SELEC를 한번 더!)

SELECT @ROWNUM := @ROWNUM + 1 AS ROWNUM, A.* FROM (SELECT * FROM buyingboard ORDER BY bno DESC) A, (SELECT @ROWNUM := 0 ) B

JOIN문을 사용할 경우

① (SELECT @rownum:=0) TMP;를 JOIN문 아래에 추가

② INNER JOIN 사용 - INNER JOIN (SELECT @rownum:=0) T2

자동 번호 생성하기

ALTER TABLE article MODIFY COLUMN id INT(10) NOT NULL AUTO_INCREMENT;

auto_increment 를 걸기전에 해당 칼럼은 무조건 key 여야 함 (ALTER TABLE article ADD PRIMARY KEY(id))

desc 확인 결과 auto_increment 적용됨

id 칼럼에 UNSIGNED 속성 추가 (음수가 필요없기 때문에 사용)

alter table article modify column id int(10) unsigned not null auto_increment;

새 데이터 추가해보기 (id에 auto_increment 적용되었는지 확인하기)

INSERT INTO article SET regDate = NOW(), title = '새 데이터', `body` = '새 데이터'; INSERT INTO article SET regDate = NOW(), title = '새 데이터', `body` = '새 데이터';
id 데이터를 직접 수정하지 않아도 auto_increment 로 인해 자동 순서 됨

Mysql에서 primary key 로 보통 사용하는 auto_increment의 index값 말고,

데이터에 행 연속된 번호를 부여 하고 싶은 경우가 있을 겁니다.

이 경우에는 쿼리 문에 변수와 변수 연산을 해주면됩니다.

MYSQL에서 변수는 @변수명 으로 선언, 사용 할 수 있으며, 대입 연산자로는 := 을 쓰고 있습니다.

그러므로 

SELECT * FROM table WHERE score > 80 ORDER BY score

라는 쿼리에서 연속된 행 번호를 만들고 싶다면,

SELECT 구문에

@rownum := @rownum +1 AS 컬럼명

으로 넣어 주면 됩니다. 하지만 이렇게만 하면 에러가 생깁니다. 변수가 선언(declare되지 않았기 때문이죠)

그래서 FROM 문에 추가 해주도록 합니다

FROM table, (SELECT @rownum:=0 )

SELECT 구문전에 실행되는 FROM 절에서, 서브쿼리(sub query)를  이용해서,

rownum 이라는 변수를 초기화 해주었습니다.

그래서 전체 구문은

SELECT @rownum:@rownum+1 AS 컬럼명, * FROM table, (SELECT @rownum:=0)

이런식으로 사용 가능합니다.

[MySQL] select 리스트에서 줄번호 만들기

MySQL 에서 리스트를 select 시에 순서에 따른 줄번호가 필요한 경우가 있습니다.

이런 경우 사용자 변수에 값을 대입해서 사용할 수 있습니다.

select @num:=@num+1 as num, idx, title from (select @num:=0) a, board b order by idx desc

num 필드값이 1부터 시작해서 1씩 증가해서 반환됩니다. 페이징 등에서 초기값을 변경할려면

(select @num:=10) a,

위의 코드처럼 이 부분에서 초기값을 변경하면 됩니다.

티스토리 뷰

SELECT 한 값 앞에 행 번호를 매기고 싶을 때 유용한 방법.

오라클의 rownum 함수 기능을 다음과 같이 만들어 사용할 수 있다. 

예)

SELECT @num:=@num+1 AS num, title, name FROM (SELECT @num:=0) AS n, 테이블명

결과값

 num

title 

name 

 1

 제목1

이름1

 2

 제목2

이름2

 3

 제목3

이름3

 4

 제목4

이름4

...

 ...

 ...

Toplist

최신 우편물

태그