1. 프롬프트 설명

'=>' SQL명령 대기 상태

'->' 연속된 명령의 입력 대기 상태 ';'로 마무리시 실행

 

2. 커맨드

\? : 도움말 / 각 커맨드의 간단한 설명이 출력됨

\q : 종료

\d : DB내에 존재하는 TABLE , INDEX,VIEW 등의 목록을 출력해준다.

  -> Wd [table_name] : 테이블의 구조를 출력 ;

\dt : DB내에 존재하는 table리스트만 출력

\dT : DB의 테이블에 들어갈 수 있는 데이타형을 출력;

\e : 최근 사용한 명령(버퍼에 들어있는)을 VI편집기로 편집해준다.=>편집후 자동실행

\h [명령어] : SQL 명령어에대한 간단 설명을 제공

\df : SQL 지원함수 목록을 출력



PostgreSQL 사용법


1. 데이타 베이스 구축 명령


1) create

CREATE TABLE  student {
 std_id CHAR(8),
 std_name VARCHAR(15),
 std_addr VARCHAR(50),
 std_tel  VARCHAR(15),
 std_birthday DATE
};
-----------------------------------------------------------
\d ==> database 내에 존재하는 table과, index의 목록을 출력

\d student ==> student table의 정의 상태를 출력
==========================================================

CREATE TABLE student2 {
 std_id CHAR(8) PRIMARY KEY,
 std_sex CHAR(1) DEFAULT 'M' CHECK (std_sex='M' OR std_sex='F'),
 std_name VARCHAR(15) NOT NULL,
 std_addr VARCHAR(50) NOT NULL,
 std_tel  VARCHAR(15),
 std_handphone VARCHAR(15),
 std_birthday DATE NOT NULL 
};
----------------------------------------------------------
 std_id CHAR(8) PRIMARY KEY,
       => std_id 를 primary key로 설정하였기 때문에 primary key인 컬럼에 대한 
          index가 자동으로 생성되어 지고, 그 index의 name은 student2_pkey가 된다.
(테이블 생성시 출력 메시지)
NOTICE: CREATE TABLE/PRIMARY KEY will create implict index 'student2_pkey' for table 'student2'

 std_sex CHAR(1) DEFAULT 'M' CHECK (std_sex='M' OR std_sex='F'),
 ==> std_sex에는 M과 F외에는 입력될 수 없도록 컬럼값을 설정하였다.
            이외의 값이 입력하려고 하면 입력이 되지 않는다.
========================================================


2) insert

INSERT INTO student (std_id, std_name) values ('990001','홍길동');
INSERT INTO student (std_id, std_name) values ('990001','홍길동');
INSERT INTO student (std_id, std_name,std_addr,std_tel,std_handphone,std_birthday)
             values ('990001','홍길동','서울시XXXXXXX 1층','02-2222-2222','010-2222-2222','1980-06-16');
INSERT INTO student (std_name) values ('홍길동');
-----------------------------------------------------------------
student 의 경우에는 오류 없이 들어간다.
하지만 생성된 4개의 데이타는 서로를 나눌 수 있는 유일한 값(PK)가 없기때문에
추후에 데이타 수정시 4개의 데이타를 구분할 방법이 없다.
student2는 pk인 std_id가 같은 데이타에 대해서는 나중에 들어온 데이타를 허용
하지 않는다 따라서 위 4개의 쿼리를 실행한 결과는 1개의 행만 존재한다.
=========================================================================


3) ALTER
: 데이타베이스 구조를 바꾸는데 사용 
=> ALTER TABLE : 컬럼추가하기,컬럼이름바꾸기,테이블이름바꾸기

ALTER TABLE student ADD COLUMN stu_sex CHAR(1);
--------------------------------
student 테이블에 stu_sex라는 컬럼을 추가
=>DEFAULT나 NOT NULL등이 적용되지 않으므로 참고해서 사용해야한다.
  (다 NULL로 저장된다)
================================

ALTER TABLE student RENAME std_sex TO stu_gender;
ALTER TABLE student2 RENAME TO student3;
---------------------------------------------
컬럼명의 변경과 테이블명의 변경의 방법
(테이블명 변경시 테이블 생성시 PRIMARY KEY설정으로 자동 생성된 INDEX는
자동으로 변경되지 않는다.
=============================================


4) DROP 
   DROP TABLE [테이블명];
DROP TABLE student;
=>테이블 삭제




2. 데이타 구축 명령


1)INSERT
INSERT INTO [TABLE_NAME] {COLUMN,....} VALUES {COLUMN_VALUE,...};
INSERT INTO [TABLE_NAME] VALUES {COLUMN_VALUES,....,END_CLOUMN_VALUES};


2)UPDATE
UPDATE [TABLE_NAME] SET [COLUMN_NAME]=[NEW_VALUE] WHERE [COLUMN_NAME]=[OLD_VALUE];
: WHERE절에 쓸 수 있는 비교 방법에는 AND, OR, LIKE 가 있다.
LIKE는 ' 와 ' 사이에들어있는 문자열로 검색하는 것으로서 %가 전체 문자를 대신하고
?가 한글자를 대신한다.  예) '%하%' => 하를 포함하는 모든 값 을 의미한다.

3)DELETE
DELETE FROM [TABLE_NAME] ; 테이블 전체 삭제
DELETE FROM [TABLE_NAME] WHERE [조건]: 조건에 맞는 항목 삭제
=> WHERE 조건을 잘못 입력하면 전체 테이블에 영향이 갈 수 있으므로 조건의
기준은 PK값을 가진 COLUMN을 기준으로 하는 것이 가장 안전하다.





3. 사용자 명령


1) SELECT

SELECT [COLUMN_NAME|각종표현식] FROM [TABLE_NAME] WHERE [조건];

SELECT * FROM student WHRER std_id > 1000;

SELECT COUNT(num),SUM(num),AVG(num),MAX(num),MIN(num) FROM student2;
       num의 개수,num의합,num의평균,num의최대값,num의최소값을 출력한다.


SELECT DISTINCT * FROM A;
(모든 칼럼이 중복되는 항목은 하나만 출력)
SELECT DISTINCT ON num * FROM A;
(num 칼럼이 중복되는 항목은 하나만 출력)

SELECT * FROM A GROUP BY num;

HAVING

ORDER BY [DESC|ASC=DEFAULT]

UNION, INTERSECT, EXCEPT;
합집합, 교집합, 차집합


JOIN  두개의 테이블을 하나의 값을 기준으로 재정렬,가상 테이블을 생성한다.

CREATE VIEW product_temp AS SELECT a,b,c FROM AA;
(자주 JOIN을 실시 할 내용은 VIEW만들어서 그때 그때 새로 만드는 것이 
아니라 만들어진 VIEW테이블을 이용해서 사용하게끔 하면 빠른 수행속도를
보장할 수 있다.)

특정 유저 소유의 모든 오브젝트들을 다른 유저 소속으로 바꾸고 싶다면 아래명으로 간단히 처리할수 있습니다.


postgres=# REASSIGN    OWNED   BY    현OWNER    TO     새OWNER;





 [ 기타  참고 자료 ]

cell_006=# ALTER DATABASE  cell_006  owner to segio;   -->  cell_006 데이타베이스의  사용자를 segio로 변경한다.
 
template1=# CREATE DATABASE cell_001 OWNER user_000;  -->  데이타 베이스 생성 시 사용자를 지정하는 방법.
 

# PostgreSQL상의postgres 유저 패스워드 설정

[root@latest]# su - postgres ← postgres 로 변경

-bash-3.00$ psql template1 ← psql 명령어로 PostgreSQL에 접속
Welcome to psql 7.4.2, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit

template1=# alter user postgres with password '패스워드'; ← PostgreSQL상의 postgres 유저 패스워드 설정
ALTER USER ← 패스워드 변경 완료

template1=# \q ← psql 종료


'배워서 남주자 > Data Base' 카테고리의 다른 글

[oracle] Listener 관련  (0) 2018.03.28
[Postgresql] 접속 제어  (0) 2018.03.23
[Postgresql] 백업 / 복구  (0) 2018.03.23
[postgresql] 초간단 명령어 설명.  (0) 2018.03.23
[MySQL & MariaDB] 설치 후 이것/저것  (0) 2018.03.23

1.  데이터베이스 접속

msyql    -u   사용자명   -p   dbname

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

msyql    -u   사용자명   dbname


2. 비밀번호  변경
MySQL을 설치한 직후에는 root 계정의 암호가 지정되어 있지 않다. 다음 세가지 방법으로 비밀번호를 변경 할 수 있다.

* mysqladmin  이용
mysqladmin   -u  root  password   새비밀번호
* update  이용
mysql   -u   root   mysql
-----
mysql>  UPDATE   user  SET  password=password('새비밀번호')  WHERE  user='root';
mysql>  FLUSH PRIVILEGES;
* set  password  이용
mysql> SET PASSWORD FOR  root=password('새비밀번호');

일단 root 비밀번호가 설정된 상태에서는 mysql이나 msyqladmin 명령을 실행할때 -p 욥션을 붙여주고  비밀번호를 입력해야 접속이 가능하다.

3. 데이터베이스  생성/보기

* 데이터베이스를 생성하고,
mysql> CREATE   DATABASE   dbname;

* 현재 존재하는 데이터베이스 목록을 보여준다.
mysql> SHOW DATABASES;

* 특정 데이타베이스를  선택(사용)한다.
mysql>  USE   dbname;

* 필요 없는 데이타베이스를  삭제한다.
mysql>  DROP  DATABASE  [IF EXISTS]  dbname; 

[IF EXISTS] 옵션은  데이타베이스가 없더라도 오류를 발생시키지 말라는 의미이다.

테이블 생성/보기

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

테이블 구조를 살펴본다.

mysql> EXPLAIN    tablesname;
또는
mysql> DESCRIBE  tablesname;

테이블이름  변경.

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

테이블  삭제.

mysql> DROP TABLE [IF EXISTS] tablename;


4. 사용자 추가/삭제

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

username 이라는  사용자를 password라는 비밀번호를 갖도록 추가한다.
username은 dbname이라는 데이타베이스에 대해 모든 권한을 가지고 있다.
username 사용자는 로칼호스트에서만 접속할 수 있다. 다른 호스트에서 접속하려면, 

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

위와 같이  한번 더 실행한다.  '%'에서 따옴표를 주의한다.
 (* MYSQL 에서 '%'는 localhost를 제외한 모든 호스트를 뜻한다. 즉 localhost에 대해서는 명시적으로 따로 권한을 지정해야 한다.)
 
특정 권한만 주려면, ALL 대신  아래와 같은 형태로 권한을 줄수 있다.

GRANT   INSERT,UPDATE,SELECT   ON   dbname.*   TO   'username'@'%'    IDENTIFIED   BY   'password';

불필요한 사용자  삭제는

mysql> DELETE   FROM   USER   WHERE   USER='username';
mysql> FLUSH  PRIVILEGES;


5. 활용 ( INSERT,  SELECT,  UPDATE,  DELETE,  errors/warnings/processlist, 기타  )

현재 상태 보기

MariaDB [mysql]> STATUS 
-------------- 
mysql  Ver 15.1 Distrib 10.1.22-MariaDB, for Linux (x86_64) using readline 5.1 

Connection id: 96 
Current database: mysql 
Current user: root@localhost 
SSL: Not in use 
Current pager: stdout 
Using outfile: '' 
Using delimiter: ; 
Server: MariaDB 
Server version: 10.1.22-MariaDB MariaDB Server 
Protocol version: 10 
Connection: Localhost via UNIX socket 
Server characterset: latin1 
Db     characterset: latin1 
Client characterset: utf8 
Conn.  characterset: utf8 
UNIX socket: /var/lib/mysql/mysql.sock 
Uptime: 4 hours 28 min 44 sec 

Threads: 2  Questions: 1392  Slow queries: 0  Opens: 40  Flush tables: 1  Open tables: 34  Queries per second avg: 0.086 
--------------

INSERT

mysql>  INSERT  INTO  tablename  VALUES(값1, 값2, ...);
또는
mysql>  INSERT  INTO  tablename (col1, col2, ...)   VALUES(값1, 값2, ...);

SELECT 

mysql>  SELECT col1, col2,  ...   FROM   tablename;

컬럼명을  *로 하면 모든 컬럼 의미.

mysql>  SELECT col1 as '번호', col2 as '성명',  ...   FROM   tablename;

컬럼의 이름을 바꿔서 출력한다.

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

DESC는 내림차순  ASC는 오름차순.

mysql>  SELECT   *   FROM   tablename  LIMIT  100, 10;

결과중  100번째부터   10개만  가져오기,

UPDATE

mysql> UPDATE    tablename  SET   col1=새값    WHERE 조건;

DELETE

mysql>  DELETE   FROM  tablename    where  조건;

오류나 경고  다시 보기

mysql>  SHOW  errors;
mysql>  SHOW  warnings;

MySQL  버전 알아보기

MariaDB [mysql]> show variables  like  '%version%'; 
+-------------------------+---------------------------------+ 
| Variable_name           | Value                           | 
+-------------------------+---------------------------------+ 
| innodb_version          | 5.6.35-80.0                     | 
| protocol_version        | 10                              | 
| slave_type_conversions  |                                 | 
| version                 | 10.1.22-MariaDB                 | 
| version_comment         | MariaDB Server                  | 
| version_compile_machine | x86_64                          | 
| version_compile_os      | Linux                           | 
| version_malloc_library  | system                          | 
| version_ssl_library     | OpenSSL 1.0.1e-fips 11 Feb 2013 | 
| wsrep_patch_version     | wsrep_25.16                     | 
+-------------------------+---------------------------------+ 
10 rows in set (0.00 sec)

테이블/컬럼   정보보기

-- 전체 테이블 정보를 주석까지 포함해 보여준다. 
SHOW TABLE STATUS;

SHOW TABLE STATUS like 'member%'; -- 테이블 이름 매칭 조건 

-- 테이블의 컬럼 정보를 주석까지 포함해 보여준다. 
SHOW FULL COLUMNS FROM [테이블이름];


MySQL & MariaDB 기본 명령어

2017. 5. 11. 15:48
URL 복사통계

1.  데이터베이스 접속

msyql    -u   사용자명   -p   dbname

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

msyql    -u   사용자명   dbname


2. 비밀번호  변경
MySQL을 설치한 직후에는 root 계정의 암호가 지정되어 있지 않다. 다음 세가지 방법으로 비밀번호를 변경 할 수 있다.

* mysqladmin  이용
mysqladmin   -u  root  password   새비밀번호
* update  이용
mysql   -u   root   mysql
-----
mysql>  UPDATE   user  SET  password=password('새비밀번호')  WHERE  user='root';
mysql>  FLUSH PRIVILEGES;
* set  password  이용
mysql> SET PASSWORD FOR  root=password('새비밀번호');

일단 root 비밀번호가 설정된 상태에서는 mysql이나 msyqladmin 명령을 실행할때 -p 욥션을 붙여주고  비밀번호를 입력해야 접속이 가능하다.

3. 데이터베이스  생성/보기

* 데이터베이스를 생성하고,
mysql> CREATE   DATABASE   dbname;

* 현재 존재하는 데이터베이스 목록을 보여준다.
mysql> SHOW DATABASES;

* 특정 데이타베이스를  선택(사용)한다.
mysql>  USE   dbname;

* 필요 없는 데이타베이스를  삭제한다.
mysql>  DROP  DATABASE  [IF EXISTS]  dbname; 

[IF EXISTS] 옵션은  데이타베이스가 없더라도 오류를 발생시키지 말라는 의미이다.

테이블 생성/보기

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

테이블 구조를 살펴본다.

mysql> EXPLAIN    tablesname;
또는
mysql> DESCRIBE  tablesname;

테이블이름  변경.

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

테이블  삭제.

mysql> DROP TABLE [IF EXISTS] tablename;


4. 사용자 추가/삭제

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

username 이라는  사용자를 password라는 비밀번호를 갖도록 추가한다.
username은 dbname이라는 데이타베이스에 대해 모든 권한을 가지고 있다.
username 사용자는 로칼호스트에서만 접속할 수 있다. 다른 호스트에서 접속하려면, 

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

위와 같이  한번 더 실행한다.  '%'에서 따옴표를 주의한다.
 (* MYSQL 에서 '%'는 localhost를 제외한 모든 호스트를 뜻한다. 즉 localhost에 대해서는 명시적으로 따로 권한을 지정해야 한다.)
 
특정 권한만 주려면, ALL 대신  아래와 같은 형태로 권한을 줄수 있다.

GRANT   INSERT,UPDATE,SELECT   ON   dbname.*   TO   'username'@'%'    IDENTIFIED   BY   'password';

불필요한 사용자  삭제는

mysql> DELETE   FROM   USER   WHERE   USER='username';
mysql> FLUSH  PRIVILEGES;


5. 활용 ( INSERT,  SELECT,  UPDATE,  DELETE,
              errors/warnings/processlist, 기타  )


현재 상태 보기

MariaDB [mysql]> STATUS 
-------------- 
mysql  Ver 15.1 Distrib 10.1.22-MariaDB, for Linux (x86_64) using readline 5.1 

Connection id: 96 
Current database: mysql 
Current user: root@localhost 
SSL: Not in use 
Current pager: stdout 
Using outfile: '' 
Using delimiter: ; 
Server: MariaDB 
Server version: 10.1.22-MariaDB MariaDB Server 
Protocol version: 10 
Connection: Localhost via UNIX socket 
Server characterset: latin1 
Db     characterset: latin1 
Client characterset: utf8 
Conn.  characterset: utf8 
UNIX socket: /var/lib/mysql/mysql.sock 
Uptime: 4 hours 28 min 44 sec 

Threads: 2  Questions: 1392  Slow queries: 0  Opens: 40  Flush tables: 1  Open tables: 34  Queries per second avg: 0.086 
--------------

INSERT

mysql>  INSERT  INTO  tablename  VALUES(값1, 값2, ...);
또는
mysql>  INSERT  INTO  tablename (col1, col2, ...)   VALUES(값1, 값2, ...);

SELECT 

mysql>  SELECT col1, col2,  ...   FROM   tablename;

컬럼명을  *로 하면 모든 컬럼 의미.

mysql>  SELECT col1 as '번호', col2 as '성명',  ...   FROM   tablename;

컬럼의 이름을 바꿔서 출력한다.

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

DESC는 내림차순  ASC는 오름차순.

mysql>  SELECT   *   FROM   tablename  LIMIT  100, 10;

결과중  100번째부터   10개만  가져오기,

UPDATE

mysql> UPDATE    tablename  SET   col1=새값    WHERE 조건;

DELETE

mysql>  DELETE   FROM  tablename    where  조건;

오류나 경고  다시 보기

mysql>  SHOW  errors;
mysql>  SHOW  warnings;

MySQL  버전 알아보기

MariaDB [mysql]> show variables  like  '%version%'; 
+-------------------------+---------------------------------+ 
| Variable_name           | Value                           | 
+-------------------------+---------------------------------+ 
| innodb_version          | 5.6.35-80.0                     | 
| protocol_version        | 10                              | 
| slave_type_conversions  |                                 | 
| version                 | 10.1.22-MariaDB                 | 
| version_comment         | MariaDB Server                  | 
| version_compile_machine | x86_64                          | 
| version_compile_os      | Linux                           | 
| version_malloc_library  | system                          | 
| version_ssl_library     | OpenSSL 1.0.1e-fips 11 Feb 2013 | 
| wsrep_patch_version     | wsrep_25.16                     | 
+-------------------------+---------------------------------+ 
10 rows in set (0.00 sec)

테이블/컬럼   정보보기

-- 전체 테이블 정보를 주석까지 포함해 보여준다. 
SHOW TABLE STATUS;

SHOW TABLE STATUS like 'member%'; -- 테이블 이름 매칭 조건 

-- 테이블의 컬럼 정보를 주석까지 포함해 보여준다. 
SHOW FULL COLUMNS FROM [테이블이름];

MySQL 사용자 계정 암호변경 방법을 정리.
 (여기서는 root 암호를 변경하고 있는데 다른 계정도 동일하다.)










DB 사용자 비번 변경하기

mysql> update   user   set   password=password('asdf1234')    where   user='user001';



'배워서 남주자 > Data Base' 카테고리의 다른 글

[oracle] Listener 관련  (0) 2018.03.28
[Postgresql] 접속 제어  (0) 2018.03.23
[Postgresql] 백업 / 복구  (0) 2018.03.23
[postgresql] 초간단 명령어 설명.  (0) 2018.03.23
[PostgreSQL] 소유권 및 패스워드 변경  (0) 2018.03.23

+ Recent posts