# 계정 확인
select user, host from mysql.user;
# 권한 부여
GRANT ALL PRIVILEGES ON [DB 이름].* TO '[계정 이름]'@'[계정 host]';
FLUSH PRIVILEGES;
# 권한 확인
SHOW GRANTS FOR '[계정 이름]'@'[계정 host]';
*MySQL에서 bulk insert를 할 때 DB에서 받아 줄 수 있는 최대치를 구하기 위함
*MySQL은 최대 용량으로 DB가 받아 줄 수 있는 양을 결정(개인적으로 확인했을 때)
# 확인 방법
SHOW VARIABLES LIKE 'max_allowed_packet';
# 테스트
INSERT INTO cm_max VALUES ( REPEAT('A', 10000000), REPEAT('가', 10000000));
# 10000000 은 10MB 정도, 만약 max_allowed_packet가 10MB 이상이면 max_allowed_packet 을 줄여서 테스트
# -> SQL Error [1301] [HY000]: (conn=257936) Result of repeat() was larger than max_allowed_packet (16777216) - truncated
# max_allowed_packet 줄이는 방법
SET GLOBAL max_allowed_packet = 128 * 1024 * 1024;
CREATE TABLE mysql_test_a (
id VARCHAR(30),
name VARCHAR(30) NOT NULL
);
INSERT INTO `mysql_test_a` (`id`, `name`)
VALUES ('1', 'abab');
INSERT INTO `mysql_test_a` (`id`, `name`)
VALUES ('2', 'John');
INSERT INTO `mysql_test_a` (`id`, `name`)
VALUES ('3', 'dd');
INSERT INTO `mysql_test_a` (`id`, `name`)
VALUES ('4', 'bb');
INSERT INTO `mysql_test_a` (`id`, `name`)
VALUES ('5', 'aa');
INSERT INTO `mysql_test_a` (`id`, `name`)
VALUES ('2', 'omokoe');
INSERT INTO `mysql_test_a` (`id`, `name`)
VALUES ('6', 'John');
SQL Query
SELECT * FROM mysql_test_a a
where exists (
select 1 from mysql_test_a b
where a.id = b.id
and b.name = 'John'
);
결과
'2', 'John' '2', 'omokoe' '6', 'John'
왜 '2', 'omokoe' 가 결과 값에 포함되어 있을까?
앞서 말했드이 먼저 쿼리를 조회하고 나서 서브쿼리를 조회 하는데, 서브쿼리 b 전체 행을 조회합니다. b 테이블에 id 값이 2인데 name에 값이 John인 레코드가 있으면 return True가 되고 레코드에 출력되는 것입니다. 그래서 '6', 'John'도 출력되는 것입니다.