Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
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
Archives
Today
Total
관리 메뉴

미래학자

[MySQL] 2장 데이터 변경, 삭제 (ALTER, SELECT, DROP, DELETE) 본문

DataBase

[MySQL] 2장 데이터 변경, 삭제 (ALTER, SELECT, DROP, DELETE)

미래학자 2016. 11. 17. 22:43

저번 1장(DB와 테이블 생성, Link : SELECT http://futurists.tistory.com/11)에 이어 이번 시간에는 테이블을 변경 시키는 것에 대해

이야기 해볼까 합니다.


  1. 조건 검색, 효율적인 방법 (BETWEEN, IN)
  2. 데이터 베이스, 테이블, 데이터 삭제 (DROP, DELETE)
  3. 테이블 변경 (UPDATE, CHANGE)
  4. 데이터 변경
  5. 생성문 보기 (SHOW)
아래 링크를 통해 1장 과정을 통해 생기는 테이블과 데이터를 추가하실 수 있습니다.



1. 조건 검색, 효율적인 방법 (BETWEEN, IN)


저번 시간에 배웠던 WHERE 절을 AND 또는 OR로 연결하는 것을 기억할 것이다.

아래와 같은 student 테이블이 있을 때



저번에 배웠던 조건절을 리마인딩 해보자.


SELECT * FROM student
WHERE _id > '2010';
# 학번이 2010 으로 시작하는 학생을 검색할 수 있다.
view raw mysql_13.sql hosted with ❤ by GitHub


그렇다면 2009 ~ 2010 학번인 학생을 구할 때는 어떻게 하는 것이 좋을까?

아래의 두 예를 보자.



SELECT * FROM student
WHERE _id > '2009' AND _id < '2011';
SELECT * FROM student
WHERE _id BETWEEN '2009' AND '2011';
view raw mysql_14.sql hosted with ❤ by GitHub

두 쿼리 모두 같은 결과를 내놓는다. 그러나 두 쿼리의 성능은 다르다. '2009'보다 큰 값을 모두 구하고, '2011' 보다 작은 값을 모두 구하여 교집합을 다시 구하는 연산과,

'2009' 부터 시작하여 '2011'보다 작을 때 까지 순차적으로 구하는 것과는 차이가 있을 것이기 때문이다.


또, 아래의 예도 살펴 보자.


SELECT * FROM student
WHERE belong = 'MSE' OR belong = 'ESE' OR belong = 'CSE';
SELECT * FROM student
WHERE belong IN ('MSE', 'ESE', 'CSE');
view raw mysql_15.sql hosted with ❤ by GitHub


이 둘 또한 같은 결과를 내놓는다. 그러나 아래의 예가 더욱 좋다. 간단히 말 해 첫 번 째 쿼리는 for 문을 총 3번 돈다면, 아래의 쿼리는 for문을 한 번 도는 것이기 때문이다.


2. 데이터 베이스, 테이블 삭제



DROP DATABASE db_name;
DROP TABLE table_name;
DELETE FROM table_name;
DELETE FROM table_name WHERE _id = 20070103;
view raw mysql_16.sql hosted with ❤ by GitHub


데이터 베이스와 테이블을 제거할 때는 DROP을, 테이블의 데이터를 제거할 때는 DELETE를 사용한다. 데이터가 한 번 삭제되면 복구할 수 없으므로 삭제할 때는

조심히 해야 한다.

5 : 데이터를 삭제할 때는 원하는 데이터를 SELECT 할때와 마찬가지로 조건을 주어 삭제할 수 있다. (삭제할 때 SELECT를 통해 결과를 확인 후 DELETE하는 습관

을 가지는 것이 좋다)



3. 테이블 변경 (ALTER)


테이블 변경에서는 아래의 일을 할 수 있다.

  1. 테이블 이름 변경 (RENAME)
  2. 테이블 칼럼 , 제약조건 추가 (ADD)
  3. 테이블 변경 (CHANGE, MODIFY)
  4. 테이블 제약 조건 제거 (DROP)
우선 현재 테이블의 상태를 확인해보자.



A. 테이블 이름 변경 (RENAME)


ALTER TABLE student
RENAME TO hero;
DESC hero;
view raw mysql_17.sql hosted with ❤ by GitHub


1 : student라는 테이블을 변경

2 : hero라는 새로운 이름으로 변경


B. 테이블 칼럼 , 제약조건 추가 (ADD)


ALTER TABLE hero
ADD COLUMN star INT NOT NULL AFTER _id,
ADD PRIMARY KEY (_id);
DESC hero;
view raw mysql_18.sql hosted with ❤ by GitHub



start 라는 새로운 칼럼이 추가가 되었고, _id가 기본키로 변경되었다. 특이한 점은 AFTER _id 로 추가될 칼럼의 위치를 선정하는 점이다.

MySQL에서는 FIRST를 사용하면 첫 번째 칼럼으로 추가된다. (첫 번째 칼럼은 보통 기본키다.) 그런데 책에서는 SECOND, THIRD, LAST, BEFORE 등의

키워드도 사용할 수 있다고 했는데, 해본 결과 되지 않았다.



C. 테이블 변경 (CHANGE, MODIFY)


ALTER TABLE hero
MODIFY COLUMN star BIGINT DEFAULT 10000;
DESC hero;
ALTER TABLE hero
CHANGE COLUMN star rating INT DEFAULT 100;
DESC hero;
view raw mysql_19.sql hosted with ❤ by GitHub


MODIFY와 CHANGE 모두 테이블의 칼럼의 상태를 변경하는 공통점이 있다. 그러나 CHANGE는 칼럼의 이름도 변경이 가능 하다.


D. 테이블 제약 조건 제거 (DROP)


ALTER TABLE hero
DROP COLUMN star,
DROP PRIMARY KEY;
DESC hero
view raw mysql_20.sql hosted with ❤ by GitHub


테이블에서 star 칼럼을 제거하고, 기본키를 제거 한다.



4. 데이터 변경 (UPDATE)


UPDATE hero
SET belong = 'ZER'
WHERE status = 0;
SELECT * FROM hero;
UPDATE hero
SET status = status + 200
WHERE _id LIKE '2009%';
SELECT * FROM hero;
view raw mysql_21.sql hosted with ❤ by GitHub

첫 번째 쿼리는 status 값이 0인 레코드의 belong을 'ZER'로 바꾼다.



두 번째 쿼리는 _id 가 '2009'로 시작하는 레코드의 status 값을 현재 값에서 200만큼 더한 값으로 변경한다.





5. 생성문 보기 (SHOW)


SHOW CREATE DATABASE study_db;
SHOW CREATE TABLE hero;
SHOW INDEX FROM hero;
SHOW WARNINGS;
view raw mysql_22.sql hosted with ❤ by GitHub




각 테이블, 칼럼 이름 사이에 `로 감싸진 것을 볼 수 있다. 지금은 변수를 `로 감싸는 구나 하고 생각하자. 저 구문을 복사하여 그대로 `가 있는 상태로

사용해도 상관없고, 제거해서 사용해도 좋다.


3, 4 구문은 지금은 나도 잘 모르고, 차차 공부해야 겠다.

Comments