2014-06-18 3 views
0
내 테이블의 자동 증가를 설정하기 위해 노력하고있어

st_id에 = 201,406,001바꿔 테이블은

쿼리 :

ALTER TABLE support_ticket AUTO_INCREMENT=201406001 

이 일이하고 일을 지금 내 "st_id" (AI, 기본 키)는 내가 원하는대로 201406001로 설정됩니다.

해당 쿼리를 실행했을 때 해당 쿼리를 실행할 때 테이블에 4 개의 행이 있었기 때문에 4 개의 행에 영향을 미쳤습니다.

그러나 이제 해당 4 개의 행 중 하나에서 특정 열의 상태를 업데이트하려고 시도하면 업데이트되지 않습니다.

내 ALTER TABLE 쿼리가 잘못 되었습니까?

다음과 같은 쿼리를 실행하여 st_id를 대상으로 만 시도했지만 오류가 발생했습니다.

ALTER TABLE 
support_ticket.st_id AUTO_INCREMENT=201406001 
FROM 
support_ticket 

ERROR

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM 
support_ticket' at line 3 

그래서 제 질문은이 일을했던 것처럼 나는 나의 원래의 질의에 충실해야한다고, 아니면 작업 2 쿼리를 얻기 위해 시도해야한다?

또한 첫 번째 쿼리를 실행하면 지금 내 열을 업데이트 할 수없는 이유가 될 수 있습니까?

ALTER TABLE을 처음 사용하기 때문에 도움이 될 것입니다. 양식

<form method="POST" action="close.php" enctype="multipart/form-data"> 
<input type="hidden" name="st_id" value="<?php echo escape ($t->st_id); ?>"> 
<h3>Close this ticket...</h3> 
<select name="status"> 
<option value="<?php echo escape($t->status); ?>">Current Status: OPEN</option> 
<option value="0">CLOSE</option> 
</select> 
<input type="submit" value="CLOSE"><input type="button" value="Cancel" onclick="window.location = '/admin/maintenance/'"> 
</form> 

액션 스크립트 : 여기

내 업데이트 코드입니다

include($_SERVER['DOCUMENT_ROOT'] . "/core/init.php"); 

$st_id = $_POST['st_id']; 

$status = $_POST['status']; 

$updatestatus = DB::getInstance()->UPDATE('support_ticket', $st_id, array(
    'status' => $status, 
)); 


echo "The ticket was successfully closed.<br /> 

내 UPDATE 문제에 대한 해결 방법 : 마지막이로 업데이트 할 그것을 가지고 :

$st_id = $_POST['st_id']; 

$status = $_POST['status']; 

$updatestatus = DB::getInstance()->query("UPDATE `support_ticket` SET `status` = $status WHERE `st_id` = $st_id"); 
+0

내 st_id 테이블 – echo

+0

에서 유일하게 AUTO_INCREMENT입니다 @ user0000000이 쿼리를 실행하면 열 업데이트 기능을 수행 할 수 있습니까? 저는 99 %의 업데이트 코드가 정확한지 확신합니다. – echo

+0

질문 2) st_id = 201406001 을 설정 하시겠습니까? –

답변

3

년 또는 달에 따르면 자동 증가하는 예심에 보인다. 다음과 같이 MySQL Custom AUTO_INCREMENT values를 사용할 수 있습니다 내가 선 기능 getNextCustomSeq을 변경

(첫번째 기사를 읽기) :

SET @ret = (SELECT concat(sSeqGroup,'-',lpad(nLast_val,6,'0'))); 

그럼 난 테이블과 triggeras을 만들

SET @ret = (SELECT concat(sSeqGroup,lpad(nLast_val,3,'0'))); 

에 다음과

CREATE TABLE ticket(
    id int not null primary key auto_increment, 
    autonum int not null 
); 

DELIMITER $$ 
CREATE TRIGGER ticket_autonums_bi BEFORE INSERT ON ticket 
FOR each ROW 
BEGIN 
    SET NEW.autonum = getNextCustomSeq(date_format(now(),'%Y%m'),date_format(now(),'%Y%m')); 
END$$ 
delimiter ; 

참고 :

insert into ticket(id) 
values (null),(null),(null),(null),(null), 
(null),(null),(null),(null),(null); 

가 삽입 된 데이터를 선택 : 이온 date_format(now(),'%Y%m')는 "201406"이

지금 어떤 값을 삽입 같은 올해와 몽을 반환합니다

mysql> select * from ticket; 
+----+-----------+ 
| id | autonum | 
+----+-----------+ 
| 1 | 201406001 | 
| 2 | 201406002 | 
| 3 | 201406003 | 
| 4 | 201406004 | 
| 5 | 201406005 | 
| 6 | 201406006 | 
| 7 | 201406007 | 
| 8 | 201406008 | 
| 9 | 201406009 | 
| 10 | 201406010 | 
+----+-----------+ 
10 rows in set (0.00 sec) 
+0

지금 당장 매월 1 일에 ALTER TABLE 쿼리를 실행하여 그 달에 st_id에 새로운 st_id를 부여해야합니다. I.E. 다음 달에 다시 실행할 것이며 201407001 = 2014 Year 07 Month 001 Ticket #. 이를 통해 우리는 매년 st_id를 생성하여 매년/year/001을 업데이트 할 수 있다고 말하고 있습니까?그렇다면 매우 유용한 솔루션이므로 매월 수동으로 수행 할 필요가 없습니다. FYI 지원 티켓 시스템 용입니다. 그게 왜 우리가 st_id 세트를 필요로하는지. 우리는 그것을 티켓에 사용하고 있습니다 # – echo

+0

내 대답을 편집했습니다. –

1

ALTER TABLE ... AUTO_INCREMENT=201406001다음 AI 값이 생성된다는 것을 의미합니다. 테이블의 현재 데이터 행의 id 값은 변경하지 않습니다.

"영향을받는 행"메시지는 ALTER TABLE의 일부로 테이블 복사본을 수행했음을 의미합니다. 이전 버전의 MySQL은 메타 데이터 변경을 수행하지 않아도된다고해도 테이블의 모든 행을 순진하게 복사합니다.

따라서 UPDATE ... WHERE id=201406001으로 시도하면 기존 행에는 적용되지 않습니다.

+0

기존 행을 업데이트 할 수없는 쿼리를 실행했기 때문에 그렇게 말하고 있습니까? – echo

+0

기존 테이블의 ID가 ALTER TABLE의 결과로 변경되지 않았으므로 201406001 이상의 값이 아닌 WHERE 절에서 "이전"값을 사용해야합니다. –

1

ALTER을 사용하면 내게 필요한 설명 (예 : 열 이름, 자동 증가 값)을 업데이트 할 수 있습니다.

테이블의 값을 업데이트하려면 UPDATE을 사용해야합니다.예 :

UPDATE support_ticket SET status = 'closed' WHERE id = 1234; 

SQL에 익숙하지 않은 경우 w3schools.com을 살펴보십시오. 그들에는 몇몇 자습서가있다 (http://www.w3schools.com/sql/sql_update.asp)

+0

다음 작업을 수행하여 업데이트했습니다. 내 업데이트 솔루션의 맨 위를 참조하십시오. @chresse – echo