<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet href="http://rss.egloos.com/style/blog.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
	<title>nexus11</title>
	<link>http://nexus11.egloos.com</link>
	<description>즐겁게 사는 방법은 바로..</description>
	<language>ko</language>
	<pubDate>Tue, 15 May 2007 02:22:46 GMT</pubDate>
	<generator>Egloos</generator>
	<image>
		<title>nexus11</title>
		<url>http://pds5.egloos.com/logo/200704/27/99/d0052899.gif</url>
		<link>http://nexus11.egloos.com</link>
		<width>80</width>
		<height>58</height>
		<description>즐겁게 사는 방법은 바로..</description>
	</image>
  	<item>
		<title><![CDATA[ Rails plugin 설치하기 ]]> </title>
		<link>http://nexus11.egloos.com/1185926</link>
		<guid>http://nexus11.egloos.com/1185926</guid>
		<description>
			<![CDATA[ 
  ruby script/plugin install [URL]<br />
			 ]]> 
		</description>
		<category>개발 이야기</category>

		<comments>http://nexus11.egloos.com/1185926#comments</comments>
		<pubDate>Tue, 15 May 2007 02:22:46 GMT</pubDate>
		<dc:creator>nexus11</dc:creator>
	</item>
	<item>
		<title><![CDATA[ MySQL 명령어 ]]> </title>
		<link>http://nexus11.egloos.com/1156826</link>
		<guid>http://nexus11.egloos.com/1156826</guid>
		<description>
			<![CDATA[ 
  <span style="font-size: 12px;" id="writeContents" class="ct lh"><p>mysql 명령어 모음</p><p>&nbsp;</p><p># root암호설정 - root로 로그인하여 해야함<br />
% mysqladmin -u root password '변경암호'<br />
% mysqladmin -u root -p기존암호 password '변경암호'</p><p><br />
root암호변경설정<br />
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !<br />
This is done with:<br />
/usr/bin/mysqladmin -u root -p password 'new-password'<br />
/usr/bin/mysqladmin -u root -h ns.dbakorea.pe.kr -p password 'new-password'</p><p><br />
DB작업<br />
DB생성: mysql&gt; create database DB명 ( or % mysqladmin -u root -p create DB명 )<br />
DB삭제: mysql&gt; drop database DB명<br />
DB사용: mysql&gt; use DB명 (엄밀히 말하자면, 사용할 'default database'를 선택하는 것이다.)<br />
DB변경: mysql&gt; alter database db명 DEFAULT CHARACTER SET charset (4.1이상에서만 available)</p><p>&nbsp;</p><p>This article comes from dbakorea.pe.kr (Leave this line as is) MySQL 연결<br />
mysql -u 사용자 -p DB명 ( or % mysqladmin -u root -p drop DB명 )</p><p>데이터파일 실행(sql*loader기능)<br />
mysql&gt;load data infile "데이터파일" into table 테이블명 ;<br />
데이터파일에서 컬럼구분은 탭문자, Null값은 /n로 입력<br />
데이터파일의 위치는 /home/kang/load.txt 와 같이 절대경로로 지정할것.</p><p>질의 파일 실행<br />
쉘프롬프트상에서<br />
mysql -u 사용자 -p DB명 &lt; 질의파일<br />
or<br />
mysql프롬프트상에서<br />
mysql&gt; source 질의파일</p><p>쉘프롬프트상에서 질의 실행<br />
<a href="mailto:dbakorea@lion" target="_blank">dbakorea@lion</a> board]$ mysql mysql -u root -pxxxx -e \<br />
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "INSERT INTO db VALUES(<br />
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'localhost', 'aaa', 'aaa',<br />
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y')"</p><p><br />
사용자 생성 &amp; 사용자에게 DB할당<br />
shell&gt; mysql --user=root -p mysql</p><p>mysql&gt; INSERT INTO user VALUES('localhost','사용자',PASSWORD('비밀번호'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');<br />
mysql&gt; INSERT INTO user VALUES('%','사용자',PASSWORD('비밀번호'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');</p><p>mysql&gt;INSERT INTOdb(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv)VALUES ('localhost','DB명','사용자','Y','Y','Y','Y','Y','Y');<br />
mysql&gt;INSERT INTOdb(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv)VALUES('%','DB명','사용자','Y','Y','Y','Y','Y','Y');</p><p>mysql&gt; FLUSH PRIVILEGES; (or shell prompt: mysqladmin -u root -pxxxx reload)</p><p>CASE 2: GRANT명령을 이용한 사용자 생성(이 방법이 권장된다)<br />
kang이라는 DB를 만들고, 이 DB를 아래에서 나열된 권한을 가진 kang이라는 사용자를 생성<br />
create database kang;<br />
grant SELECT,INSERT,UPDATE,DELETE,CREATE,DROP on kang.* to <a href="mailto:kang@localhost" target="_blank">kang@localhost</a> identified by 'kang';<br />
grant SELECT,INSERT,UPDATE,DELETE,CREATE,DROP on kang.* to <a href="mailto:kang@%27%%27" target="_blank">kang@'%'</a> identified by 'kang';</p><p>mysql&gt; create database kang;<br />
Query OK, 1 row affected (0.00 sec)</p><p>mysql&gt; grant SELECT,INSERT,UPDATE,DELETE,CREATE,DROP on kang.* to <a href="mailto:kang@localhost" target="_blank">kang@localhost</a> identified by 'kang';<br />
Query OK, 0 rows affected (0.00 sec)</p><p>mysql&gt; grant SELECT,INSERT,UPDATE,DELETE,CREATE,DROP on kang.* to <a href="mailto:kang@%27%%27" target="_blank">kang@'%'</a> identified by 'kang';<br />
Query OK, 0 rows affected (0.01 sec)</p><p>mysql&gt;</p><p>여러가지 명령정리<br />
mysql&gt; show variables;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 서버의 variables(설정사항)출력<br />
mysql&gt; show variables like 'have_inno%'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 조건에 맞는 variables만 출력<br />
mysql&gt; show databases;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; database목록<br />
mysql&gt; show tables;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 현재DB의 테이블목록(temporary table은 출력하지 않음)<br />
mysql&gt; show tables from db명;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 지정된 db명이 소유한 테이블목록<br />
mysql&gt; show tables like 'mem%';&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 조건에 맞는 테이블목록만 출력<br />
mysql&gt; show index from 테이블명;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 인덱스 보기<br />
mysql&gt; show columns from 테이블명;&nbsp;&nbsp;&nbsp;&nbsp;테이블구조(describe 테이블명, explain 테이블명)<br />
mysql&gt; show table status;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 현재 DB의 테이블들의 상태(row수,table type,row길이,..)<br />
mysql&gt; show table status from db명;<br />
지정된 DB의 테이블들의 상태(row수,table type,row길이,..)<br />
<br />
mysql&gt; show create table 테이블명;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 해당 테이블 생성 SQL문 출력<br />
mysql&gt; rename table 테이블1 to 테이블2;<br />
테이블명 변경(ALTER TABLE 테이블1 RENAME TO 테이블2)<br />
<br />
mysql&gt; rename table 테이블1 to 테이블2, 테이블3 to 테이블4;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rename multiple tables<br />
mysql&gt; rename table db1명.테이블명 to db2명.테이블명;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 테이블을 다른 DB로 이동<br />
mysql&gt; alter table 테이블명 add 컬럼명 데이터타입;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 컬럼추가<br />
mysql&gt; alter table 테이블명 del 컬럼명;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 컬럼제거<br />
mysql&gt; alter table 테이블명 modify 컬럼명 컬럼타입;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 컬럼명에 지정된 컬럼타입의 변경<br />
mysql&gt; alter table 테이블명 change old컬럼명 new컬럼명 컬럼타입&nbsp;&nbsp;&nbsp;&nbsp; 컬럼명 변경<br />
mysql&gt; alter table 테이블명 type=innodb;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 테이블type변경<br />
mysql&gt; create table 테이블명(..) type=heap min_rows=10000;<br />
10000row를 수용할 수 있을 만큼 메모리할당(heap type이므로)<br />
<br />
mysql&gt; select version();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MySQL서버버전 출력<br />
mysql&gt; create table 테이블2 as select * from 테이블1;<br />
테이블1과 동일한 테이블 생성(with 데이터, as는 생략가능)<br />
<br />
mysql&gt; create table 테이블2 as select * from 테이블1 where 1=2;<br />
테이블1과 동일한 구조의 테이블 생성(without 데이터, 1=2는 0으로 할수도 있다.)<br />
<br />
mysql&gt; insert into 테이블2 select * from 테이블1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 테이블1의 데이터를 테이블2에 insert</p><p><br />
테이블이 존재여부 파악<br />
DROP TABLE IF EXISTS 테이블명;<br />
CREATE TABLE 테이블명 (...);<br />
프로그래밍 언어에서 COUNT(*)를 사용하여 질의가 성공하면 테이블이 존재함을 파악할 수 있다.<br />
<br />
ISAM, MyISAM의 경우 COUNT(*)가 최적화되어 상관없으나, BDB, InnoDB의 경우 full scan이 발생하므로 사용하지 마라.<br />
<br />
대신 select * from 테이블명 where 0; 을 사용하라. 질의가 성공하면 테이블이 존재하는 것이고, 아니면 존재하지 않는 것이다.</p><p>&nbsp;</p><p>접속<br />
mysql {-h 접속호스트} -u 사용자 -p 사용DB<br />
-h로 다른 서버에 존재하는 MySQL접속시 다음과 같이 MySQL DB에 설정해줘야 한다.<br />
mysql&gt;INSERT INTO user VALUES('접근을 허용할호스트ip','사용자',PASSWORD('비밀번호'),'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');<br />
<br />
mysql&gt; INSERT INTOdb(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv)VALUES('접근을 허용할 호스트ip','사용DB','사용자','Y','Y','Y','Y','Y','Y');<br />
<br />
mysql&gt; FLUSH PRIVILEGES; or 쉴프롬프트상에서 % mysqladmin -u root -p flush-privileges</p><p><br />
검색조건(where)<br />
regular expression을 지원하다니 신기하군..<br />
mysql&gt; select * from work where 열명 regexp "정규표현식";</p><p><br />
백업 &amp; 복구<br />
mysqldump {-h 호스트} -u 사용자 -p DB명 &gt; 백업파일<br />
mysql {-h 호스트} -u 사용자 -p DB명 &lt; 백업파일</p><p>mysqldump -u root -p --opt db_dbakorea &gt; dbakorea.sql<br />
mysqldump -u root -p --opt db_board | mysql ---host=remote-host -C database <br />
(상이한 머쉰)<br />
<br />
mysql -u dbakorea -p db_dbakorea &lt; dbakorea.sql</p><p>mysqldump -u root -p --opt db_dbakorea | mysql ---host=ns.dbakorea.pe.kr -C db_dbakorea</p><p>테이블 생성구문만을 화면에서 보려면 다음과 같이 --no-data를 사용한다. 테이블명을 생략하면 모든 테이블 출력<br />
<br />
mysqldump -u 유저명 -p --no-data db명 테이블명</p><p>테이블 검사<br />
isamchk</p><p>오라클 sysdate와 동일<br />
insert into test values('12', now());</p><p>유닉스 time()함수 리턴값 사용<br />
FROM_UNIXTIME(954788684)<br />
UNIX_TIMESTAMP("2001-04-04 :04:04:04")</p><p>MySQL 디폴트 DB&amp;로그파일 위치<br />
/var/lib/mysql<br />
/var/lib디렉토리는 여러 프로세스들이 사용하는 데이터를 저장하는 일종의 파일시스템상의 데이터베이스라고 볼 수 있다.</p><p>replace<br />
해당 레코드 존재하면 update하고, 존재하지 않는다면 insert한다.(insert문법과 동일)<br />
replace into test values('maddog','kang myung gyu')'</p><p>explain<br />
explain 질의문: 지정한 질의문이 어떻게 실행될 건지를 보여줌<br />
mysql&gt; explain select u.uid, u.name, a.name from sm_user u, sm_addr a where u.uid=a.uid;<br />
+-------+------+-----------------+-----------------+---------+-------+------+-------+<br />
| table&nbsp;&nbsp; | type&nbsp; | possible_keys&nbsp;&nbsp;&nbsp; &nbsp;| key&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | key_len | ref&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | rows | Extra |<br />
+-------+------+-----------------+-----------------+---------+-------+------+-------+<br />
| u&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; | ALL&nbsp; | PRIMARY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; | NULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; NULL | NULL&nbsp; |&nbsp; 370&nbsp; &nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;|<br />
| a&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; | ref&nbsp;&nbsp;&nbsp; | sm_addr_uid_idx | sm_addr_uid_idx |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11&nbsp;&nbsp;&nbsp; | u.uid&nbsp; |&nbsp;&nbsp; 11&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; |<br />
+-------+------+-----------------+-----------------+---------+-------+------+-------+<br />
2 rows in set (0.01 sec)</p><p><br />
temporary table<br />
크기가 큰 테이블에 있는 subset에 대한 질의라면 subset을 temporary table에 저장한 후 질의하는 것이 더 빠를 경우가 있다.<br />
temporary table는 세션내에서만 유효하고(현재 사용자만이 볼수 있다는 뜻), 세션종료시 자동적으로 drop된다.</p><p>create temporary table (...);<br />
create temporary table (...) type=heap;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 디스크가 아닌 메모리에 테이블 생성</p><p>존재하는 permanent table의 테이블명과 동일하게 생성할 수 있으며,<br />
temporary table은 permanent table보다 우선시되어 처리된다.<br />
4.0.7의 감마버전에서 테스트하면 결과는 약간 달라진다. 버그인건지..</p><p>mysql&gt; create table test (id varchar(10));<br />
Query OK, 0 rows affected (0.01 sec)</p><p>mysql&gt; insert into test values('dbakorea');<br />
Query OK, 1 row affected (0.00 sec)</p><p>mysql&gt; create temporary table test(id varchar(10));<br />
Query OK, 0 rows affected (0.00 sec)</p><p>mysql&gt; select * from test;<br />
Empty set (0.00 sec)</p><p>mysql&gt; drop table test;<br />
Query OK, 0 rows affected (0.00 sec)</p><p>mysql&gt; select * from test;<br />
+----------+<br />
| id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
+----------+<br />
| dbakorea |<br />
+----------+<br />
1 row in set (0.00 sec)</p><p>&nbsp;</p><p>Table Type에 다른 Files on Disk</p><p>ISAM&nbsp;&nbsp; .frm (definition) .ISD (data) .ISM (indexes)<br />
MyISAM .frm (definition) .MYD (data) .MYI (indexes)<br />
MERGE&nbsp; .frm (definition) .MRG (list of constituent MyISAM table names)<br />
HEAP&nbsp;&nbsp; .frm (definition)<br />
BDB&nbsp;&nbsp;&nbsp; .frm (definition) .db (data and indexes)<br />
InnoDB .frm (definition)</p><p>보통 mysqldump를 사용하여 백업을 수행하여 다른 DB서버에 데이터를 restore하면 된다.<br />
MySQL은 별다른 작업없이 데이터파일을 단순히 복사(copy)하는 것만으로도 다른 서버에<br />
DB을 이동시킬 수 있다. 하지만, 이런 방식이 지원되지 않는 table type도 있다.</p><p>ISAM: machine-dependent format하기때문에..<br />
BDB : .db파일에 이미 테이블위치가 encode되어 있기때문에..<br />
MyISAM, InnoDB, MERGE :가능(machine-independent format)</p><p>별다른 지정을 하지 않았다면 디폴트 TABLE type이 MyISAM이므로, 무난히 migration할 수 있다.<br />
floating-point컬럼(FLOAT,DOUBLE)이 있다면 이러한 방식이 실패할 수 도 있다.</p><p>쉘에서는 mysql이 되는데 PHP에서 mysql.sock error를 내면서 MySQL이 안되는 경우<br />
mysql.sock은 /tmp 아니면 /var/lib/mysql에 생기게 된다.<br />
나의 경우, /var/lib/mysql에 mysql.sock파일이 있는데 PHP에서는 /tmp에서 찾으려하면서 에러를 발생했다.<br />
/usr/bin/safe_mysqld파일에서 다음과 같이 수정한다.<br />
주석(#)이 달린 것이 원래것이고 그 밑에 있는것이 수정한 것이다.</p><p># MYSQL_UNIX_PORT=${MYSQL_UNIX_PORT:-/var/lib/mysql/mysql.sock}<br />
MYSQL_UNIX_PORT=${MYSQL_UNIX_PORT:-/tmp/mysql.sock}</p><p>위와 같이 하니 /usr/bin/mysql이 /var/lib/mysql/mysql.sock에서 소켓파일을 찾으려 했다.<br />
socket file을 지정하는 --socket이라는 옵션으로 다음과 같이 지정하면 된다.</p><p>mysql --socket=/tmp/mysql.sock -u dbakorea -p db_test</p><p>하지만 mysql실행시마다 이렇게 써줘야한다는 것이 상당히 귀찮다. 옵션이 바로 적용되게 설정하자.<br />
mysql은 설정사항을 다음 3가지 파일에서 검색한다.</p><p>/etc/my.cnf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; global options(MySQL 전체적으로 사용되는 옵션 정의)<br />
mysql-data-dir/my.cnf&nbsp; 특정 DB에 적용되는 option (/var/lib/mysql/my.cnf)<br />
~/.my.cnf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 사용자 각각의 설정('~'문자는 사용자의 홈디렉토리는 의미)</p><p>/usr/share/mysql디렉토리에 예제가 있으므로 참고한다.<br />
소켓파일의 지정은 다음줄을 넣어주면 된다.</p><p>socket&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = /tmp/mysql.sock</p><p><br />
== /etc/my.cnf예 ==<br />
# The following options will be passed to all MySQL clients<br />
[client]<br />
#password&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = your_password<br />
port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 3306<br />
socket&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = /tmp/mysql.sock</p><p># Here follows entries for some specific programs</p><p># The MySQL server<br />
[mysqld]<br />
port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = 3306<br />
socket&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = /tmp/mysql.sock</p><p>&nbsp;</p><p>MySQL에서 통계처리시<br />
orderby, groupby 는 sort_buffer를 늘여준다.(show variables)</p><p>live table(smslog)에서 모든 질의를 처리하지 말고 summary table에 질의결과를 저장해 재질의 처리한다.<br />
summary table이 heap-type table가 가능한지 확인할 것.</p><p>INSERT INTO tblTemp2 (fldID) SELECT tblTemp1.fldOrder_ID FROM tblTemp1 WHERE<br />
&nbsp;&nbsp;&nbsp;&nbsp; tblTemp1.fldOrder_ID &gt; 100;</p><p><br />
join이 subselect보다 빠르다.<br />
join시 사용되는 컬럼은 동일한 column type과 길이를 가져야만 최적의 속도를 보장한다.<br />
즉, 동일 column type이지만 길이가 다르다면(char(11), char(10)), 동일한 컬럼도메인으로 변경해주는 것이 좋다.<br />
where의 in은 optimize되어 있으므로 빠르다<br />
insert,select는 동시에 수행가능하다.(어떻게?)<br />
explain으로 질의과정 점검</p><p><br />
varchar to/from char<br />
conversion varchar를 char로 변경할 경우 모든 컬럼타입을 동시에 변경해야 한다.<br />
반대의 경우, 하나만 char-&gt;charchar변경시 다른 모든 컬럼도 varchar로 변경됨<br />
참.. 특이하구만..</p><p>mysql&gt; CREATE TABLE chartbl (name VARCHAR(40), address VARCHAR(80));<br />
Query OK, 0 rows affected (0.05 sec)</p><p>mysql&gt; desc chartbl;<br />
+---------+-------------+------+-----+---------+-------+<br />
| Field&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;| Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; | Null&nbsp;&nbsp; | Key | Default | Extra |<br />
+---------+-------------+------+-----+---------+-------+<br />
| name&nbsp;&nbsp; &nbsp; | varchar(40)&nbsp; | YES&nbsp; |&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;| NULL&nbsp; &nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
| address | varchar(80)&nbsp; &nbsp;| YES&nbsp;&nbsp;|&nbsp; &nbsp; &nbsp;&nbsp; | NULL&nbsp;&nbsp; &nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; |<br />
+---------+-------------+------+-----+---------+-------+<br />
2 rows in set (0.03 sec)</p><p>mysql&gt; alter table chartbl modify name char(40);<br />
Query OK, 0 rows affected (0.02 sec)<br />
Records: 0&nbsp; Duplicates: 0&nbsp; Warnings: 0</p><p>mysql&gt; desc chartbl;<br />
+---------+-------------+------+-----+---------+-------+<br />
| Field&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;| Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Null&nbsp;&nbsp; | Key | Default&nbsp; &nbsp;| Extra &nbsp;|<br />
+---------+-------------+------+-----+---------+-------+<br />
| name&nbsp;&nbsp;&nbsp; &nbsp;| varchar(40) | YES&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;| NULL&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
| address | varchar(80) &nbsp;| YES&nbsp; &nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;| NULL&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
+---------+-------------+------+-----+---------+-------+<br />
2 rows in set (0.00 sec)</p><p>mysql&gt; alter table chartbl modify name char(40), modify address char(80);<br />
Query OK, 0 rows affected (0.01 sec)<br />
Records: 0&nbsp; Duplicates: 0&nbsp; Warnings: 0</p><p>mysql&gt; desc chartbl;<br />
+---------+----------+------+-----+---------+-------+<br />
| Field&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | Null&nbsp;&nbsp; &nbsp;| Key | Default &nbsp;| Extra&nbsp; |<br />
+---------+----------+------+-----+---------+-------+<br />
| name&nbsp;&nbsp;&nbsp; | char(40) | YES&nbsp;&nbsp; &nbsp;|&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; | NULL&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; |<br />
| address | char(80) | YES&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;| NULL&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; |<br />
+---------+----------+------+-----+---------+-------+<br />
2 rows in set (0.00 sec)</p><p>mysql&gt;</p><p><br />
"For each article, find the dealer(s) with the most expensive price."</p><p>표준안<br />
&nbsp;&nbsp;&nbsp;&nbsp; SELECT article, dealer, price<br />
&nbsp;&nbsp;&nbsp;&nbsp; FROM&nbsp;&nbsp; shop s1<br />
&nbsp;&nbsp;&nbsp;&nbsp; WHERE&nbsp; price=(SELECT MAX(s2.price)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FROM shop s2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WHERE s1.article = s2.article);</p><p>수정안(최적화)<br />
&nbsp;&nbsp;&nbsp;&nbsp; CREATE TEMPORARY TABLE tmp (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; price&nbsp;&nbsp; DOUBLE(16,2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DEFAULT '0.00' NOT NULL);</p><p>&nbsp;&nbsp;&nbsp;&nbsp; LOCK TABLES shop read;</p><p>&nbsp;&nbsp;&nbsp;&nbsp; INSERT INTO tmp SELECT article, MAX(price) FROM shop GROUP BY article;</p><p>&nbsp;&nbsp;&nbsp;&nbsp; SELECT shop.article, dealer, shop.price FROM shop, tmp<br />
&nbsp;&nbsp;&nbsp;&nbsp; WHERE shop.article=tmp.article AND shop.price=tmp.price;</p><p>&nbsp;&nbsp;&nbsp;&nbsp; UNLOCK TABLES;</p><p>&nbsp;&nbsp;&nbsp;&nbsp; DROP TABLE tmp;</p><p>&nbsp;</p><p>==============================================================================<br />
MySQL 특성정리<br />
==============================================================================<br />
primary key, foreign key지원<br />
index 지원(15개컬럼, 256byte까지)<br />
MySQL에서의 Stored Script-x개념 =&gt; SQL server language<br />
commit-rollback개념 =&gt; lock tables(lock table test write -&gt; 트랜잭션.. -&gt; unlock tables)<br />
컬럼명길이: 64자까지, 컬럼 Alias: 256자까지<br />
not case-sensitive: keywords, functions, column, index명<br />
case-sensitive: database, table, alias명<br />
키워드,함수명은 대소문자구별이 없지만, db명과 table명은 Unix계열이라면 case-sensitive하다.<br />
(이는 오브젝트명이 OS의 fs에 따라 저장되기 때문이다. 서버의 lower_case_table_names 변수를<br />
1로 설정하면 오브젝트명은 모두 소문자로 저장되므로 유닉스-윈도간 호환성을 높일 수 있다.</p><p>지원되지 않는 부분: <br />
Stored Procedure(5.0이상부터 지원된다고 함)<br />
View(5.0이상부터 지원된다고 함)<br />
Trigger(5.0이상부터 지원된다고 함)<br />
subquery(4.1이상부터 지원된다고 함)<br />
union, union all(4.0이상부터 지원됨)</p><p><br />
인덱스 생성<br />
- alter table을 이용한 인덱스 생성이 더 flexible함<br />
- 인덱스명은 생략가능</p><p>ALTER TABLE 테이블명 ADD INDEX 인덱스명 (인덱스컬럼);<br />
ALTER TABLE 테이블명 ADD UNIQUE 인덱스명 (인덱스컬럼);<br />
ALTER TABLE 테이블명 ADD PRIMARY KEY (인덱스컬럼);<br />
ALTER TABLE 테이블명 ADD FULLTEXT (인덱스컬럼);</p><p>CREATE INDEX 인덱스명 ON 테이블명 (인덱스컬럼);<br />
CREATE UNIQUE INDEX 인덱스명 ON 테이블명 (인덱스컬럼);<br />
CREATE FULLTEXT INDEX 인덱스명 ON 테이블명 (인덱스컬럼);</p><p>unique인덱스와 primary key인덱스와의 차이<br />
unique은 null허용하지만, primary key는 null허용 안함<br />
unique은 하나의 테이블에 여러개 올 수 있지만, primary key는 하나만 존재</p><p>테이블생성시 지정<br />
CREATE TABLE 테이블명<br />
(<br />
&nbsp; ... column declarations ...<br />
&nbsp; INDEX 인덱스명 (인덱스컬럼),<br />
&nbsp; UNIQUE 인덱스명 (인덱스컬럼),<br />
&nbsp; PRIMARY KEY (인덱스컬럼),<br />
&nbsp; FULLTEXT 인덱스명 (인덱스컬럼),<br />
...</p><p>);</p><p><br />
index prefix 생성<br />
- 컬럼의 전체길이중 일부만 인덱스로 사용<br />
- supported for ISAM, MyISAM, HEAP, and BDB tables, but not for InnoDB tables<br />
- 지정되는 길이는 byte단위가 아닌 charater단위이므로, multi-byte character일 경우 주의<br />
- blob, text 컬럼타입일 경우, index prefix 가 유용(255 길이까지 가능)</p><p>CREATE TABLE 테이블명<br />
(<br />
&nbsp; name&nbsp; CHAR(30) NOT NULL,<br />
&nbsp; address CHAR(60) NOT NULL,<br />
&nbsp; INDEX (name(10),address(10))<br />
);</p><p><br />
인덱스 삭제<br />
DROP INDEX 인덱스명 ON 테이블명;<br />
ALTER TABLE 테이블명 DROP INDEX 인덱스명;<br />
ALTER TABLE 테이블명 DROP PRIMARY KEY;</p><p><br />
outer join </p><p>[MySQL] <br />
left outer joing : SELECT t1.*, t2.* FROM t1 LEFT&nbsp; OUTER JOIN t2 ON t1.i1 = t2.i2;<br />
right outer joing: SELECT t1.*, t2.* FROM t1 RIGHT OUTER JOIN t2 ON t1.i1 = t2.i2;</p><p>[Oracle]<br />
left outer joing : SELECT t1.*, t2.* FROM t1, t2 where t1.i1 = t2.i2(+);<br />
right outer joing: SELECT t1.*, t2.* FROM t1, t2 where t1.i1(+) = t2.i2;</p><p>SELECT<br />
&nbsp; student.name, student.student_id,<br />
&nbsp; event.date, event.event_id, event.type<br />
FROM<br />
&nbsp; student, event<br />
&nbsp; LEFT JOIN score ON student.student_id = score.student_id<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AND event.event_id = score.event_id<br />
WHERE<br />
&nbsp; score.score IS NULL<br />
ORDER BY<br />
&nbsp; student.student_id, event.event_id;<br />
&nbsp; </p><p>:= 문장을 이용한 변수의 설정</p><p>현재 dbakorea의 데이터베이스강좌게시판에 등록된 총 게시물은 43개이다. 43개의 강좌를 읽은 수(hit수)는 각각 다르다.<br />
평균 hit수를 구해 보자.</p><p>mysql&gt; select @total_hit := sum(hit), @total_record := count(*) from zetyx_board_database;<br />
+------------------------+---------------------------+<br />
| @total_hit := sum(hit) | @total_record := count(*) |<br />
+------------------------+---------------------------+<br />
|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3705 |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 43 |<br />
+------------------------+---------------------------+<br />
1 row in set (0.00 sec)</p><p>mysql&gt; select @total_hit/@total_record as 평균HIT;<br />
+-----------------+<br />
| 평균HIT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
+-----------------+<br />
| 86.162790697674 |<br />
+-----------------+<br />
1 row in set (0.00 sec)</p><p>select substring(subject from 9) from zetyx_board_database where substring(subject, 1, 8) = '[ORACLE]';</p><p><br />
보통 상용DBMS들이 row-level locking을 지원한다. 쉽게 말해 레코드단위로 락킹한다는 말이다.<br />
반면, MySQL의 MyISAM 테이블타입은 table-level locking을 사용한다. <br />
쉽게 말하면, insert, update, delete작업은 전체 테이블에 락을 걸고 처리된다는 것이다.<br />
row-level락보다 비효율적이지만,.. MySQL은 빠르기 때문에 이 단점이 상쇄된다.</p><p>Compressed MyISAM(packed MyISAM)<br />
정적인 테이블데이터는 압축하여 20-60%정도의 공간을 절약할 수 있다.<br />
Production데이터를 CD로 받아서 차후 디스크에 풀지 않고 CD자체로 바로 사용할 수도 있다.<br />
gzip등으로 백업받으면 이를 푸는 과정이 필요할 것이다.<br />
% myisampack dbakorea.myi</p><p>데이터베이스 게시판의 Merge Table에 좀 더 자세한 내용을 적어 두었다.</p><p><br />
RAID Table<br />
1개의 테이블은 OS상에 3개의 파일로 구성된다.<br />
스키마파일(.frm), data파일(.myd), index파일(.myi)<br />
MySQL의 RAID테이블은 데이터파일(.myd)을 여러개의 파일들로 구성하는 것이다.</p><p>create table raid_test (...)<br />
type=myisam raid_type=striped raid_chunks=4 raid_chunsize=8</p><p>테이블을 4개의 데이터파일로 나누고, 8kb단위로(8kb stripe) 라운드로빈 방식으로 write가 이루어진다.</p><p><br />
1. 해당 디렉토리 찾아가기 </p><p>$ cd /</p><p>$ cd usr/local/mysql</p><p>2. mysql 처음 사용시 해야할 것</p><p>mysql의 root사용자의 패스워드를 다음과 같이 설정하고 mysql를 재기동하도록 합니다.</p><p>$ mysql -u root</p><p>mysql&gt; use mysql;<br />
mysql&gt; show databases;<br />
mysql&gt; show tables;<br />
(여기서 db, user 테이블을 주목해 두어야 함.)<br />
mysql&gt; select * from db;<br />
mysql&gt; select * from user;</p><p>mysql&gt; update user set password=password('******') where user='root';</p><p>mysql&gt;\q;</p><p>$ mysqladmin -u root reload</p><p>3. mysql 재기동 </p><p>$ mysqladmin -uroot -p reload<br />
Enter password : ******</p><p>위의 패스워드는 MySql에서 사용하는 패스워드입니다. </p><p>&nbsp;</p><p>4. 데이터베이스의 생성</p><p>$ mysqladmin -uroot -p create db명<br />
Enter password : ******</p><p>&nbsp;</p><p>5. 데이터베이스의 삭제</p><p>$ mysqladmin -uroot -p drop db명<br />
Enter password : ******</p><p>&nbsp;</p><p>6. 특정 db 사용자 권한 설정 및 새로운 사용자 등록</p><p>$ mysql -u root -p<br />
Enter password : ******</p><p>mysql&gt; use mysql;<br />
mysql&gt; insert into db values ('%','db명', '사용자ID', 'y','y','y','y','y','y','y','y','y','y');<br />
mysql&gt; select host, db, user from db;</p><p>mysql&gt; insert into user (host, user, password) values ('localhost', '사용자ID', password('패스워드'));<br />
mysql&gt; select host, user, password from user;</p><p>mysql&gt; \q</p><p>&nbsp;</p><p>※ 지금부터는 linux3s1 사용자(패스워드는 111111으로 가정)가 linux3 데이터베이스를 사용한다는 조건하에서 예시를 들어 설명합니다.</p><p>7. mysql 의 실행</p><p>$ mysql -u linux3s1 -p<br />
Enter password : ******</p><p>8. 어떠한 데이터베이스가 있는지 확인</p><p>mysql&gt; show databases;</p><p>9. 사용할 데이터베이스를 선택</p><p>mysql&gt; use linux3s;</p><p>10. 특정 데이터베이스안에 어떠한 테이블들이 있는지 확인</p><p>mysql&gt; show tables;</p><p>&nbsp;</p><p>11. table 생성/수정/삭제</p><p>⑴ linux3s 데이터베이스에 imsi 테이블을 CREATE TABLE을 이용하여 생성한다.</p><p>mysql&gt; create table imsi(<br />
-&gt; name CHAR(8),<br />
-&gt; id VARCHAR(10) NOT NULL,<br />
-&gt; url VARCHAR(40),<br />
-&gt; email VARCHAR(40),<br />
-&gt; milage INT(11),<br />
-&gt; level CHAR(2),<br />
-&gt; PRIMARY KEY(id) );</p><p>⑵ desc 명령으로 imsi 테이블의 구조 명세를 살펴보자.</p><p>mysql&gt; desc imsi;</p><p>⑶ 테이블 내용을 수정하려면 ALTER TABLE 문을 이용한다.</p><p>mysql&gt; alter table imsi change column id id varchar(12) NOT NULL;</p><p>mysql&gt; desc imsi;</p><p>⑷ imsi 테이블을 삭제하려면 DROP TABLE문을 사용한다.</p><p>mysql&gt; drop table imsi;</p><p>mysql&gt; show tables;</p><p>⑸ mysql client를 이용하지 않고 데이터베이스내에 테이블을 생성하는 방법</p><p>아래의 SQL문을 imsi.sql이라는 파일로 저장한다.</p><p>create table imsi(<br />
name CHAR(8),<br />
id VARCHAR(10) NOT NULL,<br />
url VARCHAR(40),<br />
email VARCHAR(40),<br />
milage INT(11),<br />
level CHAR(2),<br />
PRIMARY KEY(id) );</p><p>이제 계정의 커맨드 라인에서 아래와 같은 명령을 내리면 mysql client를 통해 linux3s 데이터베이스에 연결하지 않고도 데이터베이스내에 imsi 테이블을 생성.</p><p>아래의 명령은 linux3s1라는 사용자로 linux3s 데이터베이스에 연결하여 imsi.sql 파일에 담긴 sql문을 실행한다는 의미이다.</p><p>$ mysql -u linux3s1 -p linux3s &lt; imsi.sql<br />
Enter password : 111111</p><p>12. INSERT 명령문으로 5개의 데이터를 imsi 테이블에 삽입해 보자. </p><p>mysql&gt; insert into imsi (name, id, url, email, milage, level)<br />
-&gt; values ('이상군', 'server', '815server.net', <a href="mailto:%27%3Ca%20href=%27mailto:master@815server.net%27%3Emaster@815server.net%3C/a%3E%27" target="_blank">'</a><a href="mailto:master@815server.net">master@815server.net</a>', '1000', 'A');</p><p>mysql&gt; insert into imsi (name, id, url, email, milage, level)<br />
-&gt; values ('김재현', 'regist', 'dosa.com', <a href="mailto:%27%3Ca%20href=%27mailto:master@dosa.com%27%3Emaster@dosa.com%3C/a%3E%27" target="_blank">'</a><a href="mailto:master@dosa.com">master@dosa.com</a>', '1500', 'B');</p><p>mysql&gt; insert into imsi (name, id, url, email, milage, level)<br />
-&gt; values ('마준석', 'you', 'youiwe.co.kr', <a href="mailto:%27%3Ca%20href=%27mailto:master@youiwe.co.kr%27%3Emaster@youiwe.co.kr%3C/a%3E%27" target="_blank">'</a><a href="mailto:master@youiwe.co.kr">master@youiwe.co.kr</a>', '2000', 'C');</p><p>mysql&gt; insert into imsi (name, id, url, email, milage, level)<br />
-&gt; values ('김대수', 'iwe', 'youiwe.co.kr', <a href="mailto:%27%3Ca%20href=%27mailto:master@youiwe.co.kr%27%3Emaster@youiwe.co.kr%3C/a%3E%27" target="_blank">'</a><a href="mailto:master@youiwe.co.kr">master@youiwe.co.kr</a>', '1500', 'B');</p><p>mysql&gt; insert into imsi (name, id, url, email, milage, level)<br />
-&gt; values ('한용수', 'yshan', 'hanserver.com', <a href="mailto:%27%3Ca%20href=%27mailto:master@hanserver.com%27%3Emaster@hanserver.com%3C/a%3E%27" target="_blank">'</a><a href="mailto:master@hanserver.com">master@hanserver.com</a>', '2500', 'E');</p><p>13. SELECT 문으로 확인해 보자. </p><p>mysql&gt; select * from imsi;</p><p>14. SELECT 문으로 level이 B인 사용자의 이름과 아이디를 출력해 보자.</p><p>mysql&gt; select name, id from imsi where level='B';</p><p>15. DISTINCT 옵션을 이용하여 imsi 테이블에 총 몇 종류의 사용자 level이 존재하는지 알아보자.</p><p>mysql&gt; select distinct (level) from imsi;</p><p>16. WHERE 문을 이용하여 milage가 1500 이상이면서 level이 'B'인 사람의 이름과 아이디, url을 출력해 보자</p><p>mysql&gt; select name, id, url from imsi where milage&gt;1500 AND level='B';</p><p>17. ORDER BY문을 이용하여 검색 결과를 정렬하여 보자</p><p>milage가 2000 이상인 사람의 이름과 아이디, milage를 milage가 높은 순서대로 출력</p><p>mysql&gt; select name, id, milage from imsi where milage &gt; 2000 order by milage DESC;</p><p>18. 문자열을 포함하여 검색</p><p>mysql&gt; select name, '님의 milage는 ', milage, '점입니다.' from imsi?? where milage &gt;= 2000 order by milage;</p><p>19. 산술식을 이용하여 출력</p><p>mysql&gt; select name, id, email, milage+200 from imsi where id='yshan';</p><p>20. 그룹함수를 이용</p><p>그룹함수를 이용하면 필드 값의 평균이나 최대, 최소, 또는 해당 조건을 만족하는 레코드가 몇 개 인지 알 수 있으므로 수치를 값으로 갖는 필드에 대한 통계치를 구할 때 유용하다.</p><p>count(필드명) //조건을 만족하는 레코드의 개수<br />
sum(필드명) //해당 필드의 합<br />
min(필드명) //해당 필드의 값 중 최소값<br />
max(필드명) //해당 필드의 값 중 최대값<br />
avg(필드명) //해당 필드의 평균값</p><p>mysql&gt; select count(*) from imsi where level='B';<br />
mysql&gt; select count(*) from imsi where name like '%박%';<br />
'박%';<br />
'전_';<br />
'전__';<br />
where date between '2001-07-10' and '2001-08-30';</p><p>21. 자료의 갱신</p><p>mysql&gt; update imsi set name='전세정' where name='마준석';</p><p>22. 특정 레코드의 삭제</p><p>mysql&gt; delete from imsi where name='전세정';</p><p>&nbsp;</p><p>백업과 복구</p><p>· 데이터베이스의 백업(backup)과 복구(restore)는 매우 중요하다.</p><p>MySQL에서는 mysqldump라는 파일을 실행하여 데이터베이스내의 데이터를 외부 파일로 저장할 수 있다. mysqldump는 mysql 디렉토리 밑의 bin 디렉토리에 존재하며 아래와 같은 명령어를 통해 백업을 수행한다.</p><p>mysqldump -u [user_name] -p [백업할 db_name] &gt; [외부로 저장할 파일명]</p><p>23. linux3s? 데이터베이스를 백업해 보자.</p><p>$ mysqldump -u linux3s1 -p linux3s &gt; linux3s_backup.sql<br />
Enter password : ******</p><p>24. 백업된 파일의 확인</p><p>$ ls -l linux3s_backup.sql</p><p>25. 위 명령의 실행 결과 생성된 linux3s_backup.sql 파일의 내용을 확인한다.</p><p>$ cat linux3s_backup.sql</p><p>mysqldump 명령으로 백업된 데이터베이스는 해당 데이터베이스내에 있는 테이블의 구조를 정의한 데이터 정의문과 INSERT 문과 같은 데이터 조작문의 SQL 형태로 저장되어 있다.</p><p>이렇게 SQL 형태로 자장되면 아래와 같은 명령으로 쉽게 데이터를 복구할 수 있다. 또한 SQL은 데이터베이스의 표준언어이므로MySQL이 아닌 다른 database server에 해당 database를 이식하려 할 때에도 호환성에 의한 문제가 거의발생치 않는 장점이 있다.</p><p>26. 필요에 따라 linux3s_backup.sql 파일의 내용을 수정한 후 다음과 같은 방법으로 복구한다.</p><p>$ mysql -u linux3s1 -p linux3s &lt; linux3s_backup.sql<br />
Enter password : ****** </p><p>&nbsp;</p><p>※ 컬럼의 유형</p><p>○ 컬럼(Column)</p><p>- 데이터베이스를 구성하는 최소단위<br />
- 컬럼들이 모여서 테이블(Table)을 구성</p><p>○ 컬럼의 유형</p><p>TINYINT<br />
·부호 있는 정수 -128 ∼ 127<br />
·부호 없는 정수 0 ∼ 255<br />
·1 Byte</p><p>SMALLINT<br />
·부호 있는 정수 -32768 ∼ 32767<br />
·부호 없는 정수 0 ∼ 65535<br />
·2 Byte</p><p>MEDIUMINT<br />
·부호 있는 정수 -8388608 ∼ 8388607<br />
·부호 없는 정수 0 ∼ 16777215<br />
·3 Byte</p><p>INT 또는<br />
INTEGER<br />
·부호 있는 정수 -2147483648 ∼ 2147483647<br />
·부호 없는 정수 0 ∼ 4294967295<br />
·4 Byte</p><p>BIGINT<br />
·부호 있는 정수 -9223372036854775808 ∼ -9223372036854775807<br />
·부호 없는 정수 0 ∼ 18446744073709551615<br />
·8 Byte</p><p>FLOAT<br />
·단일 정밀도를 가진 부동 소수점<br />
·-3.402823466E+38 ∼ 3.402823466E+38</p><p>DOUBLE<br />
·2 배 정밀도를 가진 부동 소수점<br />
·-1.79769313486231517E+308 ∼ 1.79769313486231517E+308</p><p>DATE<br />
·날짜를 표현하는 유형<br />
·1000-01-01 ∼ 9999-12-31</p><p>DATETIME<br />
·날짜와 시간을 표현하는 유형<br />
·1000-01-01 00:00:00 ∼ 9999-12-31 23:59:59</p><p>TIMESTAMP<br />
·1970-01-01 00:00:00부터 2037년 까지 표현<br />
·4 Byte</p><p>TIME<br />
·시간을 표현하는 유형<br />
·-839:59:59 ∼ 833:59:59</p><p>YEAR<br />
·년도를 표현하는 유형<br />
·1901년 ∼ 2155년</p><p>CHAR(M)<br />
·고정길이 문자열을 표현하는 유형<br />
·M = 1 ∼ 255</p><p>VARCHAR(M)<br />
·가변길이 문자열을 표현하는 유형<br />
·M = 1 ∼ 255</p><p>TINYBLOB<br />
TINYTRXT<br />
·255개의 문자를 저장<br />
·BLOB : Binary Large Object의 약자</p><p>BLOB<br />
TEXT<br />
·63535개의 문자를 저장</p><p>MEDIUMBLOB<br />
MEDIUMTEXT<br />
·16777215개의 문자를 저장</p><p>LONGBLOB<br />
LONGTEXT<br />
·4294967295(4Giga)개의 문자를 저장</p><br />
<p><br />
</p><p>출처 : http://www.lug.or.kr/home/bbs/board.php?bo_table=mysql&amp;wr_id=3<br />
</p></span>			 ]]> 
		</description>
		<category>개발 이야기</category>

		<comments>http://nexus11.egloos.com/1156826#comments</comments>
		<pubDate>Fri, 04 May 2007 02:34:33 GMT</pubDate>
		<dc:creator>nexus11</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 스파이더맨3 ]]> </title>
		<link>http://nexus11.egloos.com/1149773</link>
		<guid>http://nexus11.egloos.com/1149773</guid>
		<description>
			<![CDATA[ 
  최악이다.<br><br>돈을 퍼부은 영화는 대부분 돈쓴 티가나는 부분이 있을꺼라는 기대감에 극장을 찾지만..<br>이건 뭐.. 어휴~ 정말.. -_-)<br>이렇게 후진! 영화는 오랜만에 봤다.. ㅜ_ㅜ;			 ]]> 
		</description>
		<category>내 이야기</category>

		<comments>http://nexus11.egloos.com/1149773#comments</comments>
		<pubDate>Tue, 01 May 2007 14:29:23 GMT</pubDate>
		<dc:creator>nexus11</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Radrails에서 TextMate처럼 UI변경하기. ]]> </title>
		<link>http://nexus11.egloos.com/1142716</link>
		<guid>http://nexus11.egloos.com/1142716</guid>
		<description>
			<![CDATA[ 
  <a href="http://drnicwilliams.com/2006/08/08/textmate-theme-for-radrails">http://drnicwilliams.com/2006/08/08/textmate-theme-for-radrails</a><br>위 사이트에서 TextMate-for-RadRails.zip 를 다운로드 한다.<br><br>그러면 epf파일이 있는데, 이 파일을 Radrails에서 import하면 됨.<br>import는<br>File &gt;&gt; Import.. &gt;&gt; General &gt;&gt; Preferences &gt;&gt;Next<br>epf파일을 첨부하고 preferences 리스트에서 모두 check한다음에 완료하면 됨.			 ]]> 
		</description>
		<category>개발 이야기</category>

		<comments>http://nexus11.egloos.com/1142716#comments</comments>
		<pubDate>Sun, 29 Apr 2007 06:29:34 GMT</pubDate>
		<dc:creator>nexus11</dc:creator>
	</item>
	<item>
		<title><![CDATA[ Radrails에서 IntelliSense 사용하기 ]]> </title>
		<link>http://nexus11.egloos.com/1136897</link>
		<guid>http://nexus11.egloos.com/1136897</guid>
		<description>
			<![CDATA[ 
  너무 알고 싶었던.. radrails에서 intellisense사용하는 방법을 알았다..<br><br><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: '맑은 고딕'"><a title="http://radrailstemplates.com/" href="http://radrailstemplates.com/">http://radrailstemplates.com/</a><br>여기서 xml템플릿을 내려받아서 설정해주면 된다.<br><br>Macbook Textmate에서는 snippet을 제공한다는게 너무 부러웠었는데.<br>이제 win32 Radrails에서도 비슷한 기능을 할 수 있게 되었다 ++<br></span>			 ]]> 
		</description>
		<category>개발 이야기</category>

		<comments>http://nexus11.egloos.com/1136897#comments</comments>
		<pubDate>Fri, 27 Apr 2007 02:10:10 GMT</pubDate>
		<dc:creator>nexus11</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 졸다가 청담역을 지나쳤다.. ]]> </title>
		<link>http://nexus11.egloos.com/1136890</link>
		<guid>http://nexus11.egloos.com/1136890</guid>
		<description>
			<![CDATA[ 
  오랜만에..ㅜ_ㅜ<br>졸다가 청담역을 지나쳤다.<br><br>보통 목적지를 지나치면 이상하게 상당히 화가나고 짜증이 난다.<br>그런데 청담역을 지나치면.. 한강다리를 건너가는데... 오늘 날씨가 좋아서 그런 짜증이 중화되는 기분이네...<br><br>암튼.. 각설하고..<br>10시 15분 출근.. -_-+			 ]]> 
		</description>
		<category>회사가는길</category>

		<comments>http://nexus11.egloos.com/1136890#comments</comments>
		<pubDate>Fri, 27 Apr 2007 02:05:43 GMT</pubDate>
		<dc:creator>nexus11</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 노가리에 나에게 무엇을 주었나! ]]> </title>
		<link>http://nexus11.egloos.com/1134791</link>
		<guid>http://nexus11.egloos.com/1134791</guid>
		<description>
			<![CDATA[ 
  노가리엔 여러종류가 있다. (몰랐다. .ㅜ_ㅜ)<br>한 서너가지가 있는것 같은데..<br>그중에 '앵치노가리' 란 녀석이 가장 좋아 보인다.<br><br>큰놈은 굽다가 겉은 다 타고 속은 덜구워지고 그런다.<br>그런데 이 앵치란 녀석은 알맞게 잘 구워진다.<br><br>원래 뼈까지 먹는거라고 하는데, 그러기가 생각보다 어렵다..<br>(난 생선가시에 대한 아픔이 너무 많다..ㅜ_ㅜ)<br><br>오늘도 여지없이 아내하고 노가리에 대해서 토론한다..<br>이건 너무 탔다, 이건 맛이 별로네..<br>노가리는 굽자마자 가시를 발라야 하는데.. 조금만 늦어도 힘들어진다.<br>다 타이밍이 있는것인게다.. 사소한 노가리 가시 바르는일에도 그 타 이 밍 이란게 있는게다..<br>오징어나 한치는 안그런데 왜 노가리는 그런가..<br>이것들은 건어물이라는 울타리에 함께 살면서 굽고 먹을때는 왜이렇게 차이가 나는지..<br>가시를 바를때는 짜증이 나는데 다 발라놓고 나면.. 행 복 해 진 다..<br><br><br>난 집에서 아내하고 술을 자주 마신다.<br>서로 퇴근하고 집앞 체육관에서 가볍게 운동하고 돌아와서 맥주를 즐긴다.<br>이런 시간이 익숙하다.. 그리고 좋다..<br><br><br>술은 참.. 뭐랄까.. 그..... 음..&nbsp; .. ... . .!!<br>			 ]]> 
		</description>
		<category>술마시고...</category>

		<comments>http://nexus11.egloos.com/1134791#comments</comments>
		<pubDate>Thu, 26 Apr 2007 16:52:23 GMT</pubDate>
		<dc:creator>nexus11</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 회사가는길... ]]> </title>
		<link>http://nexus11.egloos.com/1134749</link>
		<guid>http://nexus11.egloos.com/1134749</guid>
		<description>
			<![CDATA[ 
  대부분 음악듣기 &amp; 취침..<br>중국어 듣기? 보기?<br>사람 쳐다보기..<br><br>집에서 회사까지 1시간 남짓 걸린다.<br>이시간에는 참 할것이 많다..<br><br>시간은 왜 매일같이 나에게 숙제를 주는지.......<br>하루의 판단은 아침에 달렸다.			 ]]> 
		</description>
		<category>회사가는길</category>

		<comments>http://nexus11.egloos.com/1134749#comments</comments>
		<pubDate>Thu, 26 Apr 2007 16:48:31 GMT</pubDate>
		<dc:creator>nexus11</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 3년 6개월 만에 회사에서 첫 PT를.. ]]> </title>
		<link>http://nexus11.egloos.com/1134630</link>
		<guid>http://nexus11.egloos.com/1134630</guid>
		<description>
			<![CDATA[ 
  내일은 사회생활 한 이래로 첫 PT를 하는 날이다.<br>이거 재밌겠는걸.. 후훗..<br><br>주제는 Ruby on Rails 이다.<br><br>오후내내 만들었던 pt를 저장을 잘못해서 날려버렸다.. ㅜ_ㅜ 아.. 짜증.. <br>담배만 늘어간다. :(<br><br>겨우겨우 다 마치고 퇴근했다.. PM 10:00<br><br>rails철학은 아직 잘 모르겠다.<br>RoR세미나를 갔었는데.. <br>오픈마루의 <a href="http://myruby.net/">deepblue님</a>은 참 편안해보였다.<br>어떻게 저럴수 있는지 놀라울 정도로..<br><br>비슷한 사람이 회사에 있었고..<br>약간은 다르지만 비슷한 느낌의 친구는 아직 회사에 다닌다..<br><br>그런 사람들을 보면 신기하다.. 어떻게 자신을 그렇게 만들수 있었을까?<br>그냥 부러움의 대상으로 만족한다..<br>그런 사람이 있는데 구지 내가 그렇게 될 필요는 없지 않은가.. <br>내일 PT가 끝나면 난 한걸음 더 성장 할 수 있을까?<br><br>@ 아직까지는 다른걸 버리고 개발자가 된걸 후회하지는 않는다.^^			 ]]> 
		</description>
		<category>개발 이야기</category>

		<comments>http://nexus11.egloos.com/1134630#comments</comments>
		<pubDate>Thu, 26 Apr 2007 16:42:26 GMT</pubDate>
		<dc:creator>nexus11</dc:creator>
	</item>
	<item>
		<title><![CDATA[ 블로그를 시작하다. ]]> </title>
		<link>http://nexus11.egloos.com/1134443</link>
		<guid>http://nexus11.egloos.com/1134443</guid>
		<description>
			<![CDATA[ 
  블로그를 시작하다..<br>이르다, 늦다 라는 말은 필요없다..<br><br>내가 하고 싶은 이유가 생겼기 때문이다..<br>그거면 된다. :)			 ]]> 
		</description>
		<category>내 이야기</category>

		<comments>http://nexus11.egloos.com/1134443#comments</comments>
		<pubDate>Thu, 26 Apr 2007 16:25:37 GMT</pubDate>
		<dc:creator>nexus11</dc:creator>
	</item>
</channel>
</rss>
