2011-03-18 4 views
2

Perl을 사용하여 SQLite에서 자동 증가 문제가 있습니다.Perl을 사용하여 자동 증가 SQLite

데이터베이스 설계 :

$dbh->do("CREATE TABLE IF NOT EXISTS `Users` (
    `UserID` VARCHAR(45) NOT NULL PRIMARY KEY UNIQUE , 
    `First_Name` VARCHAR(45) NOT NULL , 
    `Last_Name` VARCHAR(45) NOT NULL , 
    `Email` VARCHAR(45) NOT NULL , 
    `Password` VARCHAR(45) NOT NULL)") ; 

$dbh->do("CREATE TABLE IF NOT EXISTS `Files` (
    `FileID` INTEGER AUTO_INCREMENT , 
    `UserID` VARCHAR(45) NOT NULL , 
    `File_Name` VARCHAR(45) NOT NULL , 
    `File` BLOB NULL , 
    PRIMARY KEY (`FileID`, `UserID`) , 
    CONSTRAINT `fk_Files_Users1` 
    FOREIGN KEY (`UserID`) 
    REFERENCES `Users` (`UserID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE)") ; 

쿼리 : 내가 AUTO_INCREMENT과 PRIMARY KEY 모두 인 것으로 FileID에를 확인했다하더라도

$dbh->do("INSERT INTO Files (UserID, File_Name) 
       VALUES ('$_[0]', '$_[1]')") ; 

, 위를 사용하여 새 필드를 추가 할 때 쿼리는 FileID가 비어 있고 자동으로 증가하지 않습니다. 이견있는 사람? 테이블을 잘못 설계 한 적이 있습니까?

건배,

네이트

답변

6

난 당신이 독점적으로 FileID에 필드 (두 개의 필드가)와 파일 테이블에 기본 키를 생성하는 것이 좋습니다. 그리고 나는 당신이 오타가 있다고 생각합니다 : 그것은 AUTOINCREMENT입니다, (당신은 AUTO_INCREMENT를 입력합니다). 이것을보십시오 : http://www.sqlite.org/autoinc.html

+0

AUTO_INCREMENT는 mysql 구문입니다. 정말로 혼란 스럽다. – Dallaylaen

+3

해당 SQL 문에 대한 SQL 구문 오류가 발생하지 않았습니까? 아, 맞습니다. 아마 당신이 확인하지 않았을 것입니다 - RaiseError를 설정하지 않았다면 말입니다. – bart

+0

흠 ... 좋아요. 감사! –