source

SQL - 업데이트가 있는 경우 그렇지 않은 경우 삽입

lovecheck 2022. 10. 29. 10:07
반응형

SQL - 업데이트가 있는 경우 그렇지 않은 경우 삽입

제가 하려고 하는 건INSERT가입자를 등록합니다만,IF EXISTS그래야 한다UPDATE열,ELSE INSERT INTO새 줄

물론 먼저 데이터베이스에 접속해서GET$name,$email그리고.$birthdayurl 문자열에서 가져옵니다.

$con=mysqli_connect("localhost","---","---","---");
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$name=$_GET['name']; 
$email=$_GET['email'];
$birthday=$_GET['birthday'];

이 방법은 작동하지만 새 행만 추가합니다.

mysqli_query($con,"INSERT INTO subs (subs_name, subs_email, subs_birthday)
VALUES ('$name', '$email', '$birthday')");

mysqli_close($con);

내가 시도한 건 이거야.

mysqli_query($con,"INSERT INTO subs (subs_name, subs_email, subs_birthday)
VALUES '$name', '$email', '$birthday'
ON DUPLICATE KEY UPDATE subs_name = VALUES($name), subs_birthday = VALUES($birthday)");
mysqli_close($con);

그리고.

mysqli_query($con,"IF EXISTS (SELECT * FROM subs WHERE subs_email='$email')
    UPDATE subs SET subs_name='$name', subs_birthday='$birthday' WHERE subs_email='$email'
ELSE
    INSERT INTO subs (subs_name, subs_email, subs_birthday) VALUES ('$name', '$email', '$birthday')");
mysqli_close($con);

그리고.

mysqli_query($con,"IF NOT EXISTS(SELECT * FROM subs WHERE subs_email='$email')
Begin
INSERT INTO subs (subs_name, subs_email, subs_birthday)
VALUES ('$name', '$email', '$birthday')
End");
mysqli_close($con);

근데 아무도 안 먹히는데, 내가 뭘 잘못하고 있는 거지?

아무쪼록 잘 부탁드립니다!

  1. 대한 제약조건을 만듭니다.subs_email컬럼(아직 존재하지 않는 경우):

    ALTER TABLE subs ADD UNIQUE (subs_email)
    
  2. 사용방법:

    INSERT INTO subs
      (subs_name, subs_email, subs_birthday)
    VALUES
      (?, ?, ?)
    ON DUPLICATE KEY UPDATE
      subs_name     = VALUES(subs_name),
      subs_birthday = VALUES(subs_birthday)
    

UPDATE 절의 VALUES(col_name) 함수를 사용하여 INSERT ...의 INSERT 부분의 열 값을 참조할 수 있습니다.중복 키 업데이트 시 - dev.mysql.com

  1. SQL 주입 공격으로부터 보호하기 위해서는 parameterized 문을 사용해야 하므로 문자열 리터럴 대신 파라미터 자리 표시자를 사용했습니다.

이것을 시험해 보세요.

INSERT INTO `center_course_fee` (`fk_course_id`,`fk_center_code`,`course_fee`) VALUES ('69', '4920153', '6000') ON DUPLICATE KEY UPDATE `course_fee` = '6000';
INSERT ... ON DUPLICATE KEY UPDATE

업데이트를 할 때마다 AUTO_INCREMENT 카운터가 불필요하게 증가하는 것을 개의치 않는 한, 를 사용하는 것이 좋습니다.먼저 INSERT를 시도하기 때문에 자동 카운터가 증가한다는 것을 알게 되었습니다.퍼포먼스는 떨어지지만 유지보수가 용이한 솔루션으로는 다음과 같은 것이 있습니다.

IF EXISTS(SELECT 1 FROM table WHERE column = value...) THEN
    UPDATE table 
    SET column = value ...
    WHERE other_column = other_value ...;
ELSE
    INSERT INTO table
        (column1, column2, ...)
    VALUES
        (value1, value2, ...);
END IF;

언급URL : https://stackoverflow.com/questions/15383852/sql-if-exists-update-else-insert-into

반응형