'MySQL'에 해당되는 글 25건
- 2013.09.04
- 2009.09.22
- 2009.05.29
- 2009.05.13
- 2009.03.25
- 2009.01.09
- 2008.12.29
- 2008.12.26
- 2008.12.22
- 2008.12.22
ERROR CODE 1435 : Trigger in wrong schema
A 라는 DB에서 B라는 DB로 테이블 리네임시 발생된 에러였다.
(ex. rename table A.tbl_a to B.tbl_a_bak;)
혹시나 trigger 가 있을까 해서, information_schema.trigger 를 뒤져 보았지만 보이지 않았다.
그런데, root로 들어가서 확인해 보니, 그 계정일 때 보이지 않던 trigger를 찾을 수 있었다.
결론 :
경험에 비추어 볼 때, trigger는 어딘가에 있다.
단지 당신의 계정에서 보이지 않을 뿐.
trigger를 생성한 계정으로 로그인하거나, root로 로그인해서 information_schema.trigger를 살펴보자.
[mysqld] # generic configuration options |
mysql> # 아버지 테이블 : 유니크한 키값을 갖는다. mysql> # 나쁜 아들 테이블 : 테이블 생성이 되지 않는다. |
mysql> show variables like '%date%'; +------------------------------+--------------+ | Variable_name | Value | +------------------------------+--------------+ | date_format | %Y-%m-%d | | datetime_format | %Y%m%d%H%i%s | | log_slave_updates | OFF | | low_priority_updates | OFF | | query_cache_wlock_invalidate | OFF | | sql_log_update | ON | | sql_low_priority_updates | OFF | | sql_safe_updates | OFF | +------------------------------+--------------+ 8 rows in set (0.02 sec) |
mysql> SET GLOBAL datetime_format ='%Y%m%d%H%i%s'; mysql> SHOW VARIABLES LIKE 'datetime_format'; |
그 동안 알고는 있었지만 정작 써먹지 않았던,
문자열 함수 몇개를 적고 넘어갈까 한다.
다년간에 걸친 니코틴과 카페인 섭취로 인하여 뇌기능이 비약적으로 떨어진 것을
메모를 통해 강제 각인 시키고자 한다 할까? (-_-);;
# 아래는 MySQL 한글 레펀런스의 문자열 함수 페이지를 링크해 둔 것이다.
<<Link :MySQL 한글 레퍼런스 - 스트링함수>>
# 함수 설명
1. LEFT, RIGHT
이눔의 함수들은 문자열의 오른쪽, 왼쪽을 끊어 오는 기능을 한다.
<<기억 안 났을 때>>
이걸 기억 못해서,
맨날 LEFT는 SUBSTRING 함수를 써서 일일이 끊어 왔고,
RIGHT는 LENGTH함수를 써서 그만큼 SUBSTRING으로 끊어오거나, REVERSE를 사용해서 비교했었다..
(ㅠ,.ㅠ)
<<사용방법>>
LEFT(문자열, 끊어올 문자 개수)
RIGHT(문자열, 끊어올 문자 개수)
<<실행화면>>
mysql> SELECT LEFT('1234567890', 5); mysql> SELECT RIGHT('1234567890', 5); |
mysql> SELECT SUBSTRING_INDEX('12345674890', '4',1); mysql> SELECT SUBSTRING_INDEX('12345674890', '4',2); |
mysql> SELECT TRIM(BOTH '0' FROM '0001200034000' ); mysql> SELECT TRIM(LEADING'0' FROM '0001200034000' ); mysql> SELECT TRIM(TRAILING '0' FROM '0001200034000' ); |
메모만 해두고 블로그에 적는 것을 까먹고 있었던 내용을 간만에 적어본다.
혹시 테이블 생성할 때, INT 에 괄호치고 값을 넣어 본 기억이 있는가?
아니면, 왜 이거 INT(8)이야? 하면서 테이블 생성자에게 화를 내본적이 있는가?
그렇다면....... 당신은 바보~ -0-/
헉...!!! ..... 내가 말을 잘 못했소... 돌던지지 말아주시오~~
(*,.ㅜ);;
자... 간단히 테스트를 해보자.
<< 예제 >>
##################################################################################################
# 1. 테스트 테이블 생성
CREATE TABLE int_test (
int_1 INT(1),
int_1_z INT(1) ZEROFILL,
int_5 INT(5),
int_5_z INT(5) ZEROFILL,
int_9 INT(9),
int_9_z INT(9) ZEROFILL,
int_11 INT(11),
int_11_z INT(11) ZEROFILL
)ENGINE=INNODB DEFAULT CHAR SET =UTF8;
# ---------------------------------------------------------------------------
# 2. 테스트 값 넣어보기
INSERT INTO int_test VALUES(1,1,1,1,1,1,1,1);
INSERT INTO int_test VALUES(12345,12345,12345,12345,12345,12345,12345,12345);
INSERT INTO int_test VALUES(1234567890,1234567890,1234567890,1234567890,1234567890,1234567890,1234567890,1234567890);
##################################################################################################
당신의 평소 생각대로라면,
# ------------------------------
SELECT *
FROM int_test;
# ------------------------------
의 결과는?
<< 수행 결과 >>
mysql> SELECT * FROM int_test; +------------+------------+------------+------------+------------+------------+------------+-------------+ | int_1 | int_1_z | int_5 | int_5_z | int_9 | int_9_z | int_11 | int_11_z | +------------+------------+------------+------------+------------+------------+------------+-------------+ | 1 | 1 | 1 | 00001 | 1 | 000000001 | 1 | 00000000001 | | 12345 | 12345 | 12345 | 12345 | 12345 | 000012345 | 12345 | 00000012345 | | 1234567890 | 1234567890 | 1234567890 | 1234567890 | 1234567890 | 1234567890 | 1234567890 | 01234567890 | +------------+------------+------------+------------+------------+------------+------------+-------------+ 3 rows in set (0.00 sec) |
SQL> INSERT INTO number_test VALUES(12,12); 1 개의 행이 만들어졌습니다. SQL> INSERT INTO number_test VALUES(12345,12345);
NUMBER_2 NUMBER_5 |
쿼리를 날리다 보면, 필요에 따라 그룹별로 순위를 매겨야 할 때가 있다.
이에 대해 오라클에서는 그러한 기능을 제공하는데,
아래가 바로 그 예이다.
[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 14 개의 행이 선택되었습니다. |
+-------+--------+-----------+------+------+ | 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) |
+----------------+----------------+----------+---------------+ | @val1:=@val1+1 | @val2:=@val1+1 | @val2:=0 | @val1=@val2+1 | +----------------+----------------+----------+---------------+ | 1 | 2 | 0 | 1 | +----------------+----------------+----------+---------------+ 1 row in set (0.00 sec) |
(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); |