검수요청.png검수요청.png

"DB 명령어"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
(계정관련)
잔글 (같이 보기)
 
(사용자 2명의 중간 판 11개는 보이지 않습니다)
30번째 줄: 30번째 줄:
 
  SELECT * FROM all_users;
 
  SELECT * FROM all_users;
  
계정을 확인했으면 계정으로 들어가야 한다. 이 때, SYS 명령어를 사용해 계정에 진입하면 된다.
+
계정을 확인했으면 계정으로 들어가야 한다. 이 때, SYS 명령어를 사용해 계정에 진입해야한다.
  
 
  SYS as sysdba
 
  SYS as sysdba
  
계정을 확인하고 사용하는 방법 말고도 계정을 생성하는 명령어도 있다. 이 또한 SQL문을 섞어 사용하는데 CREATE문을 사용한다. CREATE를 이용해 자신이 쓰고싶은 아이디를 testuser 자리에 작성하고 비밀번호를 testpwd에 작성하면 된다.
+
계정을 확인하고 사용하는 방법 말고도 계정을 생성하는 명령어도 있다. 이 또한 SQL문을 섞어 사용하는데 CREATE문을 사용한다. CREATE를 이용해 자신이 쓰고싶은 아이디를 testuser 자리에 작성하고 비밀번호를 testpwd에 작성한다.
  
 
  CREATE USER testuser IDENTIFIED BY "testpwd"
 
  CREATE USER testuser IDENTIFIED BY "testpwd"
42번째 줄: 42번째 줄:
 
  conn testuser/testuser;
 
  conn testuser/testuser;
  
위와 같이 작성을 하고 비밀번호를 입력하면 된다.
+
위와 같이 작성을 하고 비밀번호를 입력한다.
  
계정의 비밀번호를 변경하고 싶을때는 ALTER문을 활용해 비밀번호를 변경할 수 있다. 아래와 같이 testuser에 아이디를 입력하고 바꾸고 싶은 패스워드를 chagepwd 자리에 작성하면 된다.
+
계정의 비밀번호를 변경하고 싶을때는 ALTER문을 활용해 비밀번호를 변경할 수 있다. 아래와 같이 testuser에 아이디를 입력하고 바꾸고 싶은 패스워드를 chagepwd 자리에 작성한다.
  
 
  ALTER USER testuser IDENTIFIED BY "chagepwd";
 
  ALTER USER testuser IDENTIFIED BY "chagepwd";
  
* '''계정 삭제<ref name="자료1"> 대충고양이짤, 〈[https://insomniachaos.tistory.com/18 (Oracle) 오라클 명령어 간단 정리]〉, 《티스토리》, 2013-11-12</ref>
+
계정을 삭제하고 싶을때는 DROP SQL문을 활용하여 계정을 삭제한다. 현재 존재하는 계정을 DROP문의 testuser 자리에 작성하고 세미콜론(;)으로 문장을 종료한 뒤 엔터를 입력하면 비밀번호 입력창이 뜬다.
 +
비밀번호를 입력하고 다시 확인을 하면 존재하던 계정이 삭제된다.<ref name="자료1"> 대충고양이짤, 〈[https://insomniachaos.tistory.com/18 (Oracle) 오라클 명령어 간단 정리]〉, 《티스토리》, 2013-11-12</ref>
  
 
  DROP USER testuser;
 
  DROP USER testuser;
  
 
===권한관련===
 
===권한관련===
* '''접속 권한 주기
+
오라클의 권한 관련 명령어는 GRANT나 REVOKE을 사용한다. 우선 접속 권한을 주기위해선 GRANT에 CONNECT를 추가해서 해당 계정에 접속권한을 주어야한다. 아래와 같이 명령어를 입력하고 testuser자리에 권한을 부여할 아이디를 작성한다.
  
 
  GRANT CONNECT, RESOURCE TO testuser;
 
  GRANT CONNECT, RESOURCE TO testuser;
  
* '''사용자에게 권한 주기
+
사용자에게 사용 권한을 주기위해서는 아래와 같은 명령어를 작성해야한다. GRANT를 이용해 추가, 삭제, 검색, 수정을 testdb에서 할 수 있도록 해주는 권한을 계정에 부여한다. 계정명은 testuser 자리에 입력하고 세미콜론(;)을 이용해 라인을 종료한다.
  
 
  GRANT DELETE, INSERT, SELECT, UPDATE ON testdb TO testuser;
 
  GRANT DELETE, INSERT, SELECT, UPDATE ON testdb TO testuser;
  
* '''DBA 권한주기
+
계정에 DBA의 권한을 주기위해서 GRANT를 사용해 해당 계정에 권한을 부여한다.
  
 
  GRANT DBA TO testuser;
 
  GRANT DBA TO testuser;
  
* '''권한 취소<ref name="자료1"> 대충고양이짤, 〈[https://insomniachaos.tistory.com/18 (Oracle) 오라클 명령어 간단 정리]〉, 《티스토리》, 2013-11-12</ref>
+
부여한 권한을 취소하고 싶을 때는 REVOKE를 이용하여 권한을 취소시킨다.<ref name="자료1"> 대충고양이짤, 〈[https://insomniachaos.tistory.com/18 (Oracle) 오라클 명령어 간단 정리]〉, 《티스토리》, 2013-11-12</ref>
  
 
  REVOKE CONNECT, RESOURCE FROM testuser;
 
  REVOKE CONNECT, RESOURCE FROM testuser;
  
 
===테이블관련===
 
===테이블관련===
* '''모든 테이블 보기
+
오라클은 기본적으로 데이터베이스를 활용해야 하기 때문에 테이블을 사용하는 명령어들을 가지고있으며 이는 SQL문에서 정의어와 조작어를 사용한다. 우선 테이블의 내부 데이터를 모두 보기 위해서는 SELECT에 모든 컬럼을 나타내는 *을 활용하거나 모든 컬럼을 작성해준다.
  
 
  SELECT * FROM TAB;
 
  SELECT * FROM TAB;
  
* '''테이블 구조 확인하기
+
테이블의 구조를 확인하기 위해서는 DESC 명령어를 사용해 지정한 테이블의 구조를 확인한다.
  
 
  DESC testtable;
 
  DESC testtable;
  
* '''테이블 생성
+
테이블을 생성하기 위해서는 CREATE를 사용하는데 이는 정의어의 CREATE와 같다. 테이블을 생성할 때 CREATE TABLE을 작성한 뒤 사용자가 만들고 싶은 테이블 명을 작성하고 컬럼명과 자료형을 대입해준다.
  
 
  CREATE TABLE testtable (
 
  CREATE TABLE testtable (
 
     test_id NUMBER NOT NULL);
 
     test_id NUMBER NOT NULL);
  
* '''코멘트 추가
+
테이블이나 컬럼을 설명하거나 코맨트를 남기고 싶을 때는 COMMENT ON TABLE, COMMENT ON COLUMN을 사용해 자신이 남기고 싶은 맨트를 작성한다. 이 때 대부분 어떤 용도로 사용하는지를 작성한다.
  
 
  COMMENT ON TABLE testtable IS 'This table is test table';
 
  COMMENT ON TABLE testtable IS 'This table is test table';
 
  COMMENT ON COLUMN testtable.testfield IS 'This column is test column of testtable';
 
  COMMENT ON COLUMN testtable.testfield IS 'This column is test column of testtable';
  
* '''테이블 변경
+
테이블을 변경할 때는 다양한 형태가 존재한다. 형태는 주로 컬럼을 추가하는 형태, 컬럼의 타입을 변경하는 형태, 컬럼을 삭제하는 형태로 이루어져 있다. 모든 형태는 ALTER TABLE을 활용하지만 뒤에 오는 함수가 다르다.
컬럼 추가
+
컬럼 추가의 경우 ADD, 컬럼의 타입 변경의 경우에는 MODIFY이며, 삭제의 경우 DROP을 사용한다.
  
 
  ALTER TABLE testtable ADD(testcolumn VARCHAR2(10));
 
  ALTER TABLE testtable ADD(testcolumn VARCHAR2(10));
 
컬럼 타입 변경
 
 
 
  ALTER TABLE testtable MODIFY(testcolumn VARCHAR2(10));
 
  ALTER TABLE testtable MODIFY(testcolumn VARCHAR2(10));
 
컬럼 삭제
 
 
 
  ALTER TABLE testtable DROP(testcolumn);
 
  ALTER TABLE testtable DROP(testcolumn);
  
* '''테이블 삭제<ref name="자료1"> 대충고양이짤, 〈[https://insomniachaos.tistory.com/18 (Oracle) 오라클 명령어 간단 정리]〉, 《티스토리》, 2013-11-12</ref>
+
컬럼을 삭제하는 것과 같이 테이블도 삭제가 가능하다. 테이블을 삭제할 때는 DROP을 사용하는데 다른 명령어들과 같이 DROP TABLE을 작성하고 자신이 삭제하고싶은 테이블 명을 입력하면 테이블을 삭제할 수 있다.<ref name="자료1"> 대충고양이짤, 〈[https://insomniachaos.tistory.com/18 (Oracle) 오라클 명령어 간단 정리]〉, 《티스토리》, 2013-11-12</ref>
  
 
  DROP TABLE testtable;
 
  DROP TABLE testtable;
  
 
===값 입출력===
 
===값 입출력===
* '''레코드 삽입
+
테이블에 값을 입력하거나 출력할 때 사용하는 명령어로 SQL문의 조작어와 같다. 레코드를 추가하기 위해서는 INSERT문을 활용해 컬럼에 맞게 데이터를 작성해야한다. 아래 컬럼의 개수와 자료형에 맞춰 입력값을 작성해야 에러가 나지않고 사용이 가능하다. INSERT INTO 이후에 테이블명과 컬럼을 작성하고 VALUES에 자신이 넣고 싶은 데이터를 작성한다.
  
 
  INSERT INTO testtable(test_id, test_name, test_date) VALUES(100, 'test', sysdate);
 
  INSERT INTO testtable(test_id, test_name, test_date) VALUES(100, 'test', sysdate);
  
* '''레코드 수정
+
레코드 수정은 기존에 있던 튜플을 수정하는 것으로 WHERE을 이용해 확실하게 데이터를 지정해주어야한다. 그렇지 않으면 에러가 발생하거나 이상한 부분에서 수정이 일어나 데이터 손실 혹은 자원 낭비가 될 수 있다.
 +
수정은 UPDATE를 사용하며 UPDATE 뒤에 테이블 명을 작성하고 SET 을 이용해 해당 컬럼에 넣은 데이터 값을 작성한다.
  
 
  UPDATE testtable SET test_name = 'test001' WHERE test_id = '001';
 
  UPDATE testtable SET test_name = 'test001' WHERE test_id = '001';
  
* '''레코드 확인
+
레코드를 확인하기 위해서는 SELECT문을 이용해야하는데 아래와 같이 작성했을 때는 테이블 전부를 확인할 수 있다.
  
 
  SELECT * FROM testtable;
 
  SELECT * FROM testtable;
  
* '''레코드 삭제<ref name="자료1"> 대충고양이짤, 〈[https://insomniachaos.tistory.com/18 (Oracle) 오라클 명령어 간단 정리]〉, 《티스토리》, 2013-11-12</ref>
+
레코드 삭제는 DROP 명령어를 사용하는 것이 아닌 DELETE를 사용한다. 해당 테이블 내에 WHERE문과 맞는 조건의 컬럼 혹은 튜플을 삭제할 수 있다. 이 때 WHERE문의 조건을 정확하게 입력해야 데이터의 손실이 일어나지 않는다.<ref name="자료1"> 대충고양이짤, 〈[https://insomniachaos.tistory.com/18 (Oracle) 오라클 명령어 간단 정리]〉, 《티스토리》, 2013-11-12</ref>
  
 
  DELETE FROM testtable WHERE test_name = 'test001';
 
  DELETE FROM testtable WHERE test_name = 'test001';
  
 
===기타 유용한 커맨드===
 
===기타 유용한 커맨드===
* '''DB명 확인
+
오라클에서 나머지 유용한 커맨드가 있으면 데이터베이스를 확인하는 명령어와 SID를 확인하는 명령어가 있다 이 둘은 아래와 같이 입력하면 데이터베이스와 SID를 확인할 수 있다.<ref name="자료1"> 대충고양이짤, 〈[https://insomniachaos.tistory.com/18 (Oracle) 오라클 명령어 간단 정리]〉, 《티스토리》, 2013-11-12</ref>
  
 
  SELECT NAME, DE_UNIQUE_NAME FROM v$database;
 
  SELECT NAME, DE_UNIQUE_NAME FROM v$database;
 
* '''SID 확인<ref name="자료1"> 대충고양이짤, 〈[https://insomniachaos.tistory.com/18 (Oracle) 오라클 명령어 간단 정리]〉, 《티스토리》, 2013-11-12</ref>
 
 
 
  SELECT INSTANCE FROM v$thread;
 
  SELECT INSTANCE FROM v$thread;
  
 
==MySQL==
 
==MySQL==
MySQL의 기본 명령어와 SQL문이다.
+
MySQL의 기본 명령어와 SQL문이다. MySQL에서 데이터베이스에 접속하기 위해서는 우선 mysql의 명령어를 사용해야한다. -u를 이용해 사용자 명을 입력하고 -p를 이용해 데이터베이스 명을 입력하고 비밀번호를 입력한다.<ref name="mysql명령어"> 권남 위키 - https://kwonnam.pe.kr/wiki/database/mysql/basic </ref>
  
* '''데이터베이스 접속
 
 
  mysql -u 사용자명 -p dbname
 
  mysql -u 사용자명 -p dbname
  
145번째 줄: 137번째 줄:
 
  mysql --protocol=tcp -h 'hostname' -P 3306 -u [username]  -p [database-name]
 
  mysql --protocol=tcp -h 'hostname' -P 3306 -u [username]  -p [database-name]
  
* '''비밀번호변경
+
MySQL을 설치한 직후에는 root 계정에 암호가 지정되어 있지 않기 때문에 다음 세가지 방법으로 비밀번호를 변경 할 수 있다. 우선 어드민 권한으로 루트 계정의 패스워드를 변경하는 방법으로 mysql에 admin을 붙이고 -u를 이용해 유저를 root로 작성하고 패스워드 옆 새 비밀번호 칸에 비밀번호를 작성하면 된다.
MySQL을 설치한 직후에는 root 계정에 암호가 지정되어 있지 않기 때문에 다음 세가지 방법으로 비밀번호를 변경 할 수 있다.
 
  
 
  mysqladmin -u root password 새비밀번호
 
  mysqladmin -u root password 새비밀번호
 +
 +
두번째 방법은 UPDATE를 이용해서 비밀번호를 바꾸는 방법으로 WHERE에 user를 계정명과 동일하다는 조건을 주고 SET에서 패스워드를 변경하기 위해 password 함수를 사용한다.
  
 
  UPDATE user SET password=password('새비밀번호') WHERE user='root';
 
  UPDATE user SET password=password('새비밀번호') WHERE user='root';
 
  FLUSH PRIVILEGES;
 
  FLUSH PRIVILEGES;
 +
 +
마지막 방법으로 SET PASSWORD FOR을 통해서 계정의 비밀번호를 변경하는 방법이 있다.
  
 
  SET PASSWORD FOR root=password('새비밀번호');
 
  SET PASSWORD FOR root=password('새비밀번호');
  
root 비밀번호가 설정된 상태에서는 mysql이나 mysqladmin 명령을 실행할 때 -p 옵션을 붙여주고 기존 비밀번호를 입력해야만 한다.
+
root 비밀번호가 설정된 상태에서는 mysql이나 mysqladmin 명령을 실행할 때 -p 옵션을 붙여주고 기존 비밀번호를 입력해야만 한다. 그리고 사용자를 확인하기 위해서는 SELECT문을 통해 계정과 호스트가 누구인지 확인한다.<ref name="mysql명령어"> 권남 위키 - https://kwonnam.pe.kr/wiki/database/mysql/basic </ref>
  
* '''사용자 확인
 
 
  use mysql;
 
  use mysql;
 
  select User,Host from user;
 
  select User,Host from user;
 +
 +
어떤 권한을 가지고 있는지는 권한 명령어인 GRANTS와 보여주는 명령어인 SHOW를 더해 권한을 보고싶은 계정을 작성한다.
 +
 
  SHOW GRANTS FOR 'username'@'%'  
 
  SHOW GRANTS FOR 'username'@'%'  
  
* '''사용자 추가/권한
+
사용자를 추가하거나 권한을 부여하는 방법은 아래와 같이 username이라는 사용자를 password라는 비밀번호를 갖도록 추가한다. username은 dbname이라는 데이터 베이스에 대한 모든 권한을 가지고 있다. username 사용자는 로컬 호스트에만 접속할 수 있다.
 +
 
 
  CREATE USER username@localhost IDENTIFIED BY 'userpassword'
 
  CREATE USER username@localhost IDENTIFIED BY 'userpassword'
 
  GRANT SELECT,INSERT,UPDATE,DELETE ON dbname.* TO 'username'@'localhost';
 
  GRANT SELECT,INSERT,UPDATE,DELETE ON dbname.* TO 'username'@'localhost';
+
 
 +
다른 호스트에 접속하려면 아래와 같이 다시 입력해준다.<ref name="mysql명령어"> 권남 위키 - https://kwonnam.pe.kr/wiki/database/mysql/basic </ref>
 +
 
 
  GRANT ALL PRIVILEGES ON dbname.* TO username@localhost IDENTIFIED BY 'password';
 
  GRANT ALL PRIVILEGES ON dbname.* TO username@localhost IDENTIFIED BY 'password';
  
* '''불필요한 사용자 삭제
+
불필요한 사용자 삭제는 DELETE문을 사용한다. USER 베이스에서 사용자가 작성한 사용자명을 조건문에 입력해 조건에 맞는 계정을 삭제한다.
 +
 
 
  DLETE FROM USER WHERE USER='username';
 
  DLETE FROM USER WHERE USER='username';
 
  FLUSH PRIVILEGES;
 
  FLUSH PRIVILEGES;
  
* '''데이터베이스 생성/보기
+
데이터 베이스를 생성하는 명령어는 CREATE DATABASE를 이용한다. 그리고 현재 만들어진 데이터 베이스를 전부 확인하기 위해서는 SHOW DATABASES를 이용해 모든 데이터베이스를 볼 수 있다.
 +
그 뒤 데이터베이스를 사용하기 위해서 USE를 통해 만들어진 데이터베이스에 진입한다. 여기서 데이터베이스가 쓸모없거나 잘못만들었을 때는 과감하게 DROP문을 이용해 삭제해준다.
 +
 
 
  CREATE DATABASE dbname;  
 
  CREATE DATABASE dbname;  
 
  CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
 
  CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
179번째 줄: 182번째 줄:
 
  DROP DATABASE [IF EXISTS] dbname;
 
  DROP DATABASE [IF EXISTS] dbname;
  
* '''테이블 생성/보기
+
데이터 베이스에 진입하고 테이블을 생성한다. 테이블 생성은 'CREATE TABLE 테이블명'을 활용한다. 내용으로는 컬럼값과 자료형을 입력해주고 더 추가하고싶은 형태가 있으면 띄어쓰기 이후에 작성해주며, 컬럼을 추가하고 싶을 때는 쉼표(,)를 이용해 다음 컬럼을 작성한다.
 +
 
 
  CREATE TABLE tablename (
 
  CREATE TABLE tablename (
 
   column_name1 INT PRIMARY KEY AUTO_INCREMENT,
 
   column_name1 INT PRIMARY KEY AUTO_INCREMENT,
186번째 줄: 190번째 줄:
 
   ) ENGINE=INNODB;
 
   ) ENGINE=INNODB;
  
* '''테이블 목록 보기
+
데이터베이스 내에 만들어진 테이블을 확인하기 위해서는 SHOW 명령어를 통해 모든 테이블을 확인할 수 있다.
 
  SHOW TABLES;
 
  SHOW TABLES;
  
* '''테이블 구조 보기
+
테이블 구조는 자신이 원하는 테이블명을 EXPAIN 혹은 DESCRIBE 옆에 입력하면 테이블의 구조를 보여준다.<ref name="mysql명령어"> 권남 위키 - https://kwonnam.pe.kr/wiki/database/mysql/basic </ref>
 
  EXPLAIN tablename;
 
  EXPLAIN tablename;
 
  DESCRIBE tablename;
 
  DESCRIBE tablename;
  
* '''테이블 이름 변경
+
테이블을 생성할 때 이름을 잘못 입력했다면 RENAME을 통해 다시 이름을 수정할 수 있다.
 +
 
 
  RENAME TABLE tablename1 TO tablename2[, tablename3 TO tablename4];
 
  RENAME TABLE tablename1 TO tablename2[, tablename3 TO tablename4];
  
* '''테이블 삭제
+
테이블 삭제는 DROP을 통해 만들어진 테이블을 삭제할 수 있다. 불필요하거나 잘못 만들어진 테이블은 망설임없이 없애는 것이 좋다.
 +
 
 
  DROP TABLE [IF EXISTS] tablename;
 
  DROP TABLE [IF EXISTS] tablename;
  
* '''현재 상태 보기
+
현재 사용하는 있는 아이디와 마이에스큐엘의 버전, 서버 버전 등의 현재 상태를 알기위해서는 간단하게 STATUS를 입력하고 줄넘기기를 하면 바로 확인이 가능하다.
 
  STATUS
 
  STATUS
  
* '''테이블 데이터 추가
+
CRUD에서 C의 역할을 하고있는 INSERT는 테이블에 데이터를 추가하는 일을 한다. 자신이 원하는 테이블 명을 입력하고 컬럼과 벨류값의 종류와 개수를 맞추어 입력하면 데이터가 추가된다. 이 때, 자동으로 데이값이 채워지는 부분은 따로 개수를 맞추지 않아도 된다.
 
  INSERT INTO tablename VALUES(값1, 값2, ...);
 
  INSERT INTO tablename VALUES(값1, 값2, ...);
 
  INSERT INTO tablename (col1, col2, ...) VALUES(값1, 값2, ...);
 
  INSERT INTO tablename (col1, col2, ...) VALUES(값1, 값2, ...);
  
* '''테이블 확인
+
만들어진 테이블의 내용을 확인하는 것은 SELECT문을 활용한다.
 
  SELECT col1, col2, ... FROM tablename;
 
  SELECT col1, col2, ... FROM tablename;
  
컬럼명을 *로 할 시 모든 컬럼을 의미한다. 그리고 AS를 통해 컬럼의 이름을 바꿔서 출력이 가능하며 DESC를 활용해 내림차순 혹은 ASC를 활용해 오름차순으로 결과를 출력할 수 있다.
+
컬럼명을 *로 할 시 모든 컬럼을 의미한다. 그리고 AS를 통해 컬럼의 이름을 바꿔서 출력이 가능하며 DESC를 활용해 내림차순 혹은 ASC를 활용해 오름차순으로 결과를 출력할 수 있다.<ref name="mysql명령어"> 권남 위키 - https://kwonnam.pe.kr/wiki/database/mysql/basic </ref>
 +
 
 
  SELECT * FROM tablename ORDER BY col1 DESC;
 
  SELECT * FROM tablename ORDER BY col1 DESC;
 
  SELECT col1, korean + math english AS '총점' FROM tablename ORDER BY '총점' ASC;
 
  SELECT col1, korean + math english AS '총점' FROM tablename ORDER BY '총점' ASC;
217번째 줄: 224번째 줄:
 
  SELECT * FROM grade LIMIT 10;
 
  SELECT * FROM grade LIMIT 10;
  
* '''테이블 수정
+
만들어진 테이블 내의 데이터를 수정할 때는 UPDATE문을 활용한다 SET에서 자신이 바꾸고싶은 컬럼의 값을 수정해주고 WHERE문 옆에 어떤 데이터를 바꿀 것인가 조건을 작성해준다. 이 때 조건을 정확하게 입력하지 않으면 잘못된 데이터가 유실될 수 있다.
 +
 
 
  UPDATE tablename SET col1=새값 WEHER 조건
 
  UPDATE tablename SET col1=새값 WEHER 조건
  
* '''테이블 삭제
+
테이블 삭제는 데이터 베이스 내에 만들어진 테이블을 삭제하는 것으로 DELETE문을 이용해 원하는 테이블을 삭제할 수 있다.<ref name="mysql명령어"> 권남 위키 - https://kwonnam.pe.kr/wiki/database/mysql/basic </ref>
 
  DELETE FROM tablename WEHRE 조건
 
  DELETE FROM tablename WEHRE 조건
  
229번째 줄: 237번째 줄:
 
* 돼민이, 〈[https://jink1982.tistory.com/31 (Oracle) SQL의 종류 (DDL, DML, DCL)]〉, 《티스토리》, 2016-11-13
 
* 돼민이, 〈[https://jink1982.tistory.com/31 (Oracle) SQL의 종류 (DDL, DML, DCL)]〉, 《티스토리》, 2016-11-13
 
* 장군이는 홍군, 〈[https://footy119.tistory.com/entry/DDL%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%95%EC%9D%98%EC%96%B4-DML%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A1%B0%EC%9E%91%EC%96%B4-DCL%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%9C%EC%96%B4%EC%96%B4 DDL(데이터 정의어), DML(데이터 조작어) , DCL(데이터 제어어)]〉, 《티스토리》, 2008-07-28
 
* 장군이는 홍군, 〈[https://footy119.tistory.com/entry/DDL%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%95%EC%9D%98%EC%96%B4-DML%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A1%B0%EC%9E%91%EC%96%B4-DCL%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%9C%EC%96%B4%EC%96%B4 DDL(데이터 정의어), DML(데이터 조작어) , DCL(데이터 제어어)]〉, 《티스토리》, 2008-07-28
 +
* 권남 위키 - https://kwonnam.pe.kr/wiki/database/mysql/basic
  
==같이보기==
+
==같이 보기==
 
* [[명령어]]
 
* [[명령어]]
 
* [[데이터베이스]]
 
* [[데이터베이스]]
238번째 줄: 247번째 줄:
 
* [[DB2]]
 
* [[DB2]]
  
{{프로그래밍 | 검토 필요}}
+
{{데이터|검토 필요}}

2021년 8월 7일 (토) 02:51 기준 최신판

DB 명령어DBMS를 활용할 때 사용하는 명령어이다. 데이터 베이스중 가장 널리 사용되고 있는 것은 오라클에서 제작한 오라클 데이터베이스이며 현재 유닉스 환경에서 가장 널리 사용되고 있는 RDBMS이다. 그 밖에 마이에스큐엘, 엠에스에스큐엘, 포스트그레스큐엘, 몽고디비, 디비투, 에스큐엘라이트, 마리아디비 등이 있다.

SQL[편집]

SQL의 종류에는 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL) 가 있다.[1]

데이터 정의어[편집]

스키마, 도메인, 테이블, 뷰, 인덱스를 정의하거나 변경 또는 삭제할 때 사용하는 언어로, 데이터 베이스 관리자나 데이터베이스 설계자가 사용한다. 데이터 정의어의 유형은 세가지로 CREATE, ALTER, DROP이 있다. CREATE는 스키마, 도메인, 테이블, 뷰, 인덱스를 정의하며 ALTER는 테이블에 대한 정의를 변경하는데 사용한다. 그리고 DROP은 스키마, 도메인, 테이블, 뷰, 인덱스를 삭제하는데 사용한다. 추가로 TRUNCATE는 테이블에 있는 모든 데이터를 삭제하는 명령어다.[2]

데이터 조작어[편집]

데이터 조작어는 테이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터를 실질적으로 처리하는데 사용하는 언어로 데이터베이스 사용자와 데이터베이스 관리 시스템 간의 인터페이스를 제공한다. 데이터 조작어의 유형은 4가지로 SELECT, INSERT, DELETE, UPDATE가 있다. SELECT은 테이블에서 조건에 맞는 튜플을 검색하고, INSERT는 테이블에 새로운 튜플을 삽입한다. DELETE는 테이블 조건에 맞는 튜플을 삭제하고 UPDATE는 테이블의 조건에 맞는 튜플의 내용을 변경한다.[2]

데이터 제어어[편집]

데이터 제어어는 데이터의 보안. 무결성, 데이터 회복, 병행 수행 제어 등을 정의하는데 사용하는 언어이다. 데이터 베이스 관리자가 데이터 관리를 목적으로 사용하며 종류는 COMMIT, ROLLBACK, GRANT, REVOKE이 있다. COMMIT은 데이터베이스 조작 작업이 정상적으로 완료되었음을 관리자에게 알려주며, ROLLBACK은 데이터베이스 조작 작업이 비정상적으로 종료되었을 때 원래의 상태로 복구할 때 사용한다. GRANT는 데이터베이스 사용자에게 사용권한을 부여하고 REVOKE은 데이터베이스 사용자의 사용권한을 취소할 때 사용한다.[2]

오라클[편집]

SQL 명령 줄은 오라클 데이터베이스XE에 액세스 하기위한 명령 줄 도구다. SQL, PL/SQL, SQL *Plus의 명령과 문을 입력하고 실행할 수 있다.

계정관련[편집]

오라클에서 사용하는 명령어들은 SQL *PLUS를 사용하는 것도 있으며 COMMANDS에 작성하는 명령어들도 존재한다. 우선 계정을 확인하기 위해서는 SHOW라는 명령어를 사용해 계정을 확인한다.

SHOW USER;

SHOW의 경우 계정 하나를 확인하지만 SELECT과 같은 SQL문을 섞어서 사용하면 모든 계정을 확인하는 것이 가능하다.

SELECT * FROM all_users;

계정을 확인했으면 계정으로 들어가야 한다. 이 때, SYS 명령어를 사용해 계정에 진입해야한다.

SYS as sysdba

계정을 확인하고 사용하는 방법 말고도 계정을 생성하는 명령어도 있다. 이 또한 SQL문을 섞어 사용하는데 CREATE문을 사용한다. CREATE를 이용해 자신이 쓰고싶은 아이디를 testuser 자리에 작성하고 비밀번호를 testpwd에 작성한다.

CREATE USER testuser IDENTIFIED BY "testpwd"

현재 자신이 계정을 사용하고 있지만 다른 계정으로 이동하고 싶을 때는 conn을 활용해 다른 계정으로 이동이 가능하다.

conn testuser/testuser;

위와 같이 작성을 하고 비밀번호를 입력한다.

계정의 비밀번호를 변경하고 싶을때는 ALTER문을 활용해 비밀번호를 변경할 수 있다. 아래와 같이 testuser에 아이디를 입력하고 바꾸고 싶은 패스워드를 chagepwd 자리에 작성한다.

ALTER USER testuser IDENTIFIED BY "chagepwd";

계정을 삭제하고 싶을때는 DROP SQL문을 활용하여 계정을 삭제한다. 현재 존재하는 계정을 DROP문의 testuser 자리에 작성하고 세미콜론(;)으로 문장을 종료한 뒤 엔터를 입력하면 비밀번호 입력창이 뜬다. 비밀번호를 입력하고 다시 확인을 하면 존재하던 계정이 삭제된다.[3]

DROP USER testuser;

권한관련[편집]

오라클의 권한 관련 명령어는 GRANT나 REVOKE을 사용한다. 우선 접속 권한을 주기위해선 GRANT에 CONNECT를 추가해서 해당 계정에 접속권한을 주어야한다. 아래와 같이 명령어를 입력하고 testuser자리에 권한을 부여할 아이디를 작성한다.

GRANT CONNECT, RESOURCE TO testuser;

사용자에게 사용 권한을 주기위해서는 아래와 같은 명령어를 작성해야한다. GRANT를 이용해 추가, 삭제, 검색, 수정을 testdb에서 할 수 있도록 해주는 권한을 계정에 부여한다. 계정명은 testuser 자리에 입력하고 세미콜론(;)을 이용해 라인을 종료한다.

GRANT DELETE, INSERT, SELECT, UPDATE ON testdb TO testuser;

계정에 DBA의 권한을 주기위해서 GRANT를 사용해 해당 계정에 권한을 부여한다.

GRANT DBA TO testuser;

부여한 권한을 취소하고 싶을 때는 REVOKE를 이용하여 권한을 취소시킨다.[3]

REVOKE CONNECT, RESOURCE FROM testuser;

테이블관련[편집]

오라클은 기본적으로 데이터베이스를 활용해야 하기 때문에 테이블을 사용하는 명령어들을 가지고있으며 이는 SQL문에서 정의어와 조작어를 사용한다. 우선 테이블의 내부 데이터를 모두 보기 위해서는 SELECT에 모든 컬럼을 나타내는 *을 활용하거나 모든 컬럼을 작성해준다.

SELECT * FROM TAB;

테이블의 구조를 확인하기 위해서는 DESC 명령어를 사용해 지정한 테이블의 구조를 확인한다.

DESC testtable;

테이블을 생성하기 위해서는 CREATE를 사용하는데 이는 정의어의 CREATE와 같다. 테이블을 생성할 때 CREATE TABLE을 작성한 뒤 사용자가 만들고 싶은 테이블 명을 작성하고 컬럼명과 자료형을 대입해준다.

CREATE TABLE testtable (
   test_id NUMBER NOT NULL);

테이블이나 컬럼을 설명하거나 코맨트를 남기고 싶을 때는 COMMENT ON TABLE, COMMENT ON COLUMN을 사용해 자신이 남기고 싶은 맨트를 작성한다. 이 때 대부분 어떤 용도로 사용하는지를 작성한다.

COMMENT ON TABLE testtable IS 'This table is test table';
COMMENT ON COLUMN testtable.testfield IS 'This column is test column of testtable';

테이블을 변경할 때는 다양한 형태가 존재한다. 형태는 주로 컬럼을 추가하는 형태, 컬럼의 타입을 변경하는 형태, 컬럼을 삭제하는 형태로 이루어져 있다. 모든 형태는 ALTER TABLE을 활용하지만 뒤에 오는 함수가 다르다. 컬럼 추가의 경우 ADD, 컬럼의 타입 변경의 경우에는 MODIFY이며, 삭제의 경우 DROP을 사용한다.

ALTER TABLE testtable ADD(testcolumn VARCHAR2(10));
ALTER TABLE testtable MODIFY(testcolumn VARCHAR2(10));
ALTER TABLE testtable DROP(testcolumn);

컬럼을 삭제하는 것과 같이 테이블도 삭제가 가능하다. 테이블을 삭제할 때는 DROP을 사용하는데 다른 명령어들과 같이 DROP TABLE을 작성하고 자신이 삭제하고싶은 테이블 명을 입력하면 테이블을 삭제할 수 있다.[3]

DROP TABLE testtable;

값 입출력[편집]

테이블에 값을 입력하거나 출력할 때 사용하는 명령어로 SQL문의 조작어와 같다. 레코드를 추가하기 위해서는 INSERT문을 활용해 컬럼에 맞게 데이터를 작성해야한다. 아래 컬럼의 개수와 자료형에 맞춰 입력값을 작성해야 에러가 나지않고 사용이 가능하다. INSERT INTO 이후에 테이블명과 컬럼을 작성하고 VALUES에 자신이 넣고 싶은 데이터를 작성한다.

INSERT INTO testtable(test_id, test_name, test_date) VALUES(100, 'test', sysdate);

레코드 수정은 기존에 있던 튜플을 수정하는 것으로 WHERE을 이용해 확실하게 데이터를 지정해주어야한다. 그렇지 않으면 에러가 발생하거나 이상한 부분에서 수정이 일어나 데이터 손실 혹은 자원 낭비가 될 수 있다. 수정은 UPDATE를 사용하며 UPDATE 뒤에 테이블 명을 작성하고 SET 을 이용해 해당 컬럼에 넣은 데이터 값을 작성한다.

UPDATE testtable SET test_name = 'test001' WHERE test_id = '001';

레코드를 확인하기 위해서는 SELECT문을 이용해야하는데 아래와 같이 작성했을 때는 테이블 전부를 확인할 수 있다.

SELECT * FROM testtable;

레코드 삭제는 DROP 명령어를 사용하는 것이 아닌 DELETE를 사용한다. 해당 테이블 내에 WHERE문과 맞는 조건의 컬럼 혹은 튜플을 삭제할 수 있다. 이 때 WHERE문의 조건을 정확하게 입력해야 데이터의 손실이 일어나지 않는다.[3]

DELETE FROM testtable WHERE test_name = 'test001';

기타 유용한 커맨드[편집]

오라클에서 나머지 유용한 커맨드가 있으면 데이터베이스를 확인하는 명령어와 SID를 확인하는 명령어가 있다 이 둘은 아래와 같이 입력하면 데이터베이스와 SID를 확인할 수 있다.[3]

SELECT NAME, DE_UNIQUE_NAME FROM v$database;
SELECT INSTANCE FROM v$thread;

MySQL[편집]

MySQL의 기본 명령어와 SQL문이다. MySQL에서 데이터베이스에 접속하기 위해서는 우선 mysql의 명령어를 사용해야한다. -u를 이용해 사용자 명을 입력하고 -p를 이용해 데이터베이스 명을 입력하고 비밀번호를 입력한다.[4]

mysql -u 사용자명 -p dbname

설치 직후에는 root 사용자에 비밀번호가 없으므로 다음과 같이 접속하여 MySQL을 관리할 수 있다.

mysql -u root mysql

외부 서버에서 접속이 불가하면 MySQL 설정에서 bind-address 항목을 살펴본다.

mysql --protocol=tcp -h 'hostname' -P 3306 -u [username]  -p [database-name]

MySQL을 설치한 직후에는 root 계정에 암호가 지정되어 있지 않기 때문에 다음 세가지 방법으로 비밀번호를 변경 할 수 있다. 우선 어드민 권한으로 루트 계정의 패스워드를 변경하는 방법으로 mysql에 admin을 붙이고 -u를 이용해 유저를 root로 작성하고 패스워드 옆 새 비밀번호 칸에 비밀번호를 작성하면 된다.

mysqladmin -u root password 새비밀번호

두번째 방법은 UPDATE를 이용해서 비밀번호를 바꾸는 방법으로 WHERE에 user를 계정명과 동일하다는 조건을 주고 SET에서 패스워드를 변경하기 위해 password 함수를 사용한다.

UPDATE user SET password=password('새비밀번호') WHERE user='root';
FLUSH PRIVILEGES;

마지막 방법으로 SET PASSWORD FOR을 통해서 계정의 비밀번호를 변경하는 방법이 있다.

SET PASSWORD FOR root=password('새비밀번호');

root 비밀번호가 설정된 상태에서는 mysql이나 mysqladmin 명령을 실행할 때 -p 옵션을 붙여주고 기존 비밀번호를 입력해야만 한다. 그리고 사용자를 확인하기 위해서는 SELECT문을 통해 계정과 호스트가 누구인지 확인한다.[4]

use mysql;
select User,Host from user;

어떤 권한을 가지고 있는지는 권한 명령어인 GRANTS와 보여주는 명령어인 SHOW를 더해 권한을 보고싶은 계정을 작성한다.

SHOW GRANTS FOR 'username'@'%' 

사용자를 추가하거나 권한을 부여하는 방법은 아래와 같이 username이라는 사용자를 password라는 비밀번호를 갖도록 추가한다. username은 dbname이라는 데이터 베이스에 대한 모든 권한을 가지고 있다. username 사용자는 로컬 호스트에만 접속할 수 있다.

CREATE USER username@localhost IDENTIFIED BY 'userpassword'
GRANT SELECT,INSERT,UPDATE,DELETE ON dbname.* TO 'username'@'localhost';

다른 호스트에 접속하려면 아래와 같이 다시 입력해준다.[4]

GRANT ALL PRIVILEGES ON dbname.* TO username@localhost IDENTIFIED BY 'password';

불필요한 사용자 삭제는 DELETE문을 사용한다. USER 베이스에서 사용자가 작성한 사용자명을 조건문에 입력해 조건에 맞는 계정을 삭제한다.

DLETE FROM USER WHERE USER='username';
FLUSH PRIVILEGES;

데이터 베이스를 생성하는 명령어는 CREATE DATABASE를 이용한다. 그리고 현재 만들어진 데이터 베이스를 전부 확인하기 위해서는 SHOW DATABASES를 이용해 모든 데이터베이스를 볼 수 있다. 그 뒤 데이터베이스를 사용하기 위해서 USE를 통해 만들어진 데이터베이스에 진입한다. 여기서 데이터베이스가 쓸모없거나 잘못만들었을 때는 과감하게 DROP문을 이용해 삭제해준다.

CREATE DATABASE dbname; 
CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
SHOW DATABASES;
USE dbname;
DROP DATABASE [IF EXISTS] dbname;

데이터 베이스에 진입하고 테이블을 생성한다. 테이블 생성은 'CREATE TABLE 테이블명'을 활용한다. 내용으로는 컬럼값과 자료형을 입력해주고 더 추가하고싶은 형태가 있으면 띄어쓰기 이후에 작성해주며, 컬럼을 추가하고 싶을 때는 쉼표(,)를 이용해 다음 컬럼을 작성한다.

CREATE TABLE tablename (
  column_name1 INT PRIMARY KEY AUTO_INCREMENT,
  column_name2 VARCHAR(15) NOT NULL,
  column_name3 INT
  ) ENGINE=INNODB;

데이터베이스 내에 만들어진 테이블을 확인하기 위해서는 SHOW 명령어를 통해 모든 테이블을 확인할 수 있다.

SHOW TABLES;

테이블 구조는 자신이 원하는 테이블명을 EXPAIN 혹은 DESCRIBE 옆에 입력하면 테이블의 구조를 보여준다.[4]

EXPLAIN tablename;
DESCRIBE tablename;

테이블을 생성할 때 이름을 잘못 입력했다면 RENAME을 통해 다시 이름을 수정할 수 있다.

RENAME TABLE tablename1 TO tablename2[, tablename3 TO tablename4];

테이블 삭제는 DROP을 통해 만들어진 테이블을 삭제할 수 있다. 불필요하거나 잘못 만들어진 테이블은 망설임없이 없애는 것이 좋다.

DROP TABLE [IF EXISTS] tablename;

현재 사용하는 있는 아이디와 마이에스큐엘의 버전, 서버 버전 등의 현재 상태를 알기위해서는 간단하게 STATUS를 입력하고 줄넘기기를 하면 바로 확인이 가능하다.

STATUS

CRUD에서 C의 역할을 하고있는 INSERT는 테이블에 데이터를 추가하는 일을 한다. 자신이 원하는 테이블 명을 입력하고 컬럼과 벨류값의 종류와 개수를 맞추어 입력하면 데이터가 추가된다. 이 때, 자동으로 데이값이 채워지는 부분은 따로 개수를 맞추지 않아도 된다.

INSERT INTO tablename VALUES(값1, 값2, ...);
INSERT INTO tablename (col1, col2, ...) VALUES(값1, 값2, ...);

만들어진 테이블의 내용을 확인하는 것은 SELECT문을 활용한다.

SELECT col1, col2, ... FROM tablename;

컬럼명을 *로 할 시 모든 컬럼을 의미한다. 그리고 AS를 통해 컬럼의 이름을 바꿔서 출력이 가능하며 DESC를 활용해 내림차순 혹은 ASC를 활용해 오름차순으로 결과를 출력할 수 있다.[4]

SELECT * FROM tablename ORDER BY col1 DESC;
SELECT col1, korean + math english AS '총점' FROM tablename ORDER BY '총점' ASC;

결과중 숫자를 제한해 얻고싶은 개수만 가져오게 할 수도 있다.

SELECT * FROM grade LIMIT 10;

만들어진 테이블 내의 데이터를 수정할 때는 UPDATE문을 활용한다 SET에서 자신이 바꾸고싶은 컬럼의 값을 수정해주고 WHERE문 옆에 어떤 데이터를 바꿀 것인가 조건을 작성해준다. 이 때 조건을 정확하게 입력하지 않으면 잘못된 데이터가 유실될 수 있다.

UPDATE tablename SET col1=새값 WEHER 조건

테이블 삭제는 데이터 베이스 내에 만들어진 테이블을 삭제하는 것으로 DELETE문을 이용해 원하는 테이블을 삭제할 수 있다.[4]

DELETE FROM tablename WEHRE 조건

각주[편집]

  1. 돼민이, 〈(Oracle) SQL의 종류 (DDL, DML, DCL)〉, 《티스토리》, 2016-11-13
  2. 2.0 2.1 2.2 장군이는 홍군, 〈DDL(데이터 정의어), DML(데이터 조작어) , DCL(데이터 제어어)〉, 《티스토리》, 2008-07-28
  3. 3.0 3.1 3.2 3.3 3.4 대충고양이짤, 〈(Oracle) 오라클 명령어 간단 정리〉, 《티스토리》, 2013-11-12
  4. 4.0 4.1 4.2 4.3 4.4 4.5 권남 위키 - https://kwonnam.pe.kr/wiki/database/mysql/basic

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 DB 명령어 문서는 데이터에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.