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

DB 명령어

위키원
rudgh01 (토론 | 기여)님의 2020년 9월 9일 (수) 17:52 판
이동: 둘러보기, 검색

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 -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 계정에 암호가 지정되어 있지 않기 때문에 다음 세가지 방법으로 비밀번호를 변경 할 수 있다.

mysqladmin -u root password 새비밀번호
UPDATE user SET password=password('새비밀번호') WHERE user='root';
FLUSH PRIVILEGES;
SET PASSWORD FOR root=password('새비밀번호');

root 비밀번호가 설정된 상태에서는 mysql이나 mysqladmin 명령을 실행할 때 -p 옵션을 붙여주고 기존 비밀번호를 입력해야만 한다.

  • 사용자 확인
use mysql;
select User,Host from user;
SHOW GRANTS FOR 'username'@'%' 
  • 사용자 추가/권한
CREATE USER username@localhost IDENTIFIED BY 'userpassword'
GRANT SELECT,INSERT,UPDATE,DELETE ON dbname.* TO 'username'@'localhost';

GRANT ALL PRIVILEGES ON dbname.* TO username@localhost IDENTIFIED BY 'password';
  • 불필요한 사용자 삭제
DLETE FROM USER WHERE USER='username';
FLUSH PRIVILEGES;
  • 데이터베이스 생성/보기
CREATE DATABASE dbname; 
CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
SHOW DATABASES;
USE dbname;
DROP DATABASE [IF EXISTS] dbname;
  • 테이블 생성/보기
CREATE TABLE tablename (
  column_name1 INT PRIMARY KEY AUTO_INCREMENT,
  column_name2 VARCHAR(15) NOT NULL,
  column_name3 INT
  ) ENGINE=INNODB;
  • 테이블 목록 보기
SHOW TABLES;
  • 테이블 구조 보기
EXPLAIN tablename;
DESCRIBE tablename;
  • 테이블 이름 변경
RENAME TABLE tablename1 TO tablename2[, tablename3 TO tablename4];
  • 테이블 삭제
DROP TABLE [IF EXISTS] tablename;
  • 현재 상태 보기
STATUS
  • 테이블 데이터 추가
INSERT INTO tablename VALUES(값1, 값2, ...);
INSERT INTO tablename (col1, col2, ...) VALUES(값1, 값2, ...);
  • 테이블 확인
SELECT col1, col2, ... FROM tablename;

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

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

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

SELECT * FROM grade LIMIT 10;
  • 테이블 수정
UPDATE tablename SET col1=새값 WEHER 조건
  • 테이블 삭제
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

참고자료

같이 보기


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