차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

다음 판
이전 판
tech:my_sql [2014/03/18 09:01] – 바깥 편집 127.0.0.1tech:my_sql [2021/09/03 09:11] (현재) – [비밀번호 변경] 162.158.5.247
줄 1: 줄 1:
 +{{tag>tech my_sql}}
 +======My Sql======
 + 
 +
 +
 +=====기본명령어=====
 +데이터베이스 접속
 +$ mysql -u 사용자명 -p dbname
 +
 +설치 직후에는 root 사용자에 비밀번호가 없으므로 다음과 같이 접속하여 MySQL을 관리할 수 있다.
 +
 +$ mysql -u root mysql
 +
 +
 +====비밀번호 변경====
 +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 이용
 +  SET PASSWORD FOR root=password('새비밀번호');
 +
 +
 +일단 root 비밀번호가 설정된 상태에서는 mysql이나 mysqladmin 명령을 실행할 때 -p 옵션을 붙여주고 기존 비밀번호를 입력해야만 한다.
 +
 +  mysql> FLUSH PRIVILEGES;
 +뭔가 사용자 관련 내용을 바꿨으면 권한재설정 해줌.
 +====사용자 추가/삭제====
 +  mysql> 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';
 +
 +위를 또한 번 실행한다. '%'에서 홑따옴표를 주의한다.
 +추가 : '%'를 호스트네임으로 지정해도 모든 호스트에서 접속할 수 없었다. 각 호스트별로 다 지정해야 했다.
 +아래 댓글에서 rukikuki님이 알려주셨습니다.
 +  GRANT ALL PRIVILEGES ON testdb.* TO 'username'@'%' IDENTIFIED BY 'password' ;
 +처럼 'username' 이런식으로 홑따옴표를 username 에도 붙여야 하더군요.. 
 +
 +불필요한 사용자 삭제는
 +  mysql> DeLETE FROM user WHERE user='username';
 +  mysql> FLUSH PRIVILEGES;
 +
 +
 +====데이터베이스 생성/보기====
 +
 +데이터베이스를 생성하고,
 +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,
 +column_name2 VARCHAR(15),
 +column_name3 INT );
 +
 +현재 데이타베이스의 테이블 목록을 보고
 +mysql> SHOW TABLES;
 +
 +테이블 구조를 살펴본다.
 +mysql> EXPLAIN tablesname;
 +혹은
 +mysql> DESCRIBE tablename;
 +
 +이름을 잘못 지정했으면 이름을 변경할 수도 있다.
 +mysql> RENAME TABLE tablename1 TO tablename2[, tablename3 TO tablename4];
 +
 +필요 없으면 삭제한다.
 +mysql> DROP TABLE [IF EXISTS] tablename;
 +
 +<code mysql>
 + CREATE TABLE dw_user (
 + id varchar(20) DEFAULT 'guest' NOT NULL,
 + name varchar(20),
 + karma int,
 + exp int,
 + comment text,
 + email varchar(35),
 + ip varchar(17),
 + join_date datetime,
 + last_date datetime,
 + PRIMARY KEY (id)
 + );
 +</code>
 + 
 +
 +====현재 상태 보기====
 +
 +  mysql> status
 +<file>--------------
 +mysql  Ver 15.1 Distrib 10.3.31-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
 +
 +Connection id:          71
 +Current database:       mysql
 +Current user:           root@localhost
 +SSL:                    Not in use
 +Current pager:          stdout
 +Using outfile:          ''
 +Using delimiter:        ;
 +Server:                 MariaDB
 +Server version:         10.3.31-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04
 +Protocol version:       10
 +Connection:             Localhost via UNIX socket
 +Server characterset:    utf8mb4
 +Db     characterset:    utf8mb4
 +Client characterset:    utf8mb4
 +Conn.  characterset:    utf8mb4
 +UNIX socket:            /var/run/mysqld/mysqld.sock
 +Uptime:                 5 hours 39 min 3 sec
 +
 +Threads: 6  Questions: 545  Slow queries: 0  Opens: 175  Flush tables: 1  Open tables: 31  Queries per second avg: 0.026
 +--------------</file>
 +
 +
 +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 grade;
 +
 +컬럼의 이름을 바꿔서 출력.
 +
 +mysql> SELECT * FROM tablename ORDER BY col1 DESC;
 +mysql> SELECT col1, korean + math english AS '총점' FROM tablename ORDER BY '총점' ASC;
 +
 +DESC는 내림차순 ASC는 오름차순.
 +
 +mysql> SELECT * FROM grade WHERE korean < 90;
 +
 +조건줘서 SELECT.
 +
 +mysql> SELECT * FROM grade LIMIT 10;
 +
 +결과중 처음부터 10개만 가져오기
 +
 +mysql> SELECT * FROM grade LIMIT 100, 10;
 +
 +결과중 100번째부터 10개만 가져오기. 첫번째 레코드는 0번 부터 시작한다.
 +
 +UPDATE
 +mysql> UPDATE tablename SET col1=새값 WEHER 조건
 +
 +
 +DELETE
 +mysql> DELETE FROM tablename WEHRE 조건
 +
 +
 +mysql에서 쿼리 결과 세로로 보기
 +-E 옵션을 줘서 실행한다.
 +$ mysql -E -u root -p mysql
 +
 +
 +mysql에서 발생한 오류나 경고 다시 보기
 +mysql> show errors;
 +mysql> show warnings;
 +
 + 
 +  * 출처: [[http://kwon37xi.egloos.com/1634694|]]