Mysql sql

From 탱이의 잡동사니
Revision as of 12:11, 24 November 2015 by Pchero (talk | contribs)
Jump to navigation Jump to search

Overview

Mysql 사용법 정리.

Installation

Debian 8(Jessie) 에서 Mysql-server-5.6 이상 버전을 설치하기 위해서는 다음의 스크립트를 사용하면 된다.<ref>http://blog.programster.org/debian-8-install-mysql-5-6/</ref> <source lang=bash>

  1. !/bin/bash

cd /tmp

  1. Confirm the version at http://dev.mysql.com/downloads/repo/apt/

wget -O mysql-apt-config.deb https://dev.mysql.com/get/mysql-apt-config_0.3.7-1debian8_all.deb

sudo dpkg -i mysql-apt-config.deb

  1. At the popup-page, select "Apply"
  1. Install mysql-server package

sudo apt-get update sudo apt-get install mysql-server-5.6 -y </source>

Data types

datetime

Mysql-5.6 버전 이후부터 사용가능.

foreign key

Mysql-3.23.43 버전 이후부터는 외래키 지정이 가능하다.

Options

  • on delete cascade

부모의 해당키가 삭제되면 자동으로 삭제된다.

  • on delete set null

부모의 해당키가 삭제되면 자동으로 null 로 만든다.

  • on update cascade

부모의 해당키가 삭제되면 자동으로 갱신된다.

Example

agent id 를 외래키로 지정을 한 agent_group 테이블이다. agent_group 에 속한 agent 삭제시 같이 삭제되고, 업데이트 시, 같이 업데이트된다.

<source lang=sql> create table agent (

   id          int not null unique,
   name        varchar(255),
   primary key(id)

);

create table agent_group(

   group_id    int not null unique,
   agent_id    int not null,
   foreign key(agent_id)       references agent(id) on delete cascade on update cascade,
   primary key(group_id, agent_id)

); </source>

Update

이미 존재하는 레코드의 값을 변경한다.

UPDATE <table> SET <field> = "<value>" WHERE <field> > "<condition>";
조건 값보다 큰 필드의 레코드 값을 수정 

UPDATE <table> SET <field> = "<value>" WHERE <field> <> "<condition>";
조건 값을 제외한 모든 레코드 값을 수정 

UPDATE <table> SET <field1> = "<value>", <field2> = "<value>" WHERE <conditions>;
조건에 맞는 두개의 필드를 바꿈

UPDATE <table> SET <field> = REPLACE(<field>, 'alpha', 'beta')
필드의 값에 'alpha'라는 단어가 포함 되어 있다면 모두 'beta'로 수정

UPDATE <table> SET <field> = CONCAT(<field>,'alpha') WHERE <conditions>
조건에 맞는 필드명의 값에 'alpha' 단어를 덧붙임

View

ETC

Check table exist

특정 테이블이 있는지, 아닌지를 알고 싶을 때가 있다. 이런 경우, 다음의 쿼리를 입력하면, 테이블이 있으면 정상, 없으면 오류를 리턴한다.<ref>http://stackoverflow.com/questions/8829102/mysql-check-if-table-exists-without-using-select-from</ref> <source lang=sql> SELECT 1 FROM testtable LIMIT 1; </source>

Execute sql script

SQL 스크립트를 실행하고자 할 때는 다음과 같이 하면 된다.<ref>https://dev.mysql.com/doc/refman/5.7/en/mysql-batch-commands.html</ref>

-- shell
shell> mysql db_name
shell> mysql db_name < text_file
shell> mysql < text_file

-- mysql
mysql> source file_name
mysql> \. file_name

Create Primary Key with UUID()

uuid 를 primary key로 지정할 때, UUID() 함수를 사용할 수 있다. trigger 를 만들어 놓으면, 매번 테이블에 데이터를 입력할 때마다 자동으로 UUID() 함수가 실행되어 입력되도록 할 수도 있다.<ref>http://forums.mysql.com/read.php?10,175939,176708#msg-176708</ref> <source lang=sql> DROP TABLE IF EXISTS t; CREATE TABLE t(id CHAR(128));

DELIMITER // CREATE TRIGGER init_uuid BEFORE INSERT ON t

 FOR EACH ROW SET NEW.id = UUID();

// DELIMITER ;

INSERT INTO t VALUES( NULL ); SELECT * FROM t; +--------------------------------------+ | id | +--------------------------------------+ | 42114800-6f22-1000-9611-2eb9174826e3 | +--------------------------------------+ </source>

See also

References

<references />