반응형
반응형
반응형

 

MySQL 사용시 테이블 대소문자 구분하지 않고 사용하기

 

Server version: 5.7.13

 

MySQL 설정 확인

mysql> show variables like 'lower%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | OFF   |
| lower_case_table_names | 0     |
+------------------------+-------+

 

lower_case_table_names

 - 1 : 대소문자 구분하지 않고 사용.

 - 0 : 대소문자 구분하여  사용.

 

 

MySQL 설정 변경

- read ony 값이라 set 명령어로 변경할 수 없음.

mysql> set lower_case_table_names=1;
ERROR 1238 (HY000): Variable 'lower_case_table_names' is a read only variable

 

- my.cnf 파일 수정 후 재구동

$ vi /etc/my.cnf

[mysqld]
...
lower_case_table_names = 1
...

 

반응형
반응형

 

MySQL 사용자 생성 시 에러가 발생했습니다.

mysql> create user 'user1'@'%' identified by 'passwd1';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

 

패스워드가 정책 요구사항에 맞지 않다는 얘기입니다.

 

 

그럼 현재 정책이 어떤지 확인을 해보겠습니다.

mysql> show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.01 sec)

 

패스워드 정책이 MEDIUM 으로 설정되어 있는 것을 확인할 수 있습니다.

| validate_password_policy             | MEDIUM |

 

 

※ 패스워드 정책은 MySQL 문서에 따르면 이렇게 정의되어 있네요.

 

 

해결책

1. 현재 설정되어 있는 정책에 맞게 패스워드를 만든다.

mysql> create user 'user1'@'%' identified by '유저1!Pw처럼';

2. 현재 설정되어 있는 정책을 바꾼다.

# MySQL 8
mysql> set global validate_password.policy=LOW;
Query OK, 0 rows affected (0.00 sec)

# MySQL 5
mysql> set global validate_password_policy=LOW;
Query OK, 0 rows affected (0.00 sec)

 

 

반응형

'Database > Mysql' 카테고리의 다른 글

MySQL 테이블 대소문자 구분  (0) 2024.03.08
index 생성 기준?  (0) 2021.09.24
[API] 앱 버전 체크 시 사용할 만한 쿼리  (1) 2017.10.11
mysql 에서 unix time 구하기  (0) 2015.09.23
mysql bin log 삭제.  (0) 2014.05.15
반응형

 

ANSI Query(SQL)

  • ANSI(American National Standards Institute, 미국 국립 표준 협회)에서 제시한 SQL에 대한 보편적인 문법

Visual Representation of SQL Joins - CodeProject

https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

 


 

오라클 Join 예제.

 

테이블 : T_MEMBER

T_MEMBER 테이블

 

테이블 : T_DEPARTMENT

T_DEPARTMENT 테이블

 


 

Inner Join
-- (교집합) 각 테이블에서 조인 조건에 일치되는 데이터만 가져온다.

(ANSI) SELECT m.*, d.* FROM T_MEMBER m INNER JOIN T_DEPARTMENT d ON m.DEPT_IDX = d.DEPT_IDX;
(Oralce) SELECT m.*, d.* FROM T_MEMBER m, T_DEPARTMENT d WHERE m.DEPT_IDX = d.DEPT_IDX;

Inner Join

 

 

 

Outer Join
-- 조인 조건에 일치하는 데이터 및 일치하지 않은 데이터를 모두 SELECT 한다.
-- 조인 조건에 일치하는 데이터가 없다면 NULL로 가져온다.
-- 주(main) 테이블이 어떤 테이블인지가 중요하다.

 

  • Left Outer Join
(ANSI) SELECT m.*, d.* FROM T_MEMBER m LEFT OUTER JOIN T_DEPARTMENT d ON m.DEPT_IDX = d.DEPT_IDX ORDER BY m.MEM_ID;
(Oralce) SELECT m.*, d.* FROM T_MEMBER m, T_DEPARTMENT d WHERE m.DEPT_IDX = d.DEPT_IDX(+) ORDER BY m.MEM_ID;

Left Outer Join

 

  • Right Outer Join
(ANSI) SELECT m.*, d.* FROM T_MEMBER m RIGHT OUTER JOIN T_DEPARTMENT d ON m.DEPT_IDX = d.DEPT_IDX ORDER BY m.MEM_ID;
(Oralce) SELECT m.*, d.* FROM T_MEMBER m, T_DEPARTMENT d WHERE m.DEPT_IDX(+) = d.DEPT_IDX ORDER BY m.MEM_ID;

Right Outer Join

 

  • Full Outer Join
(ANSI) SELECT m.*, d.* FROM T_MEMBER m FULL OUTER JOIN T_DEPARTMENT d ON m.DEPT_IDX = d.DEPT_IDX ORDER BY m.MEM_ID;
(Oralce) X

Full Outer Join

 

 

Cross Join
-- 두 테이블 조인 시 가능한 모든 경우의 레코드를 SELECT 한다.
-- 경우의 수 : N * M

(ANSI) SELECT m.*, d.* FROM T_MEMBER m CROSS JOIN T_DEPARTMENT d ORDER BY m.MEM_ID, d.DEPT_IDX;
(Oralce) SELECT m.*, d.* FROM T_MEMBER m, T_DEPARTMENT d ORDER BY m.MEM_ID, d.DEPT_IDX;

Cross Join

 

Self Join
-- 테이블이 자기 자신을 마치 다른 테이블처럼 취급하여 조인한다.

(ANSI) SELECT m.*, d.* FROM T_MEMBER m JOIN T_MEMBER d ON m.MEM_ID = d.MEM_ID ORDER BY m.MEM_ID;
(Oralce) SELECT m.*, d.* FROM T_MEMBER m, T_MEMBER d WHERE m.MEM_ID = d.MEM_ID ORDER BY m.MEM_ID;

Self Join

 

 

 

반응형

'Database > Oracle' 카테고리의 다른 글

NLS 파라미터 확인  (0) 2020.11.17
JDBC 오류?? varchar 에 2000byte 이상 insert 하기.  (0) 2011.11.07
캐릭터셋 확인.  (0) 2011.10.20
오라클 구동 방법  (0) 2011.01.05
[Link] hierarchy query  (0) 2010.11.09
반응형

https://www.kyungyeon.dev/posts/66

 

Index 생성시 데이터의 중복이 적으면 적을수록 좋다. distinct foo 했을 때 랑 count(*) 가 비슷한 컬럼일수록 Index 효율이 높다.

Index의 손익분기점이라고 표현하는데, 상황에 따라 다르겠지만 보통 전체 데이터의 5~10%정도로 걸러지는 경우 Index를 사용했을 때 좋은 효율을 낼 수 있다.
이 내용은 테이블의 데이터가 100만건 정도일 때 조건이고, 1000만건~ 그 이상 많아진다면 손익분기점은 더 낮아진다. 1000만건 이상인 테이블에서는 보통 5%정도로 걸러져야 효율이 좋다.

그리고 20%가 넘어가는 경우 오히려 Table Full Scan이 더 빠를 수 있다.

그리고 당연하게도 활용도가 높은 즉, 많이 사용되는 컬럼을 Index로 사용하는게 좋을 것이다.

 

반응형
반응형

// replication 생성.
create replication [replication_name] with '[remote_ip]', [remote_port]
from [user.local_table_1] to [user.remote_table_1],
...
from [user.local_table_N] to [user.remote_table_N];


// replication host 추가.
ALTER REPLICATION [replication_name] ADD HOST ‘[remote2_ip]‘, [remote2_port];


// 등록된 호스트 개수, 이중화 테이블 개수 등 이중화 관련 정보
iSQL> SET VERTICAL ON;
iSQL> SELECT * FROM system_.sys_replications_;
REPLICATION_NAME         : REP1  
LAST_USED_HOST_NO        : 23                        // 마지막 Replication host_no
HOST_COUNT               : 2                         // Replication Host 갯수.
IS_STARTED               : 1 
XSN                      : 14919526761 
ITEM_COUNT               : 321                       // Replication Item 갯수.
CONFLICT_RESOLUTION      : 0 
REPL_MODE                : 0 
ROLE                     : 0 
OPTIONS                  : 0 
INVALID_RECOVERY         : 0 
REMOTE_FAULT_DETECT_TIME : 08-JUL-2021 
GIVE_UP_TIME             :  
GIVE_UP_XSN              :  
PARALLEL_APPLIER_COUNT   : 0

1 row selected.


// 원격 서버에 관련된 정보
iSQL> SET VERTICAL OFF;
iSQL> set colsize 15
iSQL> SELECT * FROM system_.sys_repl_hosts_;
HOST_NO     REPLICATION_NAME                HOST_IP                         PORT_NO     
---------------------------------------------------------------------------------------------
23          REP1                            10.1.3.2                        30300       
65          REP1                            10.1.4.2                        30300
2 rows selected.


// 이중화 송신 쓰레드 상태 확인.(active thread 정보)
iSQL> set colsize 15
iSQL> SELECT rep_name, status, net_error_flag, sender_ip, sender_port, peer_ip, peer_port FROM V$REPSENDER;
REP_NAME         STATUS               NET_ERROR_FLAG       SENDER_IP        SENDER_PORT PEER_IP          PEER_PORT   
-----------------------------------------------------------------------------------------------------------------------------
REP1             1                    0                    10.1.3.1         46268       10.1.3.2         30300       
1 row selected.



// Replication 테이블 정보.
iSQL> set colsize 25
iSQL> SELECT REPLICATION_NAME,LOCAL_USER_NAME, LOCAL_TABLE_NAME from SYSTEM_.SYS_REPL_ITEMS_;
...
321 rows selected.

반응형
반응형
반응형
반응형

# 세션 레벨.(현재 세션 정보)
SELECT parameter, value FROM nls_session_parameters;
 - alter session set nls_XXX 로 변경 가능.

# 인스턴스 레벨.
SELECT PARAMETER, value FROM nls_instance_parameters;
 = SELECT name, VALUE FROM V$PARAMETER where name like '%nls%';

# DB 레벨.(설치시 정보 - 변경 불가)
SELECT parameter, value FROM nls_database_parameters;
= SELECT PARAMETER, VALUE FROM V$NLS_PARAMETERS;
= SELECT name, value$ FROM sys.props$ where name like '%NLS%';

set pagesize 30set linesize 300

column PARAMETER format a30
column VALUE format a30

column value$ format a30

반응형

'Database > Oracle' 카테고리의 다른 글

오라클 JOIN / ANSI JOIN  (0) 2022.02.03
JDBC 오류?? varchar 에 2000byte 이상 insert 하기.  (0) 2011.11.07
캐릭터셋 확인.  (0) 2011.10.20
오라클 구동 방법  (0) 2011.01.05
[Link] hierarchy query  (0) 2010.11.09
반응형

 

-- 컬림 추가.

ALTER TABLE TEST_TB ADD COLUMN (update_time date);

 

-- 데이터 타입 변경.

ALTER TABLE TEST_TB MODIFY COLUMN (update_time varchar(10) NOT NULL);

 

-- default 설정 추가.

ALTER TABLE TEST_TB ALTER (update_time SET DEFAULT '1');

 

-- default 설정 삭제.

ALTER TABLE TEST_TB ALTER (update_time DROP DEFAULT);

 

-- 컬럼 이름 변경.

ALTER TABLE TEST_TB RENAME COLUMN update_time TO test_var;

 

-- 컬럼 삭제.

ALTER TABLE TEST_TB DROP COLUMN test_var;

 

반응형
반응형

Client - Server 에서 앱 버전 체크하는 API 에서 사용할 만한 query.


버전이 최대 3자리라고 가정하고...


로직은 이렇게.....


SET @ver = "10.22.1";

SET @len = LENGTH(@ver);

SET @loc0 = 0;

SET @loc1 = LOCATE('.', @ver);

SET @loc2 = LOCATE('.', @ver, @loc1 + 1);

SET @loc3 = LOCATE('.', @ver, @loc2 + 1);

SELECT 

-- 각각 자리별로 값 구하기.

--                SUBSTRING(@ver, (@loc0 + 1), IF(@loc1 <> 0, (@loc1 - @loc0 - 1), @len)) as 1st, 

-- IF(@loc1 <> 0, SUBSTRING(@ver, (@loc1 + 1), IF(@loc2 <> 0, (@loc2 - @loc1 - 1), @len)), 0) as 2nd, 

-- IF(@loc2 <> 0, SUBSTRING(@ver, (@loc2 + 1), IF(@loc3 <> 0, (@loc3 - @loc2 - 1), @len)), 0) as 3rd;



-- 각각 자리별로 값 구하기.(decimal type 으로 convert)

--                CONVERT(SUBSTRING(@ver, (@loc0 + 1), IF(@loc1 <> 0, (@loc1 - @loc0 - 1), @len)), DECIMAL) as 1st, 

-- CONVERT(IF(@loc1 <> 0, SUBSTRING(@ver, (@loc1 + 1), IF(@loc2 <> 0, (@loc2 - @loc1 - 1), @len)), 0), DECIMAL) as 2nd, 

-- CONVERT(IF(@loc2 <> 0, SUBSTRING(@ver, (@loc2 + 1), IF(@loc3 <> 0, (@loc3 - @loc2 - 1), @len)), 0), DECIMAL) as 3rd;



-- 실제 비교할 땐 어떻게 하지?? 각각 버전값이 0-99 까지 쓴다고 가정하고...

--                CONVERT(SUBSTRING(@ver, (@loc0 + 1), IF(@loc1 <> 0, (@loc1 - @loc0 - 1), @len)), DECIMAL) * 1000000 as 1st, 

-- CONVERT(IF(@loc1 <> 0, SUBSTRING(@ver, (@loc1 + 1), IF(@loc2 <> 0, (@loc2 - @loc1 - 1), @len)), 0), DECIMAL) * 1000 as 2nd, 

-- CONVERT(IF(@loc2 <> 0, SUBSTRING(@ver, (@loc2 + 1), IF(@loc3 <> 0, (@loc3 - @loc2 - 1), @len)), 0), DECIMAL) * 1 as 3rd;


-- 실제 비교할 땐 어떻게 하지?? 숫자값으로 변환해서 비교??

              ((CONVERT(SUBSTRING(@ver, (@loc0 + 1), IF(@loc1 <> 0, (@loc1 - @loc0 - 1), @len)), DECIMAL) * 1000000) + 

(CONVERT(IF(@loc1 <> 0, SUBSTRING(@ver, (@loc1 + 1), IF(@loc2 <> 0, (@loc2 - @loc1 - 1), @len)), 0), DECIMAL) * 1000) + 

(CONVERT(IF(@loc2 <> 0, SUBSTRING(@ver, (@loc2 + 1), IF(@loc3 <> 0, (@loc3 - @loc2 - 1), @len)), 0), DECIMAL) * 1)) as ver_sum;





실제 사용시에는 이렇게....



SELECT 

SUBSTRING(appVer, 1, IF(LOCATE('.', appVer) <> 0, (LOCATE('.', appVer) - 1), LENGTH(appVer))) as 1st, 

IF(LOCATE('.', appVer) <> 0, SUBSTRING(appVer, (LOCATE('.', appVer) + 1), IF(LOCATE('.', appVer, (LOCATE('.', appVer) + 1)) <> 0, (LOCATE('.', appVer, (LOCATE('.', appVer) + 1)) - LOCATE('.', appVer) - 1), LENGTH(appVer))), 0) as 2nd, 

IF(LOCATE('.', appVer, (LOCATE('.', appVer) + 1)) <> 0, SUBSTRING(appVer, (LOCATE('.', appVer, (LOCATE('.', appVer) + 1)) + 1), IF(LOCATE('.', appVer, (LOCATE('.', appVer, (LOCATE('.', appVer) + 1)) + 1)) <> 0, (LOCATE('.', appVer, (LOCATE('.', appVer, (LOCATE('.', appVer) + 1)) + 1)) - LOCATE('.', appVer, (LOCATE('.', appVer) + 1)) - 1), LENGTH(appVer))), 0) as 3rd from tbl_app;

SELECT

((CONVERT(SUBSTRING(appVer, 1, IF(LOCATE('.', appVer) <> 0, (LOCATE('.', appVer) - 1), LENGTH(appVer))), DECIMAL) * 1000000) + 

(CONVERT(IF(LOCATE('.', appVer) <> 0, SUBSTRING(appVer, (LOCATE('.', appVer) + 1), IF(LOCATE('.', appVer, (LOCATE('.', appVer) + 1)) <> 0, (LOCATE('.', appVer, (LOCATE('.', appVer) + 1)) - LOCATE('.', appVer) - 1), LENGTH(appVer))), 0), DECIMAL) * 1000) + 

(CONVERT(IF(LOCATE('.', appVer, (LOCATE('.', appVer) + 1)) <> 0, SUBSTRING(appVer, (LOCATE('.', appVer, (LOCATE('.', appVer) + 1)) + 1), IF(LOCATE('.', appVer, (LOCATE('.', appVer, (LOCATE('.', appVer) + 1)) + 1)) <> 0, (LOCATE('.', appVer, (LOCATE('.', appVer, (LOCATE('.', appVer) + 1)) + 1)) - LOCATE('.', appVer, (LOCATE('.', appVer) + 1)) - 1), LENGTH(appVer))), 0), DECIMAL) * 1)) as ver_sum from tbl_app;



반응형

'Database > Mysql' 카테고리의 다른 글

[mysql] Your password does not satisfy the current policy requirements  (0) 2023.08.01
index 생성 기준?  (0) 2021.09.24
mysql 에서 unix time 구하기  (0) 2015.09.23
mysql bin log 삭제.  (0) 2014.05.15
mysql dump  (0) 2014.03.24
반응형

초단위로 결과가 나옴.

ms 로 사용할때는 1000 을 곱해주면 됨.



mysql> select UNIX_TIMESTAMP('2015-09-21 15:50:00');

+---------------------------------------+

| UNIX_TIMESTAMP('2015-09-21 15:50:00') |

+---------------------------------------+

|                            1442818200 |

+---------------------------------------+

1 row in set (0.00 sec)




mysql> select from_unixtime(1442818200, '%Y-%m-%d %H:%i:%s') from dual;
+------------------------------------------------+
| from_unixtime(1442818200, '%Y-%m-%d %H:%i:%s') |
+------------------------------------------------+
| 2015-09-21 15:50:00                            |
+------------------------------------------------+
1 row in set (0.00 sec)



반응형

'Database > Mysql' 카테고리의 다른 글

index 생성 기준?  (0) 2021.09.24
[API] 앱 버전 체크 시 사용할 만한 쿼리  (1) 2017.10.11
mysql bin log 삭제.  (0) 2014.05.15
mysql dump  (0) 2014.03.24
[mysql] InnoDB  (1) 2014.03.24

+ Recent posts