250x250
반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 서울로가자
- 다산의마지막습관
- todolist
- 중용
- 훌륭한모국어
- MySQL
- 성선택
- php
- 독후감
- Face Detection
- delete
- 클라우드
- Git
- UPSERT
- 나만의주식5법칙
- linux명령어
- ChatGPT
- git 업로드
- Django
- 옹졸함
- 헬레나크로닌
- db
- 일일투자금액
- 꼭읽어봐야할책
- 비밀번호변경
- 지방사람이보는서울사람
- 네인생우습지않다
- Python
- OpenCV
- 공작과개미
Archives
- Today
- Total
Terry Very Good
[Mysql] Upsert(Update&Insert) 기능(Primary Key or Unique Key 값이 이미 있을 경우 Update, 없다면 Insert) 본문
프로그래밍/(WEB) DB관리
[Mysql] Upsert(Update&Insert) 기능(Primary Key or Unique Key 값이 이미 있을 경우 Update, 없다면 Insert)
테리베리 2021. 1. 10. 13:48728x90
반응형
데이터를 업데이트 하려 할 때, 기존에 있던 값이면 업데이트, 없던 값이면 추가하고 싶을 때가 있다.
학교 학생 정보의 경우 학번을 기준으로 값이 있다면 Update, 없으면 Insert하는 느낌이다.
하지만 그러기 위해서는 '학번'이라는 키가 Primary Key거나 Unique Key여야한다.
처음부터 php로 Upsert 적용까지 살펴보자.
1. Primary, Unique Key 설정
[정의]
기본키(Primary Key): 해당 테이블의 식별자 역할을 하는 제약조건으로 테이블에 하나만 설정할 수 있다.
Unique Key: 유일성을 가지기 위해 설정해 놓은 것으로, 중복을 방지한다.
[구문]
-- PRIMARY 추가하는 방법
ALTER TABLE person ADD PRIMARY KEY (name)
-- UNIQUE INDEX를 추가하는 방법
ALTER TABLE iqms.dept_info ADD UNIQUE (deptCD);
[설정]
ALTER TABLE iqms.dept_info ADD UNIQUE (deptCD);
iqms 데이터베이스의 user_info테이블의 user_id값을 Unique Key로 놓았다.
2. Upsert 구문
[구문]
INSERT INTO [table 명] ( [컬럼명1], [컬럼명2], ... )
VALUES ( [컬럼명1의 값], [컬럼명2의 값], ... )
ON DUPLICATE KEY UPDATE [업데이트시 바뀔 컬럼명1]=[바뀔 값], [바뀔 컬럼명2]=[바뀔 값], ...
[설정]
foreach ($summary as $key => $value) {
if($value['PERNR']=="") $value['PERNR']="미확인"; #학번
if($value['ENAME']=="") $value['ENAME']="미확인"; #이름
if($value['ORGEH']=="") $value['ORGEH']="미확인"; #코드
if($value['ZLEVTX']=="") $value['ZLEVTX']="미확인"; #
if($value['ZEMAIL']=="") $value['ZEMAIL']="미확인"; #이메일
$sql = "INSERT INTO iqms.user_info ";
$sql .= "( ";
$sql .= " user_id, passwd, old_passwd, name, deptCD, call_grade, ";
$sql .= " email, role, logintry, voc_ui, voc_ui_edit, admin_ui, ";
$sql .= " admin_ui_edit, dashboard_ui, dashboard_ui_edit, last_logindate, ";
$sql .= " pw_default, user_ui, user_ui_edit, bldg_ui, bldg_ui_edit, ";
$sql .= " data_ui, data_ui_edit, car_ui, car_ui_edit, disaster_role ";
$sql .= ") ";
$sql .= "VALUES ";
$sql .= "( ";
$sql .= " ?, '1234', '', ?, ?, ?, ?, 'ROLE_USER', '0', 'Y', 'Y' ,'N', ";
$sql .= " 'N', 'Y', 'Y', '1000-01-01 00:00:00', 'N', 'Y', 'Y', 'Y', ";
$sql .= " 'Y', 'N', 'N','Y', 'Y', 'NORMAL' ";
$sql .= ") ";
$sql .= "ON DUPLICATE KEY UPDATE name=?, deptCD=?, call_grade=?, email=?; ";
#echo "\n\n".$sql."\n\n";
$sql_obj = $conn->prepare($sql);
$sql_obj->bind_param("sssssssss",$value['PERNR'],$value['ENAME'],$value['ORGEH'],$value['ZLEVTX'],$value['ZEMAIL'],$value['ENAME'],$value['ORGEH'],$value['ZLEVTX'],$value['ZEMAIL']);
$sql_obj->execute();
$result = $sql_obj->get_result();
}
iqms.user_info 테이블에 있는 Primary값 혹은 Unique값(user_id)와 중복되는 값을 추가하려 한다면 UPDATE, 중복되지 않는다면 INSERT한다.
728x90
반응형
'프로그래밍 > (WEB) DB관리' 카테고리의 다른 글
[Mysql] CSV파일을 DB에 업로드(UPSERT를 이용) (0) | 2021.01.12 |
---|---|
[Mysql] 백업 및 복구 (0) | 2021.01.12 |
[Mysql] 데이터가 업데이트 되지 않은 학과 찾기(SELECT dept, count(*) as num FROM [테이블명] WHERE [업데이트컬럼]='' GROUP BY dept HAVING num>3;) (0) | 2021.01.10 |
[Django manage.py] 다른 모델을 참조하는 ForeignKey의 4가지 종류 (0) | 2020.12.20 |
[Mysql] 테이블 삭제 및 테이블 내 데이터 삭제에 관한 모든 것(DELETE, TRUNCATE, DROP) (0) | 2020.12.03 |