MySQL root 패스워드 분실했을때Mysql / DataBase

2010/10/18 14:22

복사http://blog.naver.com/choiye84/130095730006

1> 암호 초기화
# /etc/init.d/mysqld stop

또는

# killall mysqld (데몬을 죽입니다)

# cd /usr/local/mysql (mysql이 깔린 곳으로 갑니다)
# ./bin/safe_mysqld --skip-grant &
여기까지가 초기화

2> 새 암호 넣기
# /etc/init.d/mysqld start

또는

# ./bin/mysql (sql 실행)
mysql>use mysql
mysql>update user set password=password('새암호') where user='root';
(root 암호 변경합니다. '새암호' 자리에 새암호를 넣으세요
예>update user set password=password('1234') where user='root';
mysql> FLUSH PRIVILEGES
mysql> exit

# ./bin/mysql -uroot -p1234 으로 들어와지면 성공입니다.

MySQL 관리자 즉 root 의 비밀번호를 분실하였거나, 다른 관리자가 변경해 놓고 휴가를 가 버리고.. 연락이 안될때.. 등의 경우.

[해결과정]
1. MySQL 데몬을 중지한다.
2. 패스워드가 있는 테이블을 무시하고(건너뛰고) 데몬을 띄운다
3. 루트로 로그인해서 루트의 비밀번호를 다시 설정한다.
4. 권한을 다시 로드한다. (이후 로그아웃).
5. 정상적으로 데문을 다시 실행한다.

[내용]
++++++ MySQL 데몬중지
++++++ 패스워드가 있는 테이블을 무시하고(건너뛰고) 데몬을 띄운다
# mysqld_safe --skip-grant-tables

++++++ 루트로 로그인해서 루트의 비밀번호를 다시 설정한다.
# mysql --user=root mysql
mysql> update user set Password=PASSWORD('new-password') where user='root';
mysql> flush privileges;
mysql> exit;
++++++ MySQL 데몬중지 & 시작

* 복사용 정리
# /etc/init.d/mysqld stop // 설정상황에 따라 다름
# mysqld_safe --skip-grant-tables // 경로확인 할 것
# mysql --user=root mysql
update user set Password=PASSWORD('암호') where user='root';
flush privileges;
exit;

# /etc/init.d/mysqld stop // 설정상황에 따라 다름
# /etc/init.d/mysqld start // 설정상황에 따라 다름
or
# /etc/init.d/mysql restart

++++++++++++++++++++
1.MySQL 데몬 실행 중지

# /etc/rc.d/mysqld stop
(또는 # killall -9 mysqld )

2.인증제외한 MySQL 데몬 실행

# mysqld_safe --skip-grant &

3. 비번없이 접속후 mysql DB의 user 테이블에서 root 패스워드 변경

# mysql -u root mysql
mysql> update user set password=password('new password') where user='root';
mysql> flush privileges;
mysql> quit
# _

4. 정상적인 MySQL 데몬 실행

# /etc/rc.d/mysqld restart
or
# /etc/rc.d/mysqld stop
# /etc/rc.d/mysqld start (또는 # safe_mysqld --user=mysql &)

X. 한글로 보이도록

# mysqld_safe --user=mysql --language=korean &

Posted by 달팽이맛나
,

Problem
디비 서버를 운영하다보면 아래와 같은 에러와 함께 db서버가 죽어버리는 경우가 있다.

091030 13:40:29 [ERROR] /usr/libexec/mysqld: Table ‘.some_table’ is marked as crashed and should be repaired

Solution
mysql> analyze table some_table;
mysql> repaire table some_table;
//위에서 실패하면 아래 실행
]# myisamchk -r some_table;

위와 같이 repair를 하면 쉽게 해결되기는 하지만, 그 원인은 뭘까?

mysql Reference에서 How to Repair MyISAM Tables 페이지에서 찾을 수 있었다.
위의 문제는 다음과 같은 충돌들로 일어날 수 있다.

  • tbl_name.frm이 변경에 대해서 락이 걸려있는 경우
  • tbl_name.MYI(Errcod:nnn)을 찾을 수 없는 경우
  • 파일이 unexpected end일 경우
  • 저장 파일이 충돌했을 경우
  • 테이블 핸들러로부터 nnn에러를 받았을 경우

위에서 말하는 nnn 에러는 system error로 다음 커맨드로 그 의미를 알아볼 수 있다.
]# perror 126 127 132 134 135 136 141 144 145
MySQL error code 126 = Index file is crashed
MySQL error code 127 = Record-file is crashed
MySQL error code 132 = Old database file
MySQL error code 134 = Record was already deleted (or record file crashed)
MySQL error code 135 = No more room in record file
MySQL error code 136 = No more room in index file
MySQL error code 141 = Duplicate unique key or constraint on write or update
MySQL error code 144 = Table is crashed and last repair failed
MySQL error code 145 = Table was marked as crashed and should be repaired

위의 145 번 에러 코드가 이번 경우에 해당 되었다.
참고로 135번과 136번에러는 테이블의 MAX_ROWS와 AVG_ROW_LENGTH를 수정해서 고칠 수 있다.
mysql>ALTER TABLE tbl_name MAX_ROWS=xxx AVG_ROW_LENGTH=yyy;
현재 테이블 옵션이 어떻게 되어 있는지 보려면 아래 명령어로 보자.
mysql>SHOW CREATE TABLE some_table;

다른 에러들에 대한 대처는 myisamchk르 대부분이 찾아내서 고칠 수 있다.
이 작업을 하기 전에 디비 테이블 파일들에 대한 권한을 확인한다.(없으면 부여)
먼저 mysqld서버를 중지한다.(유의: 중지 후 바로 디비 서버가 바로 죽지 않는다. 모든 index 변경사항이 디스크에 플러시 될때까지가 중지되는 시점이다)

Stage 1: 테이블 검사

]# myisamchk *.MYI
이 작업으로 error라고 판별된 테이블에 대해서만 Stage 2에서 고쳐질 수 있으며, 이 커맨드 과정에서 에러(e.g. out of memory)가 나면 Stage 3로 너어가면 된다.

Stage 2: Easy safe repair

]# myisamchk -r -q tbl_name (-r -q 은 “빠른 복구 모드”)
이는 data file을 건들지 않고 index file을 고치는 커맨드이다.

  1. Make a backup of the data file before continuing.
  2. Use myisamchk -r tbl_name (-r means “recovery mode”). This removes incorrect rows and deleted rows from the data file and reconstructs the index file.
  3. If the preceding step fails, use myisamchk –safe-recover tbl_name. Safe recovery mode uses an old recovery method that handles a few cases that regular recovery mode does not (but is slower).

나는 여기까지로 대부분이 해결이 되었다.
stage 3에 대한 방법, 그 외의 방법은 How to Repair MyISAM Tables를 참고하면 되겠다.

Posted by 달팽이맛나
,

쿼리를 날리다 보면, 필요에 따라 그룹별로 순위를 매겨야 할 때 있다.
이에 대해 오라클에서는 그러한 기능을 제공하는데,
아래가 바로 그 예이다.

[Oracle]
SELECT empno, ename, job, sal, 
           
ROW_NUMBER() OVER(PARTITION BY job ORDER BY sal) AS rnum
FROM scott.emp;


<<결과>>

     EMPNO ENAME                JOB                       SAL       RNUM
---------- -------------------- ------------------ ---------- ----------
      7902 FORD                  ANALYST                    3000          1
      7788 SCOTT                ANALYST                   3000          2
      7369 SMITH                 CLERK                         800          1
      7900 JAMES                CLERK                         950          2
      7876 ADAMS                CLERK                       1100          3
      7934 MILLER                CLERK                       1300          4
      7782 CLARK                 MANAGER                  2450          1
      7698 BLAKE                 MANAGER                  2850          2
      7566 JONES                 MANAGER                  2975          3
      7839 KING                    PRESIDENT                5000          1
      7654 MARTIN               SALESMAN                 1250          1
      7521 WARD                  SALESMAN                 1250          2
      7844 TURNER               SALESMAN                 1500          3
      7499 ALLEN                 SALESMAN                 1600          4

14 개의 행이 선택되었습니다.



상기 쿼리는,
emp 테이블의 JOB을 기준으로 하여 그룹을 정하고 (PARTITION BY job),  -- 1
sal을 기준으로 하여 순위를 매겨(ORDER BY sal),
각각의 행에 ROW_NUMBER를 부여하겠다는 의미이다.                         -- 2


여기서 'PARTITION BY job'은 job별 정렬을 발생시킨다.
즉, 최종 결과물의 넘버링은 ORDER BY job, sal의 순으로 결과가 나오는 것이다.




[MySQL]
그런데, 불행하게도..... MySQL에는 저 기능이 없다.
그렇기 때문에 우리의 친구 꼼수(?)를 이용하여 저것을 구현해 내야 하는데.....

SELECT empno, ename, job, sal, rnum
FROM (
   SELECT a.*, 
           (CASE @vjob WHEN a.job THEN @rownum:=@rownum+1 ELSE @rownum:=1 END) rnum,
           (@vjob:=a.job) vjob
   FROM emp a, (SELECT @vjob:='', @rownum:=0 FROM DUAL) b
   ORDER BY a.job, a.sal                 
) c;


<<결과>>
+-------+--------+-----------+------+------+
| empno | ename  | job       | sal  | rnum |
+-------+--------+-----------+------+------+
|  7902 | FORD   | ANALYST   | 3000 |    1 |
|  7788 | SCOTT  | ANALYST   | 3000 |    2 |
|  7369 | SMITH  | CLERK     |  800 |    1 |
|  7900 | JAMES  | CLERK     |  950 |    2 |
|  7876 | ADAMS  | CLERK     | 1100 |    3 |
|  7934 | MILLER | CLERK     | 1300 |    4 |
|  7782 | CLARK  | MANAGER   | 2450 |    1 |
|  7698 | BLAKE  | MANAGER   | 2850 |    2 |
|  7566 | JONES  | MANAGER   | 2975 |    3 |
|  7839 | KING   | PRESIDENT | 5000 |    1 |
|  7654 | MARTIN | SALESMAN  | 1250 |    1 |
|  7521 | WARD   | SALESMAN  | 1250 |    2 |
|  7844 | TURNER | SALESMAN  | 1500 |    3 |
|  7499 | ALLEN  | SALESMAN  | 1600 |    4 |
+-------+--------+-----------+------+------+
14 rows in set (0.00 sec)

어때... 결과가 같아 보이는가?

자, 그럼 쿼리를 뜯어보자.
여기서 궁금하게 생각되는 부분은 아래 3개의 쿼리라고 예상 된다.

1. (CASE @vjob WHEN a.job THEN @rownum:=@rownum+1 ELSE @rownum:=1 END) rnum,
--> 이전 job 필드와 동일한 그룹인가를 판별하고, 그룹에 따라 순번을 부여하기 위함이며,
      테이블에서 각각의 행을 읽을 때마다,
      변수 @vjob 값이 지금 새로 읽은 job 과 같다면 변수 @rownum을 1증가 시키고, 
      그렇지 않은 경우(@vjob이 현재 읽은 job값과 같지 않다면) @rownum을 1로 초기화 시킨다
.

2. (@vjob:=a.job) as vjob
--> 테이블에서 각각의 행을 읽을 때마다,
      그룹 판별을 위해 현재 읽고 있는 행의 job값을 변수 @vjob에 입력

3. (SELECT @vjob:='', @rownum:=0 FROM DUAL) b
--> 원래는 쿼리를 수행하기 이전에, 
      SET @vjob:=0, @rownum:=0;  을 수행하여 변수를 초기화 해야 한다.
      만약 해주지 않으면, NULL 값이 들어가게 된다.

      하지만 그럴 경우 쿼리가 2번 수행되어야 하기 때문에,

      하나의 쿼리로 만들기 위해서 이런 식의 서브 쿼리를 이용한 것이다.
      이 서브쿼리는 초기 테이블 확인시 1회만 수행되고,
      이후부터는 열람되지 않는다.
    
      !! 주의 !!
      서브쿼리 안에서의 결과값만 가지고 현재의 결과값을 얻고자 할 때,
      변수가 되는 항목의 값을 동일한 자료형으로 맞춰주지 않으면, 
      정상적인 결과값이 나오지 않는다.
      가령 위의 예를 이용하자면, @vjob의 초기값을 @vjob:=0 으로 수행 하고
      서브쿼리만을 수행하면 정상적인 결과값이 나오지 않게 된다. 
      한 번 해보자~

      

이 3가지를 이해한다면 아마 이해할 수 있을 것이라 생각되지만,
한 가지 짚고 넘어가야 할 것이 있다.

Q. 우리가 흔히 쓰는 SELECT 문장의 수행순서는 어떻게 될까?
무슨의미냐 하면..
위에서 사용한 것처럼 변수를 이용한 SELECT 내 연속적인 값의 할당은,
수행결과에 영향을 미치게 되지 않을까?
라는 질문이다.


흠.. 내가 말을 써놓고 난해하군..
예제를 보도록 하자.

<<예제>>
SET @val1=0, @val2=0;    #아까도 말했듯이 변수 초기화는 먼저 선행되어야 한다.
SELECT @val1:=@val1+1, @val2:=@val1+1, @val2:=0, @val1=@val2+1
FROM DUAL;


자.... 당신이 예상하는 결과는?.....



<<쿼리 수행 결과>>
 +----------------+----------------+----------+---------------+
| @val1:=@val1+1 | @val2:=@val1+1 | @val2:=0 | @val1=@val2+1 |
+----------------+----------------+----------+---------------+
|                      1 |                     2 |             0 |                    1 |
+----------------+----------------+----------+---------------+
1 row in set (0.00 sec)

상기와 같이 SELECT 내 수행 결과는,
왼쪽에서 오른쪽으로 순차적인 수행이 이루어짐을 알 수 있다.

즉, @val1:=@val1+1  @val2:=@val1+1  @val2:=0  →  @val1=@val2+1
로 수행 순서가 정해진다는 의미.

그러므로,
변수를 이용한 SELECT를 이용할 때는 반드시 수행순서를 염두해 두고 쿼리를 작성하도록 하자.




PS : 오라클에는 예제 테이블이 있지만 MySQL 에는 없으니
       혹시 테스트 해보고 싶은 사람은 아래 쿼리를 수행해서 테스트 해보도록...

CREATE TABLE emp (
   empno INT,
   ename VARCHAR(30),
   job VARCHAR(30),
   sal INT
)ENGINE=INNODB DEFAULT CHAR SET=UTF8;

INSERT INTO emp
VALUES
(7902,'FORD','ANALYST',3000),
(7788,'SCOTT','ANALYST',3000),
(7369,'SMITH','CLERK',800),
(7900,'JAMES','CLERK',950),
(7876,'ADAMS','CLERK',1100),
(7934,'MILLER','CLERK',1300),
(7782,'CLARK','MANAGER',2450),
(7698,'BLAKE','MANAGER',2850),
(7566,'JONES','MANAGER',2975),
(7839,'KING','PRESIDENT',5000),
(7654,'MARTIN','SALESMAN',1250),
(7521,'WARD','SALESMAN',1250),
(7844,'TURNER','SALESMAN',1500),
(7499,'ALLEN','SALESMAN',1600);
Posted by 달팽이맛나
,

작업 중인 모 사이트가 갑자기 다운되는 현상이 발생했다.

원인은 MySQL DB connect 숫가가 꽉 차서 연결이 안되서였다.(max_connections)

급하게 MySQL Daemon을 restart해서 다시 정상이 되기는 했지만 문제를 찾아야 했다.

 

DB를 확인해 보니 1천만 row 가까운 테이블이 존재했고, 별다른 인덱스가 걸려있지 않았다.

 

Slow Query Log와 해당 테이블을 사용하는 웹프로그램을 뒤져서 해당 테이블을 다른 테이블과 JOIN 하여 데이터를 추출하고 있다는 것을 알았다....


 

웹프로그램을 짜다보면...

'이 서비스가 얼마나 활성화되겠어? 조금 서비스하다가 말겠지..'

라는 안일한 생각과 게으름으로 쿼리를 대충 사용하는 경우가 종종 있다.

 

그런 경우 약간 만 동시접속자가 증가하면 서비스가 멈추는 황당한 일을 겪게 된다.

 

이번도 그런 경우였다. 그래서 정리해 본다.

 

예제 테이블 정의

* table name : T1
+------+-------------+
| id   | name        |
+------+-------------+
| 1    | honggil     |
| 2    | nari        |
| 3    | abcd        |
+------+-------------+


* table name : T2
+------+-------------+
| id   | comment     |
+------+-------------+
| 1    | hohoho      |
| 2    | yo!!        |
+------+-------------+


 

1. JOIN을 생략한 JOIN

mysql> SELECT * FROM T1, T2 WHERE T1.id = T2.id
+------+-------------+-------------+
| id   | name        | comment     |
+------+-------------+-------------+
| 1    | honggil     | hohoho      |
| 2    | nari        | yo!!        |
+------+-------------+-------------+
 

JOIN한 각 테이블에 값이 모두 있는 필드 만 추출한다.

 

 

2. INNER JOIN

mysql> SELECT * FROM T1 INNER JOIN T2 ON T1.id = T2.id
+------+-------------+-------------+
| id   | name        | comment     |
+------+-------------+-------------+
| 1    | honggil     | hohoho      |
| 2    | nari        | yo!!        |
+------+-------------+-------------+
 
1번의 JOIN을 생략하고 Where 절로 처리한 것과 같은 결과를 보인다.

 

3. LEFT JOIN

mysql> SELECT * FROM T1 LEFT JOIN T2 ON T1.id = T2.id
+------+-------------+-------------+
| id   | name        | comment     |
+------+-------------+-------------+
| 1    | honggil     | hohoho      |
| 2    | nari        | yo!!        |
| 3    | abcd        | NULL        |
+------+-------------+-------------+
 
JOIN의 왼쪽에 있는 테이블을 기준으로, JOIN의 오른쪽 테이블에 조건에 맞는 값이 없으면 NULL 로 표시한다.
결국 JOIN의 왼쪽 테이블의 값은 모두 표시된다.

 

4. RIGHT JOIN

mysql> SELECT * FROM T1 RIGHT JOIN T2 ON T1.id = T2.id
+------+-------------+-------------+
| id   | name        | comment     |
+------+-------------+-------------+
| 1    | honggil     | hohoho      |
| 2    | nari        | yo!!        |
+------+-------------+-------------+
 
LEFT JOIN의 반대.
즉, JOIN의 오른쪽에 있는 테이블을 기준으로, JOIN의 왼쪽 테이블에 조건에 맞는 값이 없으면 NULL 로 표시한다.
결국 JOIN의 오른쪽 테이블의 값은 모두 표시된다.

이 밖에 여러가지 JOIN이 있지만 생략한다.


JOIN을 하면 간편하긴 하지만 Slow Query의 원인이 되는 경우가 많다.
어떤 쿼리가 Slow Query인지 찾기 위해 로그를 쌓는 방법을 알아보자.

1. 데몬을 실행시킬 때 Slow Query Log를 적용하는 방법
MySQL 데몬 실행 시 --log-slow-queries=[저장할파일명] 라는 옵션을 준다. [저장할파일명]은 원하는 위치의 파일명을 입력하면 된다.

/etc/init.d/mysqld 파일의  'start' 에서 아래 부분을 찾아 옵션을 추가한 후 서버를 restart하면 된다.

$bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file --log-slow-queries=slow_query.log  >/dev/null 2>&1 &


2. 설정 파일에 Slow Query Log를 적용하는 방법
my.cnf 파일에 설정사항을 입력할 수가 있다.
일반적으로 my.cnf 파일은 /etc 아래에 존재한다.
아래의 내용을 적당한 위치에 기재하고 서버를 restart하면 된다.

long_query_time = 3   # 3초 이상 시간이 걸리는 Query
log-slow-queries=[저장할파일명]


[저장할파일명]은 텍스트로 저장되므로 아무 에디터에서나 열수 있고, 쌓이는 내용은 어렵지 않으므로 쉽게 알 수 있을 것이다.
Posted by 달팽이맛나
,


date_add와 date_sub의 종류는

 second - 초를 추가 합니다(interval 1 second)

minute - 분을 추가 합니다.(interval 1 minute)
hour - 시간을 추가 합니다.(interval 1 hour)
day - 일을 추가 합니다.(interval 1 day)
month - 달을 추가 합니다. .(interval 1 month)
year - 년을 추가 합니다. .(interval 1 year)
minute_second - 분과 초를 추가 합니다. (interval "1:1" minute_second)
hour_minute - 시간과 분을 추가 합니다. (interval "1:1" hour_minute)
day_hour - 일과 시간을 추가 합니다. (interval "1 1" day_hour)
year_month - 년과 월을 추가 합니다. (interval "1-1" year_month)
hour_second - 시간과 분, 초를 추가 합니다. (interval "1:1:1" hour_second)
day_minute - 일과 시간, 분을 추가 합니다.(interval "1 1:1" day_minute)
day_second - 일과 시간, 분, 초를 추가 합니다.(interval "1 1:1:1" day_second)

Posted by 달팽이맛나
,

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.


cat  test.sql
create database aaa()


./mysql -u root -p **** < ./test.sql
Posted by 달팽이맛나
,
기본 포트 : 3306

1. mysql 설치시
./configure시 --with-tcp-port=20002

2. mysql 실행시
./mysqld_safe -P3306 &
Posted by 달팽이맛나
,


 if($strFind == 'ㄱ'){
  $strWhere = "and (uname RLIKE '^(ㄱ|ㄲ)' OR ( uname >= '가' AND uname < '나' )) order by uname";
 }else if($strFind == 'ㄴ'){
  $strWhere = "and (uname RLIKE '^ㄴ' OR ( uname >= '나' AND uname < '다' )) order by uname";
 }else if($strFind == 'ㄷ'){
  $strWhere = "and (uname RLIKE '^(ㄷ|ㄸ)' OR ( uname >= '다' AND uname < '라' )) order by uname";
 }else if($strFind == 'ㄹ'){
  $strWhere = "and (uname RLIKE '^ㄹ' OR ( uname >= '라' AND uname < '마' )) order by uname";
 }else if($strFind == 'ㅁ'){
  $strWhere = "and (uname RLIKE '^ㅁ' OR ( uname >= '마' AND uname < '바' )) order by uname";
 }else if($strFind == 'ㅂ'){
  $strWhere = "and (uname RLIKE '^ㅂ' OR ( uname >= '바' AND uname < '사' )) order by uname";
 }else if($strFind == 'ㅅ'){
  $strWhere = "and (uname RLIKE '^(ㅅ|ㅆ)' OR ( uname >= '사' AND uname < '아' )) order by uname";
 }else if($strFind == 'ㅇ'){
  $strWhere = "and (uname RLIKE '^ㅇ' OR ( uname >= '아' AND uname < '자' )) order by uname";
 }else if($strFind == 'ㅈ'){
  $strWhere = "and (uname RLIKE '^(ㅈ|ㅉ)' OR ( uname >= '자' AND uname < '차' )) order by uname";
 }else if($strFind == 'ㅊ'){
  $strWhere = "and (uname RLIKE '^ㅊ' OR ( uname >= '차' AND uname < '카' )) order by uname";
 }else if($strFind == 'ㅋ'){
  $strWhere = "and (uname RLIKE '^ㅋ' OR ( uname >= '카' AND uname < '타' )) order by uname";
 }else if($strFind == 'ㅌ'){
  $strWhere = "and (uname RLIKE '^ㅌ' OR ( uname >= '타' AND uname < '파' )) order by uname";
 }else if($strFind == 'ㅍ'){
  $strWhere = "and (uname RLIKE '^ㅍ' OR ( uname >= '파' AND uname < '하' )) order by uname";
 }else if($strFind == 'ㅎ'){
  $strWhere = "and (uname RLIKE '^ㅎ' OR ( uname >= '하')) order by uname";
 }else{
  $strWhere = "order by uname";
 } 

 $strQuery = "SELECT * FROM table_name WHERE ${strWhere}";
 $lnkResult = mysql_query($strQuery); 

Posted by 달팽이맛나
,

[MySQL] alter 명령어

DB/MYSQL 2009. 4. 2. 10:22

1. 테이블에 새로운 컬럼 추가

alter table tablename add column [추가할 컬럼명] [추가할 컬럼 데이타형]

2. 테이블에 컬럼타입 변경하기

alter table tablename modify column [변경할 컬럼명] [변경할 컬럼 타입]

3. 테이블에 컬럼이름 변경하기

alter table tablename change column [기존 컬럼명] [변경할 컬럼명] [변경할 컬럼타입]

4. 테이블에 컬럼 삭제하기

alter table tablename drop column [삭제할 컬럼명]

5. 테이블컬럼에 인덱스 주기

alter table tablename add index 인덱스명(인덱스를 줄 컬럼1 , 인덱스를 줄 컬럼2, ... )

6. 테이블컬럼에 인덱스 삭제하기

alter table tablename drop index 인덱스명;

7. 테이블에 Primary Key 만들기

alter table tablename add primary key (키를 줄 컬럼명1 , 키를 줄 컬럼명2, ...)

8. 테이블에 Primary Key 삭제하기

alter table tablename drop primary key;

9. 테이블명 바꾸기

alter table 기존테이블명 rename 새로운테이블명

10. 인덱스 생성

CREATE [UNIQUE] INDEX index_name ON tbl_name (col_name[(length]),... )

11. 인덱스 삭제

DROP INDEX index_name

Posted by 달팽이맛나
,