2011.05.31 15:12




[MySQL] MySQL 명령어 _완전기초 (데이터베이스는 삽입,검색,수정,삭제만 알아도 반은 안거란 말이 있죠~ )

USE database_name;        ← 사용할 데이터 베이스 선택 :

 

① 검색

   SELECT * FROM table_name WHERE abc_column='a' ;

② 수정

   UPDATE  tabel_name  SET  a_column='a'  WHERE b_column='b' ;

③ 삽입

   INSERT INTO  table_name (a_column, b_column) VALUES ('a', 'b') ;

④ 삭제

   DELETE FROM  table_name  WHERE d_column='del' ;

   ※ TRUNCATE table_name;   ← 전체 레코드 삭제 ( DELETE FROM table_name 보다 빠름 )

 

 


자~ 여기부터는 MySQL 명령어 기초를 살짝쿵 넘어가 봅시다

 

① SELECT * FROM table_name WHERE abc_column='a' ORDER BY a_column DESC  LIMIT 100;

     └ order by a_column은 정열,  oder by a_column desc는 역순정열,  limit 100 은 100개까지

 

   SELECT * FROM table_name WHERE a_column like '%aaa%';

     └ a_column 에서 aaa 를 포함하는 모든 레코드를 가져옴

 

   SELECT * FROM table_name WHERE a_column BETWEEN 10 AND 100;

     └ a_column 에서 10 ~ 100 사이의 값을 가진 레코드를 가져옴

 

   SELECT a_column FROM table_name GROUP BY a_column;

     └ a_column 의 같은 값끼리 그룹을 묶음.

 

   SELECT count(*) FROM table_name;

      └ 테이블의 전체 레코드 갯수를 가져옴

 

 

② UPDATE table_a SET table_a . a_column = table_b . a_column FROM table_a, table_b

    WHERE table_a.a_column = table_b.a_column  ;

       └ 두개의 테이블에서 조건을 비교하여 업데이트

 

③ 문자관련 함수

    SELECT LEFT(a_column, 2) FROM table_name;     ← a_컬럼 에서 왼쪽부터 2자리 잘라서 가져온다.

    SELECT MID(a_column, 2, 4) FROM table_name;   ← a_컬럼 2자리부터 오른쪽으로 4자리 만큼 가져온다.

    SELECT RIGHT(a_column, 3) FROM table_name;   ← a_컬럼 에서 오른쪽부터 3자리 잘라서 가져온다.

    SELECT * FROM table_name WHERE LENGTH(a_column)=10;  ← a_컬럼에서 길이가 10인 레코드만

    UPDATE table_name SET a_column=REPLACE(a_column,'변경전글자','변경후글자');

       └ a_컬럼의 '변경전글자' 라는 문자열을 '변경후글자'로 바꾸어 a_컬럼 수정

    UPDATE table_name SET a_column=TRIM(a_column);

       └ a_컬럼의 왼쪽 오른쪽 공백을 모두 제거

     SELECT AVG(a_column),MIN(a_column),MAX(a_column),SUM(a_column) FROM table_name;   

       └ AVG : 평균값, MIN : 최소값, MAX : 최대값, SUM : 합계

     SELECT version(),user(),database();

        └ MySQL 버젼 , 유저 , 데이터베이스명 보기

 

④ 날자관련 함수

    SELECT NOW();

 

⑤ JOIN : a_테이블 과 b_테이블 에서 a_컬럼의 값이 같은 레코드만 가져옴

    SELECT a_table.a_column, b_talbe.a_column

    FROM a_talbe, b_table

    WHERE a_table.a_column = b_table.a_column;

 

⑥ UNION : a_테이블 과 b_테이블 에서 a_컬럼,b_컬럼 모든 값을 한꺼번에 가져옴

    SELECT a_column FROM a_table

    UNION

    SELECT b_column FROM b_table;

 

자자~ 여기 부터는 조금더 기초를 넘어 MySQL 명령어 기본기 다지기 정도? 잠시 쉬어갑시다~

 

 

 

 

MySQL 은 공개형 데이터베이스로 누구든 라이센스 제한 없이 사용할 수 있습니다.

(공짜라고 절대 무시못할 엄청난 데이터베이스 입니다)

다운로드는 http://www.mysql.com/donwnloads 에서 하실수 있으며, 현재 버전 5.x 까지 나와있습니다~

 

 

쿼리분석기는 MySQLFRONT 를 사용하는데 그냥 저냥 아주 잘 쓰고 있답니다.

http://www.mysqlfront.de/wp/

 


 

신고
Posted by 우엉 여왕님!! ghostkyow
2011.05.31 10:45
//sqlite3 오픈및 생성
if (sqlite3_open([[self dataFilePath] UTF8String], &database) != SQLITE_OK) {
    sqlite3_close(database);
    NSAssert(0, @"Failed to open database");
}
 
else {
    char *errorMsg;
    NSString *createSQL1 = @"CREATE TABLE IF NOT EXISTS LOGS (ID INTEGER PRIMARY KEY
               AUTOINCREMENT, PHONENUMBER_DATA TEXT, NOW_DATE DATE, CALL_TIME TEXT);";
    if (sqlite3_exec (database, [createSQL1 UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK) {
        sqlite3_close(database);
        NSLog(@"Error creating table: %s", errorMsg);
    }
    NSString *createSQL2 = @"CREATE TABLE IF NOT EXISTS ADDRESS (ID INTEGER PRIMARY KEY
               AUTOINCREMENT, NAME_DATA TEXT, PHONENUMBER_DATA TEXT, MEMO_DATA TEXT);";
    if (sqlite3_exec (database, [createSQL2 UTF8String], NULL, NULL, &errorMsg) != SQLITE_OK) {
        sqlite3_close(database);
        NSLog(@"Error creating table: %s", errorMsg);
    }
}
/* 여기서 생략된 -(NSString *)dataFilePath는 sqlite3파일이 있는 주소값을 리턴해주는 함수 입니다.
   지금 이 소스는 제가 실제로 썼던 소스라 두개의 테이블을 만들게 되어 있어요.
   ID integer primary key autoincrement는 자동으로 생성 되며 키값이 되구요, 그외 나머지는 Text,
   Date, Integer 등등 타입을 설정 할수 있어요 */
 
// 값을 받아 오기.
NSMutableArray *mutableLogData = [NSMutableArray array];
NSString *query = @"SELECT ID ,PHONENUMBER_DATA, NOW_DATE, CALL_TIME FROM LOGS ORDER
                    BY ID DESC";
sqlite3_stmt *statement;
if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {
    while (sqlite3_step(statement) == SQLITE_ROW) {
        int idData = sqlite3_column_int(statement, 0);
        char *numberData = (char *)sqlite3_column_text(statement, 1);
        double dateData = sqlite3_column_double(statement, 2);
        char *callData = (char *)sqlite3_column_text(statement, 3);
        if (numberData != nil && dateData != 0 && idData != 0){
            NSNumber *idValue = [NSNumber numberWithInt:idData];
            NSString *numberValue = [[NSString alloc] initWithUTF8String:numberData];
            NSDate *dateValue = [NSDate dateWithTimeIntervalSince1970:dateData];
            NSString *callTimeValue = [[NSString alloc] initWithUTF8String:callData];
            NSArray *dataArray = [NSArray arrayWithObjects:idValue,
                                                           numberValue,
                                                           dateValue,
                                                           callTimeValue, nil];
            [mutableLogData addObject:dataArray];
            [numberValue release];
            [callTimeValue release];
        }
    }
}
sqlite3_finalize(statement);
/* logs라는 테이블의 id, phonenumber_data, now_date, call_time을 id의 역순으로 가져 오는
    부분 입니다.
    아주아주 쉬운 코드니 바로 아실듯 해요 ㅠ_ㅠ
    여기서는 제가 모든줄을 받아 오기 때문에 while문을 돌려 Array에 넣어주고 있어요 */
 
// 특정 줄의 삭제
 
char *errorMsg;
char *delete = "DELETE FROM ADDRESS WHERE ID = ?";
sqlite3_stmt *stmt;
if( sqlite3_prepare_v2(database, delete, -1, &stmt, nil) == SQLITE_OK) {
    sqlite3_bind_int(stmt, 1, [idData intValue]);
}
if (sqlite3_step(stmt) != SQLITE_DONE) {
    NSLog(@"Error deleting table: %s", errorMsg);
}
sqlite3_finalize(stmt);
 
/* id값을 받아 그것과 일치하는 address테이블의 줄을 삭제 해주는 코드 입니다.
    id는 당연 integer값이니 int형으로 넣구요. */
 
 
// 테이블에 값 입력하기
char *errorMsg;
char *update = "INSERT INTO LOGS (PHONENUMBER_DATA, NOW_DATE, CALL_TIME) VALUES (?,?,?);";
if (sqlite3_open([[self dataFilePath] UTF8String], &database) != SQLITE_OK) {
    sqlite3_close(database);
    NSAssert(0, @"Failed to open database");
}
sqlite3_stmt *stmt;
if( sqlite3_prepare_v2(database, update, -1, &stmt, nil) == SQLITE_OK) {
    sqlite3_bind_text(stmt, 1, [callNum UTF8String], -1, NULL);
    sqlite3_bind_double(stmt, 2, [nowDate timeIntervalSince1970]);
    sqlite3_bind_text(stmt, 3, [callTime UTF8String], -1, NULL);
};
if( sqlite3_step(stmt) != SQLITE_DONE)
    NSLog(@"Error updating table: %s", errorMsg);
sqlite3_finalize(stmt);
 
/* logs 테이블에 값을 넣는 코드 입니다.
    넣으려고 하는 값은 ?를 이용하여 따로 넣어 줄수 있어요.
    조금 아래를 보시면 bind를 이용해 값을 넣는 부분이 있어요 */
 
// 원래 있던 값 수정하기
char *errorMsg;
char *update = <br>
     "UPDATE ADDRESS SET NAME_DATA=? , PHONENUMBER_DATA=? , MEMO_DATA=? WHERE ID=?;";
sqlite3_stmt *stmt;
if( sqlite3_prepare_v2(database, update, -1, &stmt, nil) == SQLITE_OK) {
    sqlite3_bind_text(stmt, 1, [name UTF8String], -1, NULL);
    sqlite3_bind_text(stmt, 2, [phoneNum UTF8String], -1, NULL);
    sqlite3_bind_text(stmt, 3, [memo UTF8String], -1, NULL);
    sqlite3_bind_int(stmt, 4, idNum);
}
if( sqlite3_step(stmt) != SQLITE_DONE)
NSLog(@"Error updating table: %s", errorMsg);
sqlite3_finalize(stmt);
 
/* address테이블의 id를 같은 값을 찾아 <br>
   그 줄의 name_data, phonenumber_data, memo_data를 바꾸는 코드입니다.
   위랑 같이 ?를 이용해 따로 넣으실수 있어요 */

//저번에 깜장색으로 썼더니 보기 편하다길래 깜장색으로 해요 ~_~.

// 출처 -  http://cafe.naver.com/mcbugi/122995
신고
Posted by 우엉 여왕님!! ghostkyow
2011.05.23 10:17

iPhone (아이폰개발시 DB를 위한 Sqlite3 다루기 (2)

 

개발환경 : Mac OS X 10.6.3, Simulator - 3.1.3

 

전편에서 작성한 sqlite3 파일을 어떻게 프로젝트에 넣고 사용하는지에 대한

설명을 했었다이번에는 여기에 테이블을 만들고 데이터를 집어 넣은후

그 내용을 가져와서 테이블 형태로 보여주는 프로그램을 구현해볼 것이다.

 

퀴즈 관련 테이블을 만든다.

CREATE TABLE "quiz" ("no" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL ,

"title" VARCHAR, "question" VARCHAR, "answer" VARCHAR, "level" VARCHAR)

 

이 테이블의 용도는 퀴즈 문제를 DB 에 넣어두고 문제풀이를 위한 어플을 만드는데

쓰일것이다아무것도 없으므로 샘플데이타를 집어넣어 준다.

[샘플 insert 쿼리문]

insert into quiz (title, question, answer, level) values ('title', '질문이다', '대답이다', '1')

insert into quiz (title, question, answer, level) values ('title2', '질문이다2', '대답이다2', '2')

insert into quiz (title, question, answer, level) values ('title3', '질문이다3', '대답이다3', '3')

 

데이터베이스 테이블에 매칭되는 모델클래스를 하나만든다. Subclass  NSObject 

된다.

테이블을 표시할 UIViewController 의 첫 로딩함수에 데이터베이스 생성과 데이터를

불러올 함수를 집어넣는다.

dbName 은 sqlite3 파일명을 말하며, dbPath 는 파일이 있는 위치를 저장한다.

quizs 는 quiz 모델객체가 저장될 클래스 이다그리고 함수가 2개 있는데

checkAndCreateDatabase 는 지정한 DB 파일명이 있는지 체크하고 있으면

그냥넘어가지만 없으면 에러를 출력하게 되어있다두번째 readFromDatabase

현재 quiz 테이블에 저장된 데이터를 모두 가져와 quizs 에 저장하는

임무를 맡고 있다.

 

MainXib.h

01 @interface MainXib : UIViewController {
02     NSString *path;
03     NSString *dbName;
04     NSString *dbPath;
05      
06     NSMutableArray *quizs;
07 }
08  
09 @property(nonatomic, retain)NSMutableArray *quizs;
10  
11 - (void)checkAndCreateDatabase;
12 - (void)readFromDatabase;
13  
14 @end

UIViewController 을 상속받아 만든 클래스이므로 화면이 로딩되면 처음으로

실행되는 함수가 viewDidLoad 이다여기에 데이터베이스를 체크하고

내용을 가져오는 내용이 들어가 있다.

MainXib.m

01 // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
02 - (void)viewDidLoad {
03     dbName = @"success.sqlite";
04  
05     // Get the path to the documents directory and append the databaseName
06     NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
07                                       NSUserDomainMask, YES);
08     NSString *documentsDir = [documentPaths objectAtIndex:0];
09     dbPath = [documentsDir stringByAppendingPathComponent:dbName];
10      
11     // Execute the "checkAndCreateDatabase" function
12     [self checkAndCreateDatabase];
13