MySQL 번호 자동입력 질문입니다. 0 15 2,137

by 지후 [2016.01.27 10:04:34]


기본정보 테이블

ID   | 품목 | 가격 | 번호
31   | 콘칩 | 300  | 
32   | 칸쵸 | 300  | 
33   | 콘칩 | 300  | 
34   | 칸쵸 | 300  | 

원하는 결과 값

ID   | 품목 | 가격 | 번호
31   | 콘칩 | 300  |  1
32   | 칸쵸 | 300  |  2
33   | 콘칩 | 300  |  3
34   | 칸쵸 | 300  |  4

4 라는 숫자를 가지고 자동으로 번호를 채우는 방법을 알고 싶습니다.

"UPDATE TABLENAME SET 번호 = 4 - 1" 이런식으로 날렸거든요.

숫자 4 를 저렇게 순차적으로 증가하면서 채워주고 싶습니다.

답변 부탁드립니다.

 

 

by 아발란체 [2016.01.27 10:10:41]

이거.. 바로 아래 질문주셔서, 마농님이 답 주시고, 채택까지 해주신 내용 아닌가요?

원하는 결과값을 보면 똑같은 질문인뎅... 혹 아래 채택하신 것 실행 안해보셨나요?

그거 해보고 이해하시면 내용이 조금 달라도 증가하는 원리는 같기 때문에 금방 하실 수 있을 것 같은뎅.. >ㅅ<)/


by 지후 [2016.01.27 10:21:01]

답변주신대로 명령어를 날려보았는데 잘 안되더라구요 ㅠ
한줄 한줄 명령어 날려보기도 하고 해봤는데 sql문 오류라고 나와서 ~
프로그래밍 할때
query = new MySqlCommand("SELECT * FROM test ORDER BY type_ID ASC", this.conn);
이런형태로 날려주거든요.
다른 대안으로 레코드수를 구하고 구한 수로 저렇게 채워나갈려구요.


by 아발란체 [2016.01.27 10:33:59]

....MySqlCommand("SET @cnt := 0"); 를 먼저 수행하고

....MySqlCommand("UPDATE 테이블명 SET 번호 = @cnt := @cnt + 1 ORDER BY id");

식으로 하면 될 것 같습니다. 이게 에러 발생하나요? 에러 발생시 에러 내용 공유 부탁드립니다.


by 지후 [2016.01.27 10:49:07]

네 아발란체님 말씀대로 명령어 날려보았습니다.
프로그래밍 작업이라 그런지 SQL문 오류 나옵니다.
두번째 구문시에도 알수 없는 쿼리식이라고 나옵니다.
아마 위에 처럼 UPDATE 문 한 문장으로 날려줘야 인식 될 듯합니다.


by 마농 [2016.01.27 10:38:24]

SQL 작업이 아니라 프로그램 작업이었나요?

SQL 커맨드 창에서 작업하는 방법 알려드린 거에요.

1회성 작업이라면? 프로그램 짜지 마시고 커맨드 창에서 작업하세요.


by 지후 [2016.01.27 10:51:52]

네 마농님~
프로그래밍 하구 있습니다. 쿼리를 거의 한줄 식으로 날려주는데..
일회성 작업이 아니라 계속 여기저기서 날려줘야대서요.
4라는 숫자를 번호컬럼에 순차적으로 채우는 업데이트 명령어를 써야 하는데 ㅠ 잘 안되네요.
 


by 아발란체 [2016.01.27 11:02:26]

오류 뭐라고 뜨는지 올려주시겠어요?


by 지후 [2016.01.27 11:10:54]

....MySqlCommand("UPDATE 테이블명 SET 번호 = @cnt := @cnt + 1 ORDER BY id");
'@cnt := @cnt + 1 ORDER BY id' 쿼리식 연산자가 없는 구문 오류 입니다.
라고 나옵니다.


by 대한민국만세 [2016.01.27 11:03:57]

@cnt 대신에 프로그램에서 따로 하나 변수로 선언하여 그 변수를 SQL문에 대입하면 될거 같은데요.


by 지후 [2016.01.27 11:12:40]

오류식이 변수와는 관계가 없습니다.
변수를 대입하든 문자열을 대입하든 같으니까요.


by 아발란체 [2016.01.27 11:19:52]

구글링 해보니 같은 질문이 있습니다.

http://stackoverflow.com/questions/5524632/how-can-i-use-a-mysql-user-defined-variable-in-a-net-mysqlcommand

 

내용보면 접속 기술자에 "Allow User Variables=True"를 써줘야 한다고 합니다.

$connectionstring = "Server=$Server;Port=$port;Database=$DataBase;Uid=$User;Pwd=$Password;allow zero datetime=yes;Allow User Variables=True"

 

위와 같이 해보시면 에러가 사라질 것 같습니다.


by 지후 [2016.01.27 11:29:56]

참조해서 연결시 구문에 넣어줬는데..
아에 데이터를 못 읽어오네요 ㅠ
open 자체가 안됩니다.ㅠ 구글링으로 다른 방법을 계속 찾아보고 있습니다.
이 문제로 인해 답변 계속 해드리게 해서 죄송합니다.
 


by 마농 [2016.01.27 13:05:17]

구문 오류 문제를 떠나서...

지금 하고자 하는 작업에 적절한 문장인지 의문이네요?

4 라는 특정 숫자를 계속 강조하는 이유가 뭔지도 궁금하네요?

이런 작업이 1회성이 아리라는 점도 의문이구요.

문법 오류에 집착하지 마시고 처음부터 다시 생각해 보셔야 하는게 아닐지?


by 지후 [2016.01.27 13:12:40]

4라는 특정숫자의 의미는 만약 테이블에 레코드 수를 구하고 레코드의 값이 30이라면
30의 숫자를 가지고 1~30까지 번호를 부여하겠죠. 그래서 명령을 날려줄때마다 데이터의 개수가 30일수도있고 100개일수도 있기때문이죠. 번호를 부여할려는 목적은 100개의 데이터중 삭제되는 데이터가 있다면 명령을 날려줘서 번호를 재 부여 재 정렬 하고 싶은 목적입니다.

여러가지 방법을 생각하다가.. 한문장의 명령어로 번호를 부여해주는게 어려워서..
다른 방법으로 먼져 레코드값을 구하는 명령어를 날려 레코드 수를 구하고.. 그 수를 가지고
번호라는 컬럼에 순차적으로 증가해서 넣어줄려는 겁니다. 다른 여러방도로 방법을 찾고 있으나..
구글링도 여러 방도도 어려워서 이렇게 질문을 남기게 되었습니다.


by 마농 [2016.01.27 13:30:24]

해당 번호 항목을 항상 최신으로 유지하기 위한
일련의 작업은 너무나도 비효율적인 방법입니다.
데이터에 변경이 가해질 때마다 모든 데이터를 찾아 갱신해 줘야 하는 작업이죠.
이 경우 번호 항목을 따로 두어 관리하지 않고
조회 할때 가공하여 만들어 내는 방법이 좋습니다.
만약 번호가 실제 목적이 아니고 정렬이 목적이라면 더더욱 필요 없는 항목입니다.
그냥 ID 로만 정렬하면 되는 거죠.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입