2011-09-19 2 views
0

HTML5 데이터베이스를 사용하고 있는데 DELETE가 LIMIT와 함께 작동하지 않는 것으로 나타났습니다.HTML5 데이터베이스 : DELETE LIMIT에 대한 SQL 오류

크롬에서 시도 :

> select * from my_table limit 1 
item name 
-------------- 
1  Hi 

> delete from my_table limit 1 
near "limit": syntax error 

이 삭제 어떤 잘못이 있습니까?

감사합니다.

+0

DELETE FROM my_table WHERE item IN (SELECT item FROM my_table LIMIT 1) 그냥 기록 중 하나를 삭제할 수 있습니다 다음은 몇 가지 기준과 일치하는 것을 발견하려고 from my_table where item = 1 limit 1)' – Deqing

+0

Btw, SQLite가 SQLITE_ENABLE_UPDATE_DELETE_LIMIT 컴파일 시간 옵션으로 컴파일되면 DELETE가 LIMIT를 지원합니다. – Deqing

답변

2

나는 deletelimit을 지원한다고 (또는 적어도 내가 알고있는 SQL 방언에서는 그렇지 않다는 것을) 믿지 않는다.

delete from my_table where item=1; 

편집을 추가 :를 대신, 당신은

delete from my_table; 

을 통해 테이블에서 모든 것을 삭제하거나 삭제하려는 행에 대한 자세한 구체적으로 할 것 중 하나 일반적으로 데이터베이스는 (일부 RDBMS에있는 order by 문 또는 row_number() 함수를 통해) 지시하지 않는 한 행의 순서를 신경 쓰지 않습니다. 따라서 일반적으로 select * from my_table limit 1; 번을 여러 번 호출하면 매번 같은 행을 가져올 수 있습니다. 즉, 테이블에서 특정 행 수만을 필요로하지 않고 어떤 행을 가져 오는지 신경 쓰지 않는 한 limit 문은 쿼리에서 가져온 행에 순서를 지정하지 않으면 거의 도움이되지 않습니다. 에서 ROWID는 (ROWID를 선택할 경우 는`MY_TABLE에서 삭제 :

선택에 제한을 허용하지만, 삭제되지 SQL 언어에 대한
+2

MySQL은 DELETE에 LIMIT 절을 허용하고 SQL Server는 TOP (동일 함)를 허용하지만 둘 다 비표준 SQL 확장입니다. –

+0

@ Jeff Mc : Gotcha. 필자의 SQL 경험은 PostgreSQL에서 전적으로 사용되었는데,'limit'은'delete'에서 허용되지 않습니다 (최소한 내가 실행중인 버전이 아닙니다). 그것은 (다소) 임의의 행을 삭제할 가능성을 열어두고 있기 때문에, 그런 일을하는 것은 위험합니다. –

+0

LIMIT은 행의 "임의"선택을 삭제합니다. 내가 사용하는 유일한 시간은 매우 많은 수의 행을 삭제하고 수정 된 행 수가 0이 될 때까지 다시 실행하는 것입니다 (조건부와 일치하는 전체 집합이 삭제됨). 이렇게하면 잠금 및 트랜잭션 로그 오버플로를 줄일 수 있습니다. 매우 큰 삭제가 있습니다. –

2

,

+0

감사합니다. 실제로 내가 "일치하는 레코드 중 하나를 삭제하는 것"은 테이블에 많은 중복 레코드가있을 가능성이 있습니다. 시도했으나 일치하는 모든 레코드가 삭제됩니다. – Deqing

+0

죄송합니다. 'item'이 고유 키라는 잘못된 가정을하고있었습니다. –

관련 문제