입력, 수정, 삭제
#01. 데이터 입력하기
1) INSERT 절
insert into <테이블이름> values (값1, 값2,...,값n);
- 값을 명시하는 방법
- 숫자형식의 데이터는 홑따옴표를 사용하지않는다.
- 그 밖의 형식(문자열, 날짜 형식) 값은 홑따옴표로 감싼다.
- 값을 나열할 때는 테이블 구조에서 정의하고 있는 컬럼의 순서에 맞게 명시한다.
- —>“DESC 테이블이름;”의 구문으로 테이블 정의를 확인할 수 있다.
예제
- 학생 테이블에 다음의 정보로 새로운 데이터 추가하기
학번 |
10110 |
이름 |
홍길동 |
아이디 |
hkd85 |
학년 |
1 |
주민번호 |
8501011143098 |
생년월일 |
2013-10-01 11:42:30 |
전화번호 |
055)-777-7777 |
키 |
170 |
몸무게 |
70 |
학과번호 |
101 |
담당교수번호 |
9903 |
|
|
mysql> insert into student values ( 10110, '홍길동', 'hkd85', 1, '8501011143098',
-> '2013-10-01 11:42:30', '055)-777-7777',
-> 170, 70, 101, 9903);
Query OK, 1 row affected (0.01 sec)
mysql> select studno, name, grade from student;
+--------+--------+-------+
| studno | name | grade |
+--------+--------+-------+
| 10101 | 전인하 | 4 |
| 10102 | 박미경 | 1 |
| 10103 | 김영균 | 3 |
| 10104 | 지은경 | 2 |
| 10105 | 임유진 | 2 |
| 10106 | 서재진 | 1 |
| 10107 | 이광훈 | 4 |
| 10108 | 류민정 | 2 |
| 10110 | 홍길동 | 1 | // 추가된것을 알수있다.
| 10201 | 김진영 | 2 |
| 10202 | 오유석 | 4 |
| 10203 | 하나리 | 1 |
| 10204 | 윤진욱 | 3 |
| 20101 | 이동훈 | 1 |
| 20102 | 박동진 | 1 |
| 20103 | 김진경 | 2 |
| 20104 | 조명훈 | 1 |
+--------+--------+-------+
2) 컬럼명을 명시한 데이터 저장
insert into <테이블이름> (컬럼1, 컬럼2, ..., 컬럼n)
values (값1, 값2, ...,값n);
- 나열되는 컬럼의 이름이 테이블 구조에서 정의하고 있는 컬럼순서와 일치할 필요는 없다.
- 테이블 이름 뒤에 명시되는 컬럼의 순서나 갯수는 values 뒤에 나열되는 값과 일치하여야 한다.
예제
- 학생 테이블에 다음의 정보로 새로운 데이터를 컬럼명 나열하여 추가하기.
학번 |
10111 |
이름 |
둘리 |
아이디 |
dolly |
학년 |
2 |
주민번호 |
8202021234765 |
생년월일 |
2011-10-01 11:42:30 |
전화번호 |
02)-123-2345 |
키 |
170 |
몸무게 |
70 |
학과번호 |
101 |
담당교수번호 |
9903 |
|
|
mysql> insert into student(
-> studno, name, userid, grade, idnum, birthdate, tel, height
-> , weight, deptno, profno)
-> values ( 10111, '둘리', 'dooly', 2, '8202021234765',
-> '2011-10-01 11:42:30','02)-123-2345', 170, 70, 101, 9903);
Query OK, 1 row affected (0.01 sec)
mysql> select studno, name, grade from student
-> where name = '둘리';
+--------+------+-------+
| studno | name | grade |
+--------+------+-------+
| 10111 | 둘리 | 2 |
+--------+------+-------+
3) NULL 데이터 입력
- NULL 데이터를 입력하기 위한 암묵적인 방법
- INSERT INTO 절에서 해당 칼럼의 이름과 값을 생략한다.
mysql> insert into department(deptno, dname) values (300,'응용과학');
Query OK, 1 row affected (0.01 sec)
mysql> select * from department;
+--------+----------------+-------+
| deptno | dname | loc |
+--------+----------------+-------+
| 101 | 컴퓨터공학과 | 1호관 |
| 102 | 멀티미디어학과 | 2호관 |
| 201 | 전자공학과 | 3호관 |
| 202 | 기계공학과 | 4호관 |
| 300 | 응용과학 | NULL |
+--------+----------------+-------+
- NULL 데이터를 입력하기 위한 명시적인 방법
- VALUES 절의 칼럼값에 NULL을 사용한다.
예제
- 학과번호 301인 ‘영문학과’를, 위치가 결저오디지 않은 상태로 저장하시오
mysql> insert into department values (301,'영문학과',NULL);
Query OK, 1 row affected (0.01 sec)
mysql> select * from department where dname='영문학과';
+--------+----------+------+
| deptno | dname | loc |
+--------+----------+------+
| 301 | 영문학과 | NULL |
+--------+----------+------+
4) 날짜 데이터 입력 방법
- 칼럼에 날짜를 입력하려면 ‘YYYY-MM-DD HH:MI:SS’ 혹은 ‘YYYY-MM-DD’ 형식에 따른 날짜 데이터를 입력해야 한다.
mysql> insert into professor (profno, name, userid, position, sal, hiredate, deptno)
-> values (9920,'고길동','gilldong','교수',450,'2014-01-01',102);
Query OK, 1 row affected (0.01 sec)
mysql> select profno, name, hiredate from professor;
+--------+--------+---------------------+
| profno | name | hiredate |
+--------+--------+---------------------+
| 9901 | 김도훈 | 1982-06-12 00:00:00 |
| 9902 | 이재우 | 1995-04-12 00:00:00 |
| 9903 | 성연희 | 1993-03-17 00:00:00 |
| 9904 | 염일웅 | 1998-10-11 00:00:00 |
| 9905 | 권혁일 | 1986-02-11 00:00:00 |
| 9906 | 이만식 | 1988-07-11 00:00:00 |
| 9907 | 전은지 | 2001-05-11 00:00:00 |
| 9908 | 남은혁 | 1990-10-18 00:00:00 |
| 9920 | 고길동 | 2014-01-01 00:00:00 |
+--------+--------+---------------------+
- 날짜 데이터 입력 방법
- 자동으로 현재 날짜로 입력하기 위해서는 ‘now()’ 함수를 사용한다.
- ex)입사일 오늘
mysql> insert into professor(profno, name, userid, position, sal, hiredate, comm, deptno)
-> values(9921, '뚬땜이', 'ttum', '교수', 550, now(), null, 202);
Query OK, 1 row affected (0.01 sec)
mysql> select profno, name, hiredate, comm from professor;
+--------+--------+---------------------+------+
| profno | name | hiredate | comm |
+--------+--------+---------------------+------+
| 9901 | 김도훈 | 1982-06-12 00:00:00 | 20 |
| 9902 | 이재우 | 1995-04-12 00:00:00 | NULL |
| 9903 | 성연희 | 1993-03-17 00:00:00 | 15 |
| 9904 | 염일웅 | 1998-10-11 00:00:00 | NULL |
| 9905 | 권혁일 | 1986-02-11 00:00:00 | 25 |
| 9906 | 이만식 | 1988-07-11 00:00:00 | NULL |
| 9907 | 전은지 | 2001-05-11 00:00:00 | NULL |
| 9908 | 남은혁 | 1990-10-18 00:00:00 | 17 |
| 9920 | 고길동 | 2014-01-01 00:00:00 | NULL |
| 9921 | 뚬땜이 | 2019-11-13 15:21:44 | NULL |
+--------+--------+---------------------+------+
4) 중복데이터 방지하기
- 테이블에 중복되는 데이터가 저장되어 있다면 하나를 뺀 나머지 데이터들은 불필요한 값으로 시스템의 자원을 낭비하게 된다.
- 각 데이터는 중복되지 않기 위한 최소한의 제약을 요구한다
- 테이블의 각행을 고유하게 식별하는 값을 가진 열(또는 열 조합)을 기본키(Primary Key)라고 한다.
- 데이터베이스 테이블의 컬럼에 기본키(Primary Key) 옵션을 지정하여 중복데이터의 입력을 방지할 수 있다.
- 기본키로 설정된 컬럼은 각 데이터 행의 구분을 위해 고유한 값만을 저장해야 하기 때문에 다른 행과 중복된 값을 저장할 수 없도록 제약된다.
- 기본키는 일반적으로 일련번호의 개념으로 사용되는데, 데이터를 저장 할 때마다 중복되지 않는 일련번호를 계산하기 어려우므로 AUTO_INCREMENT 옵션을 사용하여 데이터 저장시 시스템에서 자동으로 일련번호를 생성하도록 할 수 있다.
- 테이블을 생성하면서 특정 컬럼을 Primary Key로 설정하면 중복 데이터 저장에 대한 제약이 설정되는데, 이를 기본키 제약조건 이라 한다.
- 테이블에서 데이터가 고유한 값이다 —> 데이터 무결성
5) 기본키에 대한 자동 증가 일련번호 속성 사용
- PRIMARY KEY에는 AUTO_INCREMENT 속성을 추가할 수 있다.
- 이 속성이 설정된 경우, INSERT 절에서 해당 컬럼을 명시하지 않아도 자동으로 기존 값들중 가장 큰 값보다 1큰 값이 저장되어, 데이터의 고유성을 유지하게 된다.
#02. 데이터 수정, 삭제
1) 데이터 수정을 위한 UPDATE 절
update <테이블이름> set 컬럼1=값1, 컬럼2=값2, ... , 컬럼n=값n
[where 검색조건];
예제
- 교수번호가 9903번인 교수의 직급을 ‘조교수’로, 급여는 200만원으로 수정하시오.
mysql> select name, position, sal from professor where profno=9903;
+--------+----------+-----+
| name | position | sal |
+--------+----------+-----+
| 성연희 | 조교수 | 360 |
+--------+----------+-----+
1 row in set (0.00 sec)
mysql> update professor
-> set position = '조교수', sal = 200
-> where profno = 9903;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select name, position, sal from professor where profno=9903;
+--------+----------+-----+
| name | position | sal |
+--------+----------+-----+
| 성연희 | 조교수 | 200 |
+--------+----------+-----+
2) 데이터 삭제를 위한 DELETE 절
delete from <테이블이름> [where 검색조건];
예제
- 학생번호가 20103번인 학생의 데이터를 삭제하시오.
mysql> select studno, name from student where studno=20103;
+--------+--------+
| studno | name |
+--------+--------+
| 20103 | 김진경 |
+--------+--------+
1 row in set (0.00 sec)
mysql> DELETE FROM student WHERE studno = 20103;
Query OK, 1 row affected (0.01 sec)
mysql> select studno, name from student where studno=20103;
Empty set (0.00 sec)
3) UPDATE와 DELETE에 WHERE절을 사용하지 않는 경우
- UPDATE절의 경우 모든 데이터가 같은 값으로 수정된다.
- DELETE절의 경우 모든 데이터가 삭제된다.
#03. 함수의 사용
- 데이터 입력시 –> 저장할 값을 함수를 사용하여 명시한다.
insert into <테이블이름> values (함수이름(값), 함수이름(값)...);
- 데이터 수정 시 –> 수정될 값에 함수를 적용할 수 있다.
update <테이블이름> set
컬럼이름 = 함수이름(값),
컬럼이름 = 함수이름(값)
[where 함수가 적용된 검색조건]
- 데이터 삭제 시 –> 삭제될 대상을 지정하는 WHERE 절에서 사용할 수 있다.
delete from <테이블이름> [where 함수가 적용된 검색조건]
예제
- 학번이 20101번인 학생의 생년월일을 현재 시각으로 변경하기.
mysql> select name, birthdate from student where studno=20101;
+--------+---------------------+
| name | birthdate |
+--------+---------------------+
| 이동훈 | 1983-12-10 00:00:00 |
+--------+---------------------+
1 row in set (0.00 sec)
mysql> update student set birthdate=now() where studno=20101;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select name, birthdate from student where studno=20101;
+--------+---------------------+
| name | birthdate |
+--------+---------------------+
| 이동훈 | 2019-11-13 16:20:53 |
+--------+---------------------+
연습문제1
- 다음의 학과를 신설하기 위한 데이터를 입력하고 결과를 조회하시오.
- 학과번호: 103, 학과이름: 인터넷정보과, 위치: 공학관
mysql> insert into department(deptno, dname, loc) values(103, '인터넷정보과', '공학관');
Query OK, 1 row affected (0.01 sec)
mysql> select * from department;
+--------+----------------+--------+
| deptno | dname | loc |
+--------+----------------+--------+
| 101 | 컴퓨터공학과 | 1호관 |
| 102 | 멀티미디어학과 | 2호관 |
| 103 | 인터넷정보과 | 공학관 |
| 201 | 전자공학과 | 3호관 |
| 202 | 기계공학과 | 4호관 |
| 300 | 응용과학 | NULL |
| 301 | 영문학과 | NULL |
+--------+----------------+--------+
연습문제2
- 공학관에 위치한 학과의 위치를 ‘5호관’으로 수정하시오.
mysql> update department
-> set loc = '5호관'
-> where loc = '공학관';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from department;
+--------+----------------+-------+
| deptno | dname | loc |
+--------+----------------+-------+
| 101 | 컴퓨터공학과 | 1호관 |
| 102 | 멀티미디어학과 | 2호관 |
| 103 | 인터넷정보과 | 5호관 |
| 201 | 전자공학과 | 3호관 |
| 202 | 기계공학과 | 4호관 |
| 300 | 응용과학 | NULL |
| 301 | 영문학과 | NULL |
+--------+----------------+-------+
연습문제3
- 학과번호가 300번 이상인 학과를 삭제하시오.
mysql> delete from department
-> where deptno >= 300;
Query OK, 2 rows affected (0.01 sec)
mysql> select * from department;
+--------+----------------+-------+
| deptno | dname | loc |
+--------+----------------+-------+
| 101 | 컴퓨터공학과 | 1호관 |
| 102 | 멀티미디어학과 | 2호관 |
| 103 | 인터넷정보과 | 5호관 |
| 201 | 전자공학과 | 3호관 |
| 202 | 기계공학과 | 4호관 |
+--------+----------------+-------+