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
'programing' 카테고리의 다른 글
센토스 리눅스에서 mariadb를 안전하게 제거할 수 있습니까? (0) | 2023.10.07 |
---|---|
Android on Click in XML vs.OnClickListener (0) | 2023.10.07 |
스위프트넘버상속 (0) | 2023.10.02 |
포인터를 argv로 포인터 표시 (0) | 2023.10.02 |
Angular 6에서 암호 유효성 확인 (0) | 2023.10.02 |