목차
Mysql
MySQL은 DBMS DataBase Management System 로서.. DB를 구성하고 이를 다루기 위해 구성된 시스템이죠.. 다수의 사용자들이 DB에 접속해서 자료의 생성, 삭제, 갱신, 조작등의 제어를 할 수 있도록 해주는 프로그램입니다 ^-^
팁
타입
숫자
TINYINT | A very small integer | The signed range is –128 to 127. The unsigned range is 0 to 255. |
SMALLINT | A small integer | The signed range is –32768 to 32767. The unsigned range is 0 to 65535 |
MEDIUMINT | A medium-size integer | The signed range is –8388608 to 8388607. The unsigned range is 0 to 16777215 |
INT or INTEGER | A normal-size integer | The signed range is –2147483648 to 2147483647. The unsigned range is 0 to 4294967295 |
BIGINT | A large integer | The signed range is –9223372036854775808 to 9223372036854775807. The unsigned range is 0 to 18446744073709551615 |
text와 varchar 타입
TEXT 텍스트형 63535개의 문자 CHAR 고정길이문자 1~255개의 문자 VARCHAR 가변길이문자 1~255개의 문자
varchar는 index를 탈수 있는데 text는 못탑니다. varchar와 char의 차이점은 varchar는 가변길이라서 속도가 느립니다.
Set과 Enum 타입
둘의 차이는 복수 선택이 가능하고 안하고의 여부로 보면 되겠네요.
enum을 쓰면 한번에 하나 값만 입력(또는 선택)이 가능하고 set을 쓰면 한번에 하나 이상의 값을 입력(또는 선택)이 가능하다는 말씀이지요?
내부적으로.. 예를 들어 위에 적으신 예같은 경우에… "짜장" —> 00000…0001 (2진수 64bit) "짬뽕" —> 00000…0010 "우동" —> 00000…0100 "짜장, 짬뽕" —> 00000…0011 "짜장, 우동" —→ 00000…0101 "짜장, 짬뽕, 우동" —> 00000..0111
접속 테스트
<?php // we connect to example.com and port 3307 $link = mysql_connect('example.com:3307', 'mysql_user', 'mysql_password'); if (!$link) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully'; mysql_close($link); ?>
문법
테이블의 내용을 특정 값을 치환.
update rg4_member set `mb_level`=REPLACE(`mb_level`,'0','1')
두테이블을 비교하여 더 있는 항목을 표시
outer join 사용
Outer Join 두 TABLE 을 JOIN 할 때 JOIN 조건식을 만족시키지 못하는 ROW 는 검색에서 빠지게 된다. 그런데 이러한 ROW 들이 검색되도록 하는 것이 OUTER JOIN 이다. (+) OUTER JOIN OPERATOR 를 데이타가 없는 어느 한쪽의 COLUMN 쪽에 붙인다. JOIN 결과, 데이타가 없는 쪽의 COLUMN 값은 NULL로 검색된다. 조건식을 만족시키지 못하는 데이타도 검색한다.
SELECT table명.column명, table명.column명 FROM table1명, table2명 WHERE table1명.column1명 = table2명.column2명(+)
[ 예제 ] S_EMP TABLE 과 S_CUSTOMER TABLE 을 사용하여 영업사원의 LAST_NAME, SALES_REP_ID, NAME 을 검색하시오. 단, 영업사원이 정해져 있지 않은 고객의 이름도 검색하시오.
SELECT E.LAST_NAME, C.SALES_REP_ID, C.NAME FROM S_EMP E, S_CUSTOMER C WHERE E.ID(+) = C.SALES_REP_ID ;
SELECT xe_point.member_srl, xe_point.point FROM xe_point LEFT OUTER JOIN xe_member ON xe_member.member_srl = xe_point.member_srl WHERE xe_member.member_srl IS NULL LIMIT 0 , 300
삭제
delete from ABCDE where no='3'
'ABCDE' 테이블에서 'no' 컬럼값이 '3' 인 레코드를 전부 삭제한다.
delete from ABCDE where no>3
'ABCDE' 테이블에서 'no' 컬럼값이 '3' 보다 큰 레코드를 전부 삭제한다.
delete from ABCDE where no<>3
'ABCDE' 테이블에서 'no' 컬럼값이 '3' 이 '아닌' 레코드를 전부 삭제한다.
delete from ABCDE where wdate>32015467 order by no limit 30
'ABCDE' 테이블에서 'wdate' 컬럼값이 '32015467' 보다 큰 레코드를 'no' 컬럼값을 기준으로 정렬시켜서 상위 30 개를 삭제한다.
delete from ABCDE where tbody like '%무료동영상%'
'ABCDE' 테이블에서 'tbody' 컬럼값에 '무료동영상' 이란 단어가 포함된 레코드를 전부 삭제한다.
delete from ABCDE where tbody like '%무료동영상%' or subject like '%광고%'
'ABCDE' 테이블에서 'tbody' 컬럼값에 '무료동영상' 이란 단어가 포함되어 있거나 'subject' 컬럼값에 '광고' 라는 단어가 포함된 레코드를 전부 삭제한다.
기타
명령어로 가져오기
Your best bet is to FTP it to the server and then ssh in (command line) and import the database that way. The resulting command will look something like:
mysql -hlocalhost -uUser -pPassword database_name < file_name
That way you can completely bypass any file upload or processing time restrictions.
root 비번 잃었을때
DB에 접속 후
[비번변경]
mysql > set password=password("바꿀 비밀번호");
[분실시]
# cd /usr/local/mysql/bin //mysql이 설치된 디렉토리의 bin # killall mysqld # ./safe_mysqld --skip-grant & # mysql mysql > USE mysql; mysql > UPDATE user SET Password=PASSWORD('패스워드') WHERE user='root'; mysql > FLUSH PRIVILEGES; mysql > quit # mysqld restart
먹통
start: Job failed to start.
http://dev.mysql.com/doc/refman/5.6/en/forcing-innodb-recovery.html
InnoDB: Waiting for the background threads to start
http://blackbird.si/mysql-corrupted-innodb-tables-recovery-step-by-step-guide/
상태 보기
https://alvinalexander.com/blog/post/mysql/how-show-open-database-connections-mysql
Probably the most common reason for a thread to stay with either killed or query end for a longer period of time is waiting for a transaction rollback on InnoDB tables. This sometimes can take a lot of time to complete, especially when hundreds of thousands or millions of changes have to be removed.
참조 문서
- innotop : Innodb 락 찾기
- INNODB 상태 보기 :
SHOW ENGINE INNODB STATUS
- 현재 처리중인 프로세스 목록 :
show processlist;