프로그램

mysql alter change, transaction.

(주)CKBcorp., 2014. 9. 11. 11:58
반응형


별거 아닌 걸로 삽질을 좀 많이 하다가 알아낸 거라 쓴다. 

나처럼 삽질 하는 사람이 없길. 나무아미타불....( 응? )



1. mysql 의 alter.


일반적으로 테이블을 변경할 때에는, alter 를 쓴다. 

그리고, table 의 column 중 하나의 이름을 바꾸는 명령은 다음과 같다.


> ALTER TABLE 테이블이름 CHANGE 바꿀필드이름 새필드이름;


근데, 여기서 함정인게, 이걸로 안바뀜. 문법은 맞지만, MYSQL에서는 안바뀐다.  




결국 명령어 조합하다 알아낸 건데, 


> ALTER TABLE 테이블이름 CHANGE 바꿀필드이름 새필드이름 필드속성값;


요렇게 해줘야 된다.

예를 들면 , 


> ALTER TABLE table1 CHANGE fieldold fieldnew; 


이럼 안되고, 


> ALTER TABLE table1 CHANGE fieldold fieldnew INT NOT NULL


이따구로 '필드 이름 + 필드 속성값' 까지 같이 써 줘야함. 

SQL 표준이 뭔지 살짝 궁금해졌지만, 삽질로라도 알아냈으니 종료.



2. TRANSACTION, ROLLBACK, COMMIT 은 INNODB 에서만 가능.


음. 이것도 좀 뻘짓한건데... 우선, MYSQL 에서 TRANSACTION 을 하려면 대략 다음과 같이 하게 된다.


> BEGIN -- 트랜잭션 시작.

> SELECT ...

> INSERT ...

> UPDATE ...

... 각종쿼리문

> COMMIT -- 성공했을때

> ROLLBACK -- 실패했을때


뭐, 별거 없다. 그냥 쓰면 됨.... 이라고 생각하는게 함정.


이상하게 자꾸 안되서 CONSOLE 의 메시지를 자세히 보니, WARNING 이 뜨더라.

혹시나 해서 SHOW WRANINGS 로 보니... 

TRANSACTION 은 INNODB 에서만 된다는군.


뭔소리냐 하면, 위의 BEGIN ~ TRANSACTION 문장이 잘못된 게 아니고, 

테이블 만들때 첨부터 테이블 속성을 INNODB 로 설정해야 한다는 말씀. 자세하게는


> CREATE TABLE IF NOT EXITS 테이블이름 ( .... ) ENGINE=InnoDB;


그렇다는군. 삽질 좀 했다.




 


반응형