====== MySQL Auto Increment ====== * auto_increment 키 값을 INSERT 시에 사용하는 방법. [[http://database.sarang.net/?inc=read&aid=30306&criteria=mysql&subcrit=qna&id=&limit=20&keyword=&page=1|참조]] INSERT INTO temp ( name, foo ) SELECT 'aaa', CONCAT('aaa', coalesce(( SELECT auto_increment FROM INFORMATION_SCHEMA.tables WHERE table_name = 'temp' AND table_schema = DATABASE() ), 0)); ===== auto_increment 문제점 ===== * MyISAM에서는 서버를 내렸다 올려도 최종 Auto increment 값이 변함이 없지만, InnoDB에서는 서버를 내렸다 올릴 때마다 ''SELECT MAX(ai_col) FROM t for UPDATE''의 값으로 다음 Auto Increment값이 정해진다. [[http://gywn.net/2013/02/mysql-innodb-auto-increment/|MySQL InnoDB Auto Increment]] 참조. * InnoDB에서 auto_increment 필드를 insert 후 다시 삭제한 뒤에 DB를 껐다켜면 auto_increment가 뒤로 돌아간다. * 예를들어, ''1, 2, 3, 4, 5''까지 auto_increment 증가 후에 5 row를 삭제하고 DB를 껐다켜고 다시 insert를 하면 새로운 row의 auto_increment값이 ''5''가 된다. 원칙적으로는 ''6''이 되어야 한다. ===== 다음 AUTO_INCREMENT 값 미리보기 ===== * 실제 값의 증가 없이 다음 AUTO_INCREMENT 값을 확인해보기. [[http://stackoverflow.com/questions/15821532/get-current-auto-increment-value-for-any-table|mysql - Get current AUTO_INCREMENT value for any table]] SELECT `AUTO_INCREMENT` FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'DatabaseName' AND TABLE_NAME = 'TableName'; ===== 0 에 대한 반응 ===== * ''NO_AUTO_VALUE_ON_ZERO'' : ''0''에 대해서 기본으로 AUTO_INCREMENT를 올려주는데, 이 값을 설정하면 ''0'' 에대해 AUTO_INCREMENT 변경을 하지 않는다. * http://www.mysqlkorea.com/sub.html?mcode=manual&scode=01&m_no=21330&cat1=5&cat2=120&cat3=138&lang=k