set CVSROOT=:pserver:127.0.0.1:[/CVSROOT 디렉토리 명]
cvs login <-- 구지 안해도 된다.
컴퓨터 부팅시 암호 입력
cvs passwd -a -r Administrator 생성할아이디
비밀번호 입력
1. 데이터베이스 익스포트
* pg_dump 데이터베이스 명 > export할 파일명;
--> 예) pg_dump mydb > mydb20050222.sql;
--> pg_dump는 순수하게 sql문을 통해서 익스포트 한다.
2. 데이터베이스 임포트
* psql -f 임포트할_파일명 임포트할_데이터베이스명
--> psql -f mydb20050222.sql mydb
--> sql문 스크립트를 실행하는 방법으로 임포트
Jakarta POI
I. POI 란?
일반적으로 POI가 엑셀파일을 쓰는 컴퍼넌트로 알려져 있으나 POI는 프로젝트 이름입니다.
즉 POI는 Microsoft Format File을 액세스 할 수 있는 API를 제공합니다. (한마디로 자바에서 MS파일을 읽고 쓸수있도록 지원합니다.)
POI안에는 여러 컴퍼넌트들이 있습니다.
① POIFS
Microsoft의 OLE2 포맷 형식의 문서를 자바로 읽고 쓸수 있는 컴퍼넌트입니다
기본적으로 POI의 모든 컴퍼넌트들이 POIFS를 사용합니다.
② HSSF
Microsoft의 엑셀파일을 읽고 쓸수 있도록 지원하는 컴퍼넌트입니다.
③ HWPF
Microsoft의 워드파일을 읽고 쓸수 있도록 지원하는 컴퍼넌트입니다.
이 컴퍼넌트는 디자인 초기단계입니다.
④ HPSF
Microsoft의 OLE2 포맷 형식의 문서 속성을 어플리케이션에서 사용 할수 있도록 지원하는 컴퍼넌트입니다.
현재 읽기 기능만 제공합니다
워드파일을 핸들링 하는 HWPF는 초기단계라 사용을 못하지만 기대는 되는군요 ^^
ps. 영어사전을 찾아보니 poi는 하와이의 토란 요리를 뜻하더군요.
우리나라말로 하니 자카르타 토란 프로젝트 쯤 될라나? ㅎㅎ
II. 다운로드 및 설치
다운로드 받으러 갑시다~!
http://jakarta.apache.org/site/downloads/downloads_poi.cgi
현재 2.5.1버젼입니다.
다운받은 파일을 압축을 풀면 *.jar 파일들이 있을겁니다 이 파일들을 자신의 어플리케이션 /lib/에 복사합시다
POI API http://jakarta.apache.org/poi/apidocs/index.html
Quick Guide http://jakarta.apache.org/poi/hssf/quick-guide.html
III. Formula(수식) 지원에 관해..
엑셀을 읽고 쓸때 수식을 지원합니다.
org.apache.poi.hssf.usermodel.HSSFCell의 setCellFormula("formulaString") 메쏘드는 스프레드시트에 수식을 추가하는데 사용되며 getCellFormula() 메쏘드는 수식을 대표하는 문자열을 해석하는데 사용됩니다. 하지만 엑셀에서 사용하는 수식을 모두 사용 할 수는 없습니다.
① 지원되는 부분
-. 셀 참조, 시트참조, 지역참조
-. 상대적 혹은 절대적 참조
-. 수연산 및 논리연산
-. 시트 혹은 매크로 함수
-. 수식 결과값 반환
② 부분적 지원
문자열을 포함하는 수식을 해석할 수는 있지만 문자열값을 반환하는 수식은 아직 지원하지 않습니다.
③ 지원되지 않는 부분
-. 배열 수식
-. 1진법 수식
-. 3D 참조
-. 에러 값 (cells containing #REF's or #VALUE's)
IV. 기본객체
가장 기본이되는 객체가 다음 4가지 입니다
이름에서 무엇을 뜻하는지 대강 짐작 할 수 있겠죵?
① HSSFWorkbook - 엑셀 워크북을 말합니다.
② HSSFSheet - 엑셀 쉬트를 나타냅니다.
③ HSSFRow - 엑셀에서 특정 행입니다.
④ HSSFCell - 엑셀에서 특정 행에대한 특정 셀입니다
위 4가지 객체는 앞으로 계속 나올겁니다. 눈여겨 미리 봐 둡시다. @.@
V. 엑셀 읽기 예제
① POSFS을 이용하여 엑셀 워크북을 생성합니다.
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("excelfile.xls"));
HSSFWorkbook workbook = new HSSFWorkbook(fs);
② 생성된 워크북을 이용하여 시트 수만큼 돌면서 엑셀 시트 하나씩을 생성합니다.
int sheetNum = workbook.getNumberOfSheets();
for (int k = 0; k < sheetNum; k++) {
System.out.println("Sheet Number : "+k);
System.out.println(Sheet Name : " + workbook.getSheetName(k));
HSSFSheet sheet = workbook.getSheetAt(k);
}
③ 생성된 시트를 이용하여 그 행의 수만큼 돌면서 행을 하나씩 생성합니다.
int rows = sheet.getPhysicalNumberOfRows();
for (int r = 0; r < rows; r++) {
HSSFRow row = sheet.getRow(r);
System.out.println("Row : "+row.getRowNum());
}
④ 역시나 생성된 행을 이용하여 그 셀의 수만큼 돌면서 셀을 하나씩 생성합니다.
int cells = row.getPhysicalNumberOfCells();
for (short c = 0; c < cells; c++) { <--!! short 형입니다. 255개가 max!
HSSFCell cell = row.getCell(c);
int celltype = cell.getCellType();
...
}
셀을 생성하여 셀 타입에 따라 처리를 해주면 끝~
⑤ 주의사항
만약 엑셀에서 A열에 아무런 값이 없으면 그 행은 읽지 못합니다.
행을 읽지 못하니 셀또한 처리 할 수 없습니다
VI. 엑셀읽기 샘플소스
샘플 데이터
A열은 B열에 대한 셀 타입을 나타내며 C열은 D열에대한 셀 타입을 나타냅니다.
즉 B:1 의 123456의 셀 타입은 A:1 일반 이라는 것이며 마찬가지로
D:1의 2005-02-09의 셀타입은 C:1 사용자정의로 세팅하였다는 겁니다
이 엑셀의 데이터를 다음 소스로 읽어 보겠습니다.
<%@ page
<html> <% String excelfile = "C:\\Tomcat 5.0\\webapps\\ROOT\\example.xls"; try {
//워크북을 생성! HSSFWorkbook workbook = new HSSFWorkbook(fs); int sheetNum = workbook.getNumberOfSheets();
for (int k = 0; k < sheetNum; k++) {
//시트 이름과 시트번호를 추출 <br><br>
for (int r = 0; r < rows; r++) {
// 시트에 대한 행을 하나씩 추출 for (short c = 0; c < cells; c++) {
// 행에대한 셀을 하나씩 추출하여 셀 타입에 따라 처리 switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_FORMULA : %>
|
위 소스의 결과입니다.
Sheet Number 0 |
결과를 보니 사용자가 지정한 셀 타입에 관계없이
숫자관련 셀은 POI에서 모두 숫자 타입으로 인식해 버렸습니다.
날짜 역시 지정한 셀 타입에 관계없이 모두 숫자 타입으로 인식해 버리는군요!
그럼 어떻게 날짜를 제대로 표현할까요?
날짜 타입을 제대로 나타내기 위해서는 날짜 Cell에는 getDateCellValue()를 사용하면
정상적으로 처리 할 수 있습니다.
SimpleDateformat sdf = new SimpleDateformat("yyyy-MM-dd hh:mm");
String date = sdf.format(cell.getDateCellValue());
등을 이용하면 나타내고자 하는 알짜를 표현 하기 더 쉽겠지요
나머지 수식을 가져 올때도 마찬가지입니다. 이런 사항을 도표로 나타내보았습니다.
org.apache.poi.hssf.usermodel.HSSFCell 에는 모두 6가지의 Cell Type이 있는데,
cell.getCellType()을 하면 그 셀의 반환값을 알 수 있으며 그에 상응하는 static 필드타입은 다음과 같습니다.
셀타입 | 필드타입 | 함수 |
함수반환값 |
0 | CELL_TYPE_NUMERIC | getNumericCellValue() -> 숫자 타입일때 getDateCellValue() -> 날짜 타입일때 |
double
Date
|
1 | CELL_TYPE_STRING | getStringCellValue() |
String |
2 | CELL_TYPE_FORMULA | getCellFormula() -> 수식자체를 가져올때 getNumericCellValue() -> 수식 반환값이 숫자일때 getStringCellValue() -> 수식 반환값이 문자일때 |
String
double
String |
3 | CELL_TYPE_BLANK |
|
|
4 | CELL_TYPE_BOOLEAN | getBooleanCellValue() |
boolean |
5 | CELL_TYPE_ERROR | getErrorCellvalue() |
byte |
이번시간에는 POI 프로젝트를 이용하여 엑셀 파일을 읽어보았습니다. 다음 시간에는 엑셀파일에 쓰는 핸드링을 해 보도록 하지요~
출처 : [기타] 블로그 집필 - 민군네집
자바를 사용하다보면 사이트에서 이런저런 요청사항들이 많이 들어오게 마련입니다..
특히나 엑셀에 대한 요청도 많이 들어오게되죠..
프레임웍중에서 이런 기능을 제공하는것들이 있는지에대해선 잘 모르겠지만...(이전 MiPlatform에서는 제공해주던데..)
아래 방법은 apache의 POI를 사용하여, java로 구현한 프로그램입니다.
API를 보다보면 수많은 인터페이스와 클래스.. 그에대한 메서드들이 있는데..
JXL은 사용하기 쉬운반면, 상대적으로 적은API를 제공하고, POI는 어려운반면, 무궁무진한 기능을 구현할수있는 API를 제공합니다.
또 보다보면 그렇게 어렵지도 않아요..
라이브러리는 마지막으로 9월에 릴리즈된버전입니다.
POI에 대한 자세한 설명은 poi.apache.org에 가시면 많은 자료들이 있습니다.
이 아래 예제는 만들어진 excel파일이 있고, 그 excel파일 안에 있는 값들을 읽는것입니다.
주석까지 다 달아놨으니 보기 편할겁니다..
아래는 소스입니다.
============================================================================================
import java.io.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.hssf.record.*;
import org.apache.poi.hssf.model.*;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.*;
public class aas{
public aas(){
String excelFile = "d:\\test.xls"; //excel파일의 경로와 파일명
try{
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(excelFile)); //엑셀파일의 경로와 이름을 통해 POIFSFileSystem을 생성
//워크북을 생성!
HSSFWorkbook workbook = new HSSFWorkbook(fs); //파일에 대한 워크북을 생성
int sheetNum = workbook.getNumberOfSheets(); //그파일의 워크시트의 수를 가져온다
for(int k = 0;k < sheetNum; k++){ //시트를 돌면서 모든 데이터를 얻는다.
//시트이름과 시트번호를 추출
System.out.println(k); //시트의 index를 콘솔에 출력
System.out.println(workbook.getSheetName(k)); //시트의 이름을 콘솔에 출력
HSSFSheet sheet = workbook.getSheetAt(k); //한개의 시트에대한 정보를 HSSFSheet형의 변수에 담는다.
int rows = sheet.getPhysicalNumberOfRows(); //시트별 몇개의 row가 있는지 알아낸다.
for(int r= 0; r<rows;r++){
//시트에 대한 행을 하나씩 추출
HSSFRow row = sheet.getRow(r); //한개의 시트에 몇개의 로우가 있는지 체크
if(row != null){ //로우가 비어있지않다면
int cells = row.getPhysicalNumberOfCells(); //한개의 로우마다 몇개의 cell이 있는지 체크
System.out.print(row.getRowNum()); //row의 index를 콘솔에 출력
System.out.println(cells); //해당 row에 대한 cell의 갯수를 콘솔에 출력
// for(short c = 0; c < cells; c++){ //셀의 마지막까지 잡는다. 이 부분은 오류가있어 사용하지않는다.
for(short c = 0; c < 5; c++){ //5개의 칸까지 잡는다.
//행에대한 셀을 하나씩 추출하여 셀 타입에 따라 처리
HSSFCell cell = row.getCell(c); //cell의 index
// System.out.println(row.getPhysicalNumberOfCells());
if(cell != null){
String value = null;
switch(cell.getCellType()){ //셀의 type에 대해 체크하고 type을 설정해준다.
case HSSFCell.CELL_TYPE_FORMULA:
value = "FORMULA value="+cell.getCellFormula();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
value = "NUMERIC value="+cell.getNumericCellValue();
break;
case HSSFCell.CELL_TYPE_STRING:
value = "STRING value="+cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_BLANK:
value = null;
break;
case HSSFCell.CELL_TYPE_BOOLEAN:
value = "BOOLEAN value="+cell.getBooleanCellValue();
break;
case HSSFCell.CELL_TYPE_ERROR:
value = "ERROR value"+cell.getErrorCellValue();
break;
default:
}
System.out.println("CELL col="+cell.getCellNum() + " VALUE="+value); //셀에대한 값을 콘솔에 출력해준다.
}
}
}
}
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args)throws Exception{
aas aas = new aas();
}//main
}//class
============================================================================================
아래는 대상 excel파일의 구조입니다.
============================================================================================
아래는 프로그램의 결과물입니다.
0
Sheet1
04
CELL col=0 VALUE=NUMERIC value=1.0
CELL col=1 VALUE=NUMERIC value=1.0
CELL col=2 VALUE=NUMERIC value=1.0
CELL col=3 VALUE=NUMERIC value=1.0
14
CELL col=0 VALUE=NUMERIC value=2.0
CELL col=1 VALUE=NUMERIC value=2.0
CELL col=2 VALUE=NUMERIC value=2.0
CELL col=3 VALUE=NUMERIC value=2.0
24
CELL col=0 VALUE=NUMERIC value=3.0
CELL col=1 VALUE=NUMERIC value=3.0
CELL col=2 VALUE=NUMERIC value=3.0
CELL col=3 VALUE=NUMERIC value=3.0
34
CELL col=0 VALUE=NUMERIC value=4.0
CELL col=1 VALUE=NUMERIC value=4.0
CELL col=2 VALUE=NUMERIC value=4.0
CELL col=3 VALUE=NUMERIC value=4.0
44
CELL col=0 VALUE=NUMERIC value=5.0
CELL col=1 VALUE=NUMERIC value=5.0
CELL col=2 VALUE=NUMERIC value=5.0
CELL col=3 VALUE=NUMERIC value=5.0
54
CELL col=0 VALUE=STRING value=한글1
CELL col=1 VALUE=STRING value=한글2
CELL col=2 VALUE=STRING value=한글3
CELL col=3 VALUE=STRING value=한글4
66
CELL col=0 VALUE=STRING value=null
CELL col=2 VALUE=STRING value=null
CELL col=3 VALUE=STRING value=d
CELL col=4 VALUE=STRING value=
1
Sheet2
2
Sheet3
출처 : [직접 서술] 직접 서술
Java Servlet & JSP API 개발/코딩 |
|
파일 다운로드에서...다운로드 받지 않고 바로 열려면...? |
안녕하세요.
받을 파일은 전부 pdf 로 되어있습니다. 다운로드 로직을 이용해서 파일 전송이 완료되면 바로 아크로밧리더로 열리게 하고 싶습니다.
다운로드는 해당 파일의 고유 아이디를 가지고 서블릿을 호출해서 서블릿내의 로직이 돌아서 클라이언트로 해당 파일을 쏴 줍니다.
로직은 많이들 쓰고 있는 아래 로직인데요, 이게...바로 열리지 않고 다운로드 받는 창이 뜨던지 아니면 다운로드를 다 받은 후에 열리지 않고 블랭크 페이지로 표시됩니다.
if (strClient.indexOf("MSIE 5.5") != -1)
위 쪽에 걸리면 다운로드 창이 뜨고, 아래쪽에 걸리면 자동으로 다운로드 받은 담에 블랭크페이지가 뜹니다...
조언 좀 부탁드립니다..
감사합니다.
|
Package | flash.system |
Class | public final class IME |
Inheritance | IME EventDispatcher Object |
IME 를 사용하면, 중국어, 일본어, 한국어라고 하는 멀티 바이트의 언어로 ASCII 이외의 캐릭터를 입력할 수 있게 됩니다. IME 의 사용 방법의 상세한 것에 대하여는, 어플리케이션의 개발 대상인 OS 의 메뉴얼을 참조해 주세요. 추가 정보에 대해서는, 다음의 Web 사이트를 참조해 주세요.
IME 가 유저의 컴퓨터로 액티브하지 않는 경우, IME 의 Methods 또는 property의 호출은,Capabilities.hasIME
를 제외해, 실패합니다. IME 를 수동으로 액티브하게 하면, 그 이후의 IME 의 Methods 또는 property의 ActionScript 호출은, 의도했던 대로 동작합니다. 예를 들어, 일본어 IME 를 사용하는 경우, IME 의 Methods 또는 property를 호출하기 전에 액티브하게 할 필요가 있습니다.
다음의 겉(표)에, 이 클래스의 플랫폼별의 대응 상황을 나타냅니다.
기능 | Windows | Mac OSX | Mac Classic |
---|---|---|---|
IME 가 설치(Install) 되고 있는지 어떤지의 확인 flash.system.Capabilities.hasIME |
가 | 가 | 가 |
IME 의 온 / 오프 flash.system.IME.enabled |
가 | 가 | 가 |
IME 의 온 / 오프의 확인 flash.system.IME.enabled |
가 | 가 | 가 |
IME 변환 모드의 취득 또는 설정 flash.system.IME.conversionMode |
가 | 대응 ** | 불가 |
변환 대상 string의 IME 에의 송신 flash.system.IME.setCompositionString() |
대응 * | 불가 | 불가 |
IME 로부터의 변환전의 string의 취득 flash.system.System.ime.addEventListener |
대응 * | 불가 | 불가 |
IME 에의 변환 요구의 송신 flash.system.IME.doConversion() |
대응 * | 불가 | 불가 |
* 일부의 Windows IME 에서는, 상기중 일부 지원(support)하고 있지 않는 조작이 있습니다. 모든 조작을 지원(support)하고 있는 IME 는, 일본어 IME 뿐입니다.
** Macintosh 의 경우는, 일본어 IME 에서만 이러한 Methods가 지원(support)되고 있어 써드파티제의 IME 에서는 지원(support)되고 있지 않습니다.
See also
property | 정의 | ||
---|---|---|---|
conversionMode : String
[static] 현재의 IME 의 변환 모드.
|
IME | ||
enabled : Boolean
[static] 시스템 IME 가 유효하게 되어 있든가 (
true ) 무효가 되어 있는지 (false )를 나타냅니다. |
IME |
Methods | 정의 | ||
---|---|---|---|
doConversion ():void
[static] 현재의 입력 string의 제 1 후보를 선택하도록(듯이) IME 에 지시합니다.
|
IME | ||
setCompositionString (composition:String ):void
[static] IME 에의 입력 string를 설정합니다.
|
IME |
이벤트 | 일람 | 정의 | ||
---|---|---|---|---|
imeComposition | 유저가 IME 입력을 완료해, 독해 string가 사용 가능하게 되었을 때에 dispatch합니다. | IME |
conversionMode | property |
conversionMode:String
[read-write]현재의 IME 의 변환 모드. 변환 모드를 나타내는, 다음의 IME 모드 string 정수를 지정할 수 있습니다.
ALPHANUMERIC_FULL
ALPHANUMERIC_HALF
CHINESE
JAPANESE_HIRAGANA
JAPANESE_KATAKANA_FULL
JAPANESE_KATAKANA_HALF
KOREAN
UNKNOWN
읽기 전용(read-only)의 값이며, 설정할 수 없습니다. public static function get conversionMode():String
public function set conversionMode(value:String ):void
Error — 설정 시행이 성공하지 않았습니다. |
See also
enabled | property |
enabled:Boolean
[read-write]시스템 IME 가 유효하게 되어 있든가 (true
) 무효가 되어 있는지 (false
)를 나타냅니다. IME 가 유효하다라고 나무는 멀티 바이트 입력이 되어, IME 가 무효일 때는 영수입력이 됩니다.
public static function get enabled():Boolean
public function set enabled(value:Boolean ):void
Error — 설정 시행이 성공하지 않았습니다. |
See also
doConversion | () | Methods |
public static function doConversion():void
현재의 입력 string의 제 1 후보를 선택하도록(듯이) IME 에 지시합니다.
Error — 호출이 성공하지 않았습니다. |
setCompositionString | () | Methods |
public static function setCompositionString(composition:String ):void
IME 에의 입력 string를 설정합니다. 이 string가 설정되면, 유저는 IME 후보를 선택하고 나서, 현재 포커스가 있는 텍스트 필드의 결과를 확정할 수 있습니다.
어느 텍스트 필드에도 포커스가 없는 경우, 이 Methods는 실패해, 에러를 슬로우 합니다.
Parameterscomposition:String — IME 에 보내는 string. |
Error — 호출이 성공하지 않았습니다. |
imeComposition | event |
flash.events.IMEEvent
flash.events.IMEEvent.IME_COMPOSITION
유저가 IME 입력을 완료해, 독해 string가 사용 가능하게 되었을 때에 dispatch합니다. IME 는, 통상, 일본어, 중국어, 한국어 등, 표음문자는 아니고 표의 문자를 가지는 언어의 텍스트를 입력하기 위해서 사용됩니다.
imeComposition
event object의 type
property치를 정의합니다.
이 이벤트에는, 다음의 property가 있습니다.
Property | Value |
---|---|
bubbles |
false |
cancelable |
false 는, 캔슬하는 디폴트의 동작이 없는 것을 나타냅니다. |
currentTarget |
event listener로 Event object를 액티브하게 처리하고 있는 object입니다. |
target |
IME object입니다. |
See also
MySQL 사용법 (요약) 2000.1.26
시작하기 형식 : mysql -h hostname -u user_name -p DBname hostname 의 default : localhost user_name의 default : login name 예1) mysql -u guest # user가 guest이고 password가 없을 경우 (localhost) 예1) mysql -h sr.kwangwoon.ac.kr -u guest # user가 guest이고 password가 없을 경우 예2) mysql -u guest -p # password를 입력해야 함 Enter password:******** 예3) mysql -u guest pythonDB 참고) 컴퓨터 sr에서 mysql을 이용하여 연습을 하려면 여기서 사용하는 모든 데이터베이스 명 대신에 test를 사용하라. 사용자는 누구라도 되고, 테이블을 만들고 검색하고 삭제할 수 있다. 암호는 주어져 있지 않다. 실행예: mysql -u guest test 끝내기 mysql> QUIT mysql> Ctrl-D *mysql> 은 프롬프트임
변경: mysql -u root -p Enter password:***** mysql> use mysql mysql> update user set Password=PASSWORD('password') where user='userid'; mysql> flush privileges;
버전과 날짜 보기: * 명령에 대소문자 구분은 없다 (case insensitive). mysql> 은 프롬프트임. mysql> SELECT VERSION(), CURRENT_DATE; +--------------+--------------+ | version() | CURRENT_DATE | +--------------+--------------+ | 3.22.20a-log | 1999-03-19 | +--------------+--------------+ 1 row in set (0.01 sec) mysql> 계산기로 사용하기: mysql> SELECT SIN(PI()/4), (4+1)*5; +-------------+---------+ | SIN(PI()/4) | (4+1)*5 | +-------------+---------+ | 0.707107 | 25 | +-------------+---------+ 여러 명령 한줄에 입력하기: mysql> SELECT VERSION(); SELECT NOW(); +--------------+ | version() | +--------------+ | 3.22.20a-log | +--------------+ +---------------------+ | NOW() | +---------------------+ | 1999-03-19 00:15:33 | +---------------------+ 여려줄에 한 명령 입력하기: mysql> SELECT -> USER() -> , -> CURRENT_DATE; +--------------------+--------------+ | USER() | CURRENT_DATE | +--------------------+--------------+ | joesmith@localhost | 1999-03-18 | +--------------------+--------------+
데이터베이스 보기 : SHOW DATABASES; +----------+ | Database | +----------+ | mysql | | python | | test | +----------+ 사용할 데이터베이스 선택하기 : USE test 관리자로 하여금 지정된 사용자만 DB를 접근하도록 하기 : GRANT ALL ON dbname.* TO your_mysql_name; 새로운 데이터베이스 만들기: CREATE DATABASE menagerie; 관리자가 해주던지 아니면 본인이 해야한다(허가권이 있다면). 사용할 데이터베이스 선택 : USE menagerie mysql을 호출할 때 db선택하기 : mysql -h host -u user -p menagerie 데이터베이스 없애기: (한번에 모든 것을 날려 버리므로 조심해서 사용할 것) DROP DATABASE database_name
테이블 보기 : SHOW TABLES; Empty set (0.00 sec) 테이블 만들기 : CREATE TABLE pet ( -> name VARCHAR(20), -> owner VARCHAR(20), -> species VARCHAR(20), -> sex CHAR(1), -> birth DATE, -> death DATE); 테이블 다시 보기: mysql> SHOW TABLES; +---------------------+ | Tables in menagerie | +---------------------+ | pet | +---------------------+ 테이블 확인하기: mysql> DESCRIBE pet; +---------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+-------------+------+-----+---------+-------+ | name | varchar(20) | YES | | NULL | | | owner | varchar(20) | YES | | NULL | | | species | varchar(20) | YES | | NULL | | | sex | char(1) | YES | | NULL | | | birth | date | YES | | NULL | | | death | date | YES | | NULL | | +---------+-------------+------+-----+---------+-------+ 테이블 없애기: mysql> DROP table table_name;
테이블에 입력할 정보가 다음과 같다고 하자:
텍스트 파일에 정보가 있다면 쉽게 일괄적으로 테이블에 입력할 수 있다. 각 레코드는 한 라인에 입력되며, 각 필드는 탭으로 구분되어야 하고, NULL인 필드는 \N이 입력되어야 한다. 예:
이와 같은 정보가 'pet.txt' 파일에 저장되어 있다고 한다면, 다음의 명령으로 일괄적으로 읽어들일 수 있다. mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet; 한번에 한 레코드씩 입력하려면 다음과 같은 코맨드라인 명령을 쓴다. mysql> INSERT INTO pet -> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL); 이 경우 값이 없으면 NULL을 사용한다. (\N는 아님)
SELECT 문을 이용한다: SELECT what_to_select FROM which_table WHERE conditions_to_satisfy 전체 데이터 선택하기 mysql> SELECT * FROM pet; +----------+--------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +----------+--------+---------+------+------------+------------+ | Fluffy | Harold | cat | f | 1993-02-04 | NULL | | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | | Fang | Benny | dog | m | 1990-08-27 | NULL | | Bowser | Diane | dog | m | 1998-08-31 | 1995-07-29 | | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | | Slim | Benny | snake | m | 1996-04-29 | NULL | | Puffball | Diane | hamster | f | 1999-03-30 | NULL | +----------+--------+---------+------+------------+------------+ 정보 갱신하기: Bowser의 생일을 1998년에서 1989로 수정하려면, mysql> UPDATE pet SET birth = "1989-08-31" WHERE name = "Bowser"; 행 선택하여 출력하기: mysql> SELECT * FROM pet WHERE name = "Bowser"; +--------+-------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +--------+-------+---------+------+------------+------------+ | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | +--------+-------+---------+------+------------+------------+ mysql> SELECT * FROM pet WHERE birth >= "1998-1-1"; +----------+-------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+-------+ | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | | Puffball | Diane | hamster | f | 1999-03-30 | NULL | +----------+-------+---------+------+------------+-------+ mysql> SELECT * FROM pet WHERE species = "dog" AND sex = "f"; +-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+ mysql> SELECT * FROM pet WHERE species = "snake" OR species = "bird"; +----------+-------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+-------+ | Chirpy | Gwen | bird | f | 1998-09-11 | NULL | | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | | Slim | Benny | snake | m | 1996-04-29 | NULL | +----------+-------+---------+------+------------+-------+ mysql> SELECT * FROM pet WHERE (species = "cat" AND sex = "m") -> OR (species = "dog" AND sex = "f"); +-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+ 열 선택하여 출력하기 mysql> SELECT name, birth FROM pet; +----------+------------+ | name | birth | +----------+------------+ | Fluffy | 1993-02-04 | | Claws | 1994-03-17 | | Buffy | 1989-05-13 | | Fang | 1990-08-27 | | Bowser | 1989-08-31 | | Chirpy | 1998-09-11 | | Whistler | 1997-12-09 | | Slim | 1996-04-29 | | Puffball | 1999-03-30 | +----------+------------+ mysql> SELECT owner FROM pet; +--------+ | owner | +--------+ | Harold | | Gwen | | Harold | | Benny | | Diane | | Gwen | | Gwen | | Benny | | Diane | +--------+ mysql> SELECT DISTINCT owner FROM pet; +--------+ | owner | +--------+ | Benny | | Diane | | Gwen | | Harold | +--------+ mysql> SELECT name, species, birth FROM pet -> WHERE species = "dog" OR species = "cat"; +--------+---------+------------+ | name | species | birth | +--------+---------+------------+ | Fluffy | cat | 1993-02-04 | | Claws | cat | 1994-03-17 | | Buffy | dog | 1989-05-13 | | Fang | dog | 1990-08-27 | | Bowser | dog | 1989-08-31 | +--------+---------+------------+ 정렬하기 mysql> SELECT name, birth FROM pet ORDER BY birth; +----------+------------+ | name | birth | +----------+------------+ | Buffy | 1989-05-13 | | Bowser | 1989-08-31 | | Fang | 1990-08-27 | | Fluffy | 1993-02-04 | | Claws | 1994-03-17 | | Slim | 1996-04-29 | | Whistler | 1997-12-09 | | Chirpy | 1998-09-11 | | Puffball | 1999-03-30 | +----------+------------+ mysql> SELECT name, birth FROM pet ORDER BY birth DESC; +----------+------------+ | name | birth | +----------+------------+ | Puffball | 1999-03-30 | | Chirpy | 1998-09-11 | | Whistler | 1997-12-09 | | Slim | 1996-04-29 | | Claws | 1994-03-17 | | Fluffy | 1993-02-04 | | Fang | 1990-08-27 | | Bowser | 1989-08-31 | | Buffy | 1989-05-13 | +----------+------------+ mysql> SELECT name, species, birth FROM pet ORDER BY species, birth DESC; +----------+---------+------------+ | name | species | birth | +----------+---------+------------+ | Chirpy | bird | 1998-09-11 | | Whistler | bird | 1997-12-09 | | Claws | cat | 1994-03-17 | | Fluffy | cat | 1993-02-04 | | Fang | dog | 1990-08-27 | | Bowser | dog | 1989-08-31 | | Buffy | dog | 1989-05-13 | | Puffball | hamster | 1999-03-30 | | Slim | snake | 1996-04-29 | +----------+---------+------------+ 날짜계산하기 mysql> SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365 FROM pet; +----------+-------------------------------------+ | name | (TO_DAYS(NOW())-TO_DAYS(birth))/365 | +----------+-------------------------------------+ | Fluffy | 6.15 | | Claws | 5.04 | | Buffy | 9.88 | | Fang | 8.59 | | Bowser | 9.58 | | Chirpy | 0.55 | | Whistler | 1.30 | | Slim | 2.92 | | Puffball | 0.00 | +----------+-------------------------------------+ mysql> SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365 AS age -> FROM pet ORDER BY name; +----------+------+ | name | age | +----------+------+ | Bowser | 9.58 | | Buffy | 9.88 | | Chirpy | 0.55 | | Claws | 5.04 | | Fang | 8.59 | | Fluffy | 6.15 | | Puffball | 0.00 | | Slim | 2.92 | | Whistler | 1.30 | +----------+------+ mysql> SELECT name, (TO_DAYS(NOW())-TO_DAYS(birth))/365 AS age -> FROM pet ORDER BY age; +----------+------+ | name | age | +----------+------+ | Puffball | 0.00 | | Chirpy | 0.55 | | Whistler | 1.30 | | Slim | 2.92 | | Claws | 5.04 | | Fluffy | 6.15 | | Fang | 8.59 | | Bowser | 9.58 | | Buffy | 9.88 | +----------+------+ mysql> SELECT name, birth, death, (TO_DAYS(death)-TO_DAYS(birth))/365 AS age -> FROM pet WHERE death IS NOT NULL ORDER BY age; +--------+------------+------------+------+ | name | birth | death | age | +--------+------------+------------+------+ | Bowser | 1989-08-31 | 1995-07-29 | 5.91 | +--------+------------+------------+------+ DATE에서 해, 달, 일의 정보를 꺼내려면, YEAR(), MONTH(), DAYOFMONTH()를 이용한다. mysql> SELECT name, birth, MONTH(birth) FROM pet; +----------+------------+--------------+ | name | birth | MONTH(birth) | +----------+------------+--------------+ | Fluffy | 1993-02-04 | 2 | | Claws | 1994-03-17 | 3 | | Buffy | 1989-05-13 | 5 | | Fang | 1990-08-27 | 8 | | Bowser | 1989-08-31 | 8 | | Chirpy | 1998-09-11 | 9 | | Whistler | 1997-12-09 | 12 | | Slim | 1996-04-29 | 4 | | Puffball | 1999-03-30 | 3 | +----------+------------+--------------+ 5월에 태어난 동물을 출력하려면: mysql> SELECT name, birth FROM pet WHERE MONTH(birth) = 5; +-------+------------+ | name | birth | +-------+------------+ | Buffy | 1989-05-13 | +-------+------------+ 패턴 매칭 '%'는 (0을 포함한) 임의의 수의 문자와 매칭한다. 'b'로 시작하는 이름의 동물을 찾으려면, mysql> SELECT * FROM pet WHERE name LIKE "b%"; +--------+--------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +--------+--------+---------+------+------------+------------+ | Buffy | Harold | dog | f | 1989-05-13 | NULL | | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | +--------+--------+---------+------+------------+------------+ 'fy'로 끝나는 이름의 동물은, mysql> SELECT * FROM pet WHERE name LIKE "%fy"; +--------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +--------+--------+---------+------+------------+-------+ | Fluffy | Harold | cat | f | 1993-02-04 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +--------+--------+---------+------+------------+-------+ 'w'가 있는 이름의 동물은, mysql> SELECT * FROM pet WHERE name LIKE "%w%"; +----------+-------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+------------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | +----------+-------+---------+------+------------+------------+ 꼭 다섯자로 구성된 이름의 동물은, mysql> SELECT * FROM pet WHERE name LIKE "_____"; +-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+ 확장된 정규식
'b'혹은 'B'로 시작하는 이름: mysql> SELECT * FROM pet WHERE name REGEXP "^[bB]"; +--------+--------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +--------+--------+---------+------+------------+------------+ | Buffy | Harold | dog | f | 1989-05-13 | NULL | | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | +--------+--------+---------+------+------------+------------+ 마지막에 `fy' 로 끝나는 이름: mysql> SELECT * FROM pet WHERE name REGEXP "fy$"; +--------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +--------+--------+---------+------+------------+-------+ | Fluffy | Harold | cat | f | 1993-02-04 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +--------+--------+---------+------+------------+-------+ `w'를 포함하는 이름: mysql> SELECT * FROM pet WHERE name REGEXP "[wW]"; +----------+-------+---------+------+------------+------------+ | name | owner | species | sex | birth | death | +----------+-------+---------+------+------------+------------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 | | Whistler | Gwen | bird | NULL | 1997-12-09 | NULL | +----------+-------+---------+------+------------+------------+ 다섯 문자로 이루어진 이름: mysql> SELECT * FROM pet WHERE name REGEXP "^.....$"; +-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+ `{n}' 연산자 (repeat-n-times)를 사용하여 아래와 같이 쓸 수도 있음: mysql> SELECT * FROM pet WHERE name REGEXP "^.{5}$"; +-------+--------+---------+------+------------+-------+ | name | owner | species | sex | birth | death | +-------+--------+---------+------+------------+-------+ | Claws | Gwen | cat | m | 1994-03-17 | NULL | | Buffy | Harold | dog | f | 1989-05-13 | NULL | +-------+--------+---------+------+------------+-------+ 행의 수 세기 전체 엔트리 수 세기: mysql> SELECT COUNT(*) FROM pet; +----------+ | COUNT(*) | +----------+ | 9 | +----------+ 주인이 가지고 있는 동물의 수 세기: mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner; +--------+----------+ | owner | COUNT(*) | +--------+----------+ | Benny | 2 | | Diane | 2 | | Gwen | 3 | | Harold | 2 | +--------+----------+ 종별 수: mysql> SELECT species, COUNT(*) FROM pet GROUP BY species; +---------+----------+ | species | COUNT(*) | +---------+----------+ | bird | 2 | | cat | 2 | | dog | 3 | | hamster | 1 | | snake | 1 | +---------+----------+ 성별 수: mysql> SELECT sex, COUNT(*) FROM pet GROUP BY sex; +------+----------+ | sex | COUNT(*) | +------+----------+ | NULL | 1 | | f | 4 | | m | 4 | +------+----------+ 종 및 성별 수: mysql> SELECT species, sex, COUNT(*) FROM pet GROUP BY species, sex; +---------+------+----------+ | species | sex | COUNT(*) | +---------+------+----------+ | bird | NULL | 1 | | bird | f | 1 | | cat | f | 1 | | cat | m | 1 | | dog | f | 1 | | dog | m | 2 | | hamster | f | 1 | | snake | m | 1 | +---------+------+----------+ 개와 고양이에 대해서만 적용: mysql> SELECT species, sex, COUNT(*) FROM pet -> WHERE species = "dog" OR species = "cat" -> GROUP BY species, sex; +---------+------+----------+ | species | sex | COUNT(*) | +---------+------+----------+ | cat | f | 1 | | cat | m | 1 | | dog | f | 1 | | dog | m | 2 | +---------+------+----------+ 알려진 성별에 대해서만 성별 동물의 수: mysql> SELECT species, sex, COUNT(*) FROM pet -> WHERE sex IS NOT NULL -> GROUP BY species, sex; +---------+------+----------+ | species | sex | COUNT(*) | +---------+------+----------+ | bird | f | 1 | | cat | f | 1 | | cat | m | 1 | | dog | f | 1 | | dog | m | 2 | | hamster | f | 1 | | snake | m | 1 | +---------+------+----------+
테이블 하나 더 만들기: mysql> CREATE TABLE event ( -> name VARCHAR(20), -> date DATE, -> type VARCHAR(15), -> remark VARCHAR(255)); 파일 'event.txt'
데이터 읽어들이기: mysql> LOAD DATA LOCAL INFILE "event.txt" INTO TABLE event; 출산 때의 동물의 나이를 계산 (JOIN): mysql> SELECT pet.name, (TO_DAYS(date) - TO_DAYS(birth))/365 AS age, remark -> FROM pet, event -> WHERE pet.name = event.name AND type = "litter"; +--------+------+-----------------------------+ | name | age | remark | +--------+------+-----------------------------+ | Fluffy | 2.27 | 4 kittens, 3 female, 1 male | | Buffy | 4.12 | 5 puppies, 2 female, 3 male | | Buffy | 5.10 | 3 puppies, 3 female | +--------+------+-----------------------------+ 짝찾아보기 (JOINing itself): mysql> SELECT p1.name, p1.sex, p2.name, p2.sex, p1.species -> FROM pet AS p1, pet AS p2 -> WHERE p1.species = p2.species AND p1.sex = "f" AND p2.sex = "m"; +--------+------+--------+------+---------+ | name | sex | name | sex | species | +--------+------+--------+------+---------+ | Fluffy | f | Claws | m | cat | | Buffy | f | Fang | m | dog | | Buffy | f | Bowser | m | dog | +--------+------+--------+------+---------+
CREATE TABLE shop ( article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL, dealer CHAR(20) DEFAULT '' NOT NULL, price DOUBLE(16,2) DEFAULT '0.00' NOT NULL, PRIMARY KEY(article, dealer)); INSERT INTO shop VALUES (1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),(3,'C',1.69), (3,'D',1.25),(4,'D',19.95); 전체 데이터 예는: SELECT * FROM shop +---------+--------+-------+ | article | dealer | price | +---------+--------+-------+ | 0001 | A | 3.45 | | 0001 | B | 3.99 | | 0002 | A | 10.99 | | 0003 | B | 1.45 | | 0003 | C | 1.69 | | 0003 | D | 1.25 | | 0004 | D | 19.95 | +---------+--------+-------+ 최대 아이템 수는? SELECT MAX(article) AS article FROM shop +---------+ | article | +---------+ | 4 | +---------+ 가장 비싼 항목의 번호, 판매자, 가격? SELECT article, dealer, price FROM shop WHERE price=(SELECT MAX(price) FROM shop) 각 항목의 최고 가격은? SELECT article, MAX(price) AS price FROM shop GROUP BY article +---------+-------+ | article | price | +---------+-------+ | 0001 | 3.99 | | 0002 | 10.99 | | 0003 | 1.69 | | 0004 | 19.95 | +---------+-------+ 각 항목에 대하여 가장 비싼 가격의 딜러를 찾아라! SELECT article, dealer, price FROM shop s1 WHERE price=(SELECT MAX(s2.price) FROM shop s2 WHERE s1.article = s2.article) 항목 삭제하기 (DELETE) 문법 : DELETE FROM tbl_name [WHERE where_condition] [LIMIT rows]
CREATE TABLE persons ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, name CHAR(60) NOT NULL, PRIMARY KEY (id) ); CREATE TABLE shirts ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, style ENUM('t-shirt', 'polo', 'dress') NOT NULL, color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL, owner SMALLINT UNSIGNED NOT NULL REFERENCES persons, PRIMARY KEY (id) ); INSERT INTO persons VALUES (NULL, 'Antonio Paz'); INSERT INTO shirts VALUES (NULL, 'polo', 'blue', LAST_INSERT_ID()), (NULL, 'dress', 'white', LAST_INSERT_ID()), (NULL, 't-shirt', 'blue', LAST_INSERT_ID()); INSERT INTO persons VALUES (NULL, 'Lilliana Angelovska'); INSERT INTO shirts VALUES (NULL, 'dress', 'orange', LAST_INSERT_ID()), (NULL, 'polo', 'red', LAST_INSERT_ID()), (NULL, 'dress', 'blue', LAST_INSERT_ID()), (NULL, 't-shirt', 'white', LAST_INSERT_ID()); SELECT * FROM persons; +----+---------------------+ | id | name | +----+---------------------+ | 1 | Antonio Paz | | 2 | Lilliana Angelovska | +----+---------------------+ SELECT * FROM shirts; +----+---------+--------+-------+ | id | style | color | owner | +----+---------+--------+-------+ | 1 | polo | blue | 1 | | 2 | dress | white | 1 | | 3 | t-shirt | blue | 1 | | 4 | dress | orange | 2 | | 5 | polo | red | 2 | | 6 | dress | blue | 2 | | 7 | t-shirt | white | 2 | +----+---------+--------+-------+ SELECT s.* FROM persons p, shirts s WHERE p.name LIKE 'Lilliana%' AND s.owner = p.id AND s.color <> 'white'; +----+-------+--------+-------+ | id | style | color | owner | +----+-------+--------+-------+ | 4 | dress | orange | 2 | | 5 | polo | red | 2 | | 6 | dress | blue | 2 | +----+-------+--------+-------+
테이블 이름 바꾸기 t1에서 t2로 이름 바꾸기 mysql> CREATE TABLE t1 (a INTEGER,b CHAR(10)); mysql> ALTER TABLE t1 RENAME t2; 컬럼의 형 바꾸기 테이블 t2의 컬럼 a를 INTEGER에서 TINYINT NOT NULL 형으로 전환하기 mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL; 컬럼의 길이 바꾸기 테이블 t2의 컬럼 b CHAR(10)을 c CHAR(20)으로 길이와 이름 바꾸기 mysql> ALTER TABLE t2 CHANGE b c CHAR(20); 새 컬럼 추가하기 timestamp란 컬럼을 t2에 추가하기 mysql> ALTER TABLE t2 ADD d TIMESTAMP; 인덱스 컬럼 만들기 / primary key 설정하기 t2에 컬럼 d의 인덱스를 추가하기, 컬럼 a를 주 키로 설정한다. mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a); 컬럼 없애기 테이블 t2에서 컬럼 c를 없앤다. mysql> ALTER TABLE t2 DROP COLUMN c; 새 컬럼 추가하기 테이블 t2에 INT UNSIGNED NOT NULL AUTO_INCREMENT 형 컬럼 c를 새로 만들기 mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT; 테이블 없애기 mysql> DROP TABLE table_name
언어 참조 스트링 'a string' "another string" Escape sequences \0 An ASCII 0 (NUL) character. \n A newline character. \t A tab character. \r A carriage return character. \b A backspace character. \' A single quote (`'') character. \" A double quote (`"') character. \\ A backslash (`\') character. \% A `%' character. This is used to search for literal instances of `%' in contexts where `%' would otherwise be interpreted as a wildcard character. \_ A `_' character. This is used to search for literal instances of `_' in contexts where `_' would otherwise be interpreted as a wildcard character. mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; +-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; +-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql> SELECT "This\nIs\nFour\nlines"; +--------------------+ | This Is Four lines | +--------------------+ 숫자 정수형 (1221, 0, -32), 부동소숫점형 (3.4, -23.45e+10, 148.00), 16진수(0x23fc) Column Types Numeric types
Date and time types
date, time이 값의 범위를 벋어날 경우는 zero value를 갖는다.
Timestamp format
String types
기억 용량 비교
* BLOB 는 case-sensitive, TEXT는 case-insensitive 인덱스 적절한 인덱스의 사용은 SELECT문의 성능을 크게 향상시켜준다. 최대 16개까지의 인덱스를 갖는다. 최대 인덱스 길이는 256바이트이다. CHAR과 VARCHAR에 대해서 앞 문자열을 대상으로 인덱스 할 수 있다. BLOB와 TEXT에 대해서 앞문자열을 사용하는 것은 인덱스 할 때 필수이다. mysql> CREATE TABLE test ( name CHAR(200) NOT NULL, KEY index_name (name(10))); 복수개 컬럼에 대해서 인덱스를 만들 수 있다. 최대 15개 컬럼을 사용할 수 있다. mysql> CREATE TABLE test ( id INT NOT NULL, last_name CHAR(30) NOT NULL, first_name CHAR(30) NOT NULL, PRIMARY KEY (id), INDEX name (last_name,first_name)); name인덱스의 사용예: mysql> SELECT * FROM test WHERE last_name="Widenius"; mysql> SELECT * FROM test WHERE last_name="Widenius" AND first_name="Michael"; mysql> SELECT * FROM test WHERE last_name="Widenius" AND (first_name="Michael" OR first_name="Monty"); mysql> SELECT * FROM test WHERE last_name="Widenius" AND first_name >="M" AND first_name < "N"; 연산자 다음의 연산자는 select문에서 사용가능하다. 산술 연산자 +, -, *, /, MOD(a,b) : a를 b로 나눈 나머지 비트 연산자 |, &, <<, >>, ~, BIT_COUNT(N) : N의 설정된 비트 수 논리 연산자 !, ||, &&, 비교 연산자 =, >, <, >=, <=, <> (!=), <=> (Null safe equal), IS NULL, IS NOT NULL, between a and b expr IN (value, ...), expr NOT IN (value, ...) ISNULL(expr), COALESCE(list), INTERVAL(N,N1,N2,N3,...) mysql> select 1 <=> 1, NULL <=> NULL, 1 <=> NULL; -> 1 1 0 mysql> select 1 BETWEEN 2 AND 3; -> 0 mysql> select 'b' BETWEEN 'a' AND 'c'; -> 1 mysql> select 2 BETWEEN 2 AND '3'; -> 1 mysql> select 2 BETWEEN 2 AND 'x-3'; -> 0 mysql> select 2 IN (0,3,5,'wefwf'); -> 0 mysql> select 'wefwf' IN (0,3,5,'wefwf'); -> 1 ....... |