programing

maria db 10에서 체크인할 때 삽입 데이터에 대한 sql 구문 오류?

newsource 2023. 10. 2. 15:04

maria db 10에서 체크인할 때 삽입 데이터에 대한 sql 구문 오류?

내 xampp에서 올바르게 실행하지만 서버에서 실행하면 오류가 발생합니다.

INSERT INTO `likes`(`id`, `PID`, `UID`)
SELECT NULL,155,68
WHERE NOT EXISTS(SELECT id FROM likes t2 WHERE t2.PID = 115 AND t2.UID=68)

오류는

1064 - SQL 구문에 오류가 있습니다. MariaDB 서버 버전에 해당하는 매뉴얼에서 'WHERE NOT EXIST'(SELECT ID FROM like t2 WHERE t2) 근처에서 사용할 수 있는 올바른 구문을 확인하십시오.PID = 115 및 t2.UID=68)' 3번 행

제발 도와주세요.

A SELECT필요한 것은.FROM가 있다면WHERE. 사용가능FROM dual당신이 정말 원한다면요

그러나 중복을 방지하려고 하는데, 이 방법은 최선의 방법이 아닙니다.대신 데이터베이스가 고유한 인덱스 또는 제약 조건을 사용하여 작업을 수행하도록 합니다.

alter table likes add constraint unq_likes_pid_uid unique (pid, uid);

그런 다음 원하는 작업을 다음과 같이 표현할 수 있습니다.

INSERT INTO `likes`(`PID`, `UID`)
    VALUES (155, 68)
    ON DUPLICATE KEY UPDATE pid = VALUES(pid);

on duplicate key오류를 방지하는 것 외에는 아무것도 하지 않습니다.

왜 이게 더 좋습니까?

  • 데이터베이스는 데이터의 무결성을 보장하므로 올바른 데이터임을 알 수 있습니다.
  • 동일한 값을 삽입하는 여러 스레드는 "우연히" 중복을 삽입하지 않습니다.
  • 쿼리에서 상수 값을 반복할 필요가 없으므로 오류가 발생할 수 있습니다.

아래에서 시도해보실 수 있습니다.

INSERT INTO `likes`(`id`, `PID`, `UID`)
SELECT NULL,155,68 from likes
WHERE NOT EXISTS(SELECT id FROM likes t2 WHERE t2.PID = 115 AND t2.UID=68) 

범위가 새 값을 삽입하는 경우:

INSERT INTO `likes`(`id`, `PID`, `UID`)
values (NULL,155,68)

범위가 이미 존재하는 튜플을 업데이트하는 경우:

 update likes
  set `id`=NULL, `PID`=155, `UID`=68
  WHERE NOT EXISTS(SELECT id FROM likes t2 WHERE t2.PID = 115 AND t2.UID=68); 

없는 경우 범위가 튜플을 추가하는 경우:

delimiter $$
create procedure ins_m()
BEGIN
   IF NOT EXISTS (SELECT id FROM likes t2 WHERE t2.PID = 115 AND t2.UID=68)
   BEGIN
       INSERT INTO `likes`(`id`, `PID`, `UID`)
       values (NULL,155,68)
   END IF
END
$$
delimiter ;

-- to execute the procedure
exec ins_m

당신의 질문은 아주 명확하지 않았습니다.

아래를 시도해 보시기 바랍니다.

IF NOT EXISTS(SELECT id FROM likes t2 WHERE t2.PID = 115 AND t2.UID=68)
INSERT INTO `likes`(`id`, `PID`, `UID`)
values (NULL,155,68)

언급URL : https://stackoverflow.com/questions/54324867/sql-syntax-error-on-insert-data-with-checking-in-maria-db-10