1.group_concat
예: name을 기준으로 그룹핑 시 ...
select name from `user`
group by name;
select name,group_concat(code) from `user`
group by name;
2.char_length
예: 특정문자열 길이를 가져와서 다시 정렬하고 싶으면...
select * from brand where name like '%석삼%'
order by char_length(name) asc limit 5;
3.locate
select * from brand where name like '%석삼%'
order by char_length(name) asc, locate('석삼',name) asc limit 5,5;
update brand set name=REPLACE(name,'A','B')
where id=1;
update brand set name=REPLACE(name,' ','') where name like ' %';
update brand set name=REPLACE(name,' ','') where name like '% ';
5.now
select now() from brand limit 1;
select now(3) from brand limit 1;
6.insert into ... select
실무에서 가끔 데이터 insert가 필요하다 . 일반적으로 아래와 같이 하겠지?
INSERT INTO `brand`(`id`, `code`, `name`, `edit_date`)
VALUES (5, '108', '석삼', '2022-12-21 19:42:21');
INSERT INTO `brand`(`id`, `code`, `name`, `edit_date`)
select null,code,name,now(3) from `order` where code in ('004','005');
7.insert into ... ignore
INSERT INTO `brand`(`id`, `code`, `name`, `edit_date`)
VALUES (123, '108', '석삼', now(3));
INSERT INTO `brand`(`id`, `code`, `name`, `edit_date`)
select null,'108', '석삼',now(3)
from dual where not exists (select * from `brand` where name='석삼');
INSERT ignore INTO `brand`(`id`, `code`, `name`, `edit_date`)
VALUES (123, '108', '석삼', now(3));
8.select ... for update
begin;
select * from `user` where id=1
for update;
// .....
// 업무로직 처리
// .....
update `user` set score=score-1 where id=1;
commit;
9.on duplicate key update
예: 7번과 비슷한 상황 ,입력하기전 조회를 하고 해당 컬럼에 데이터가 있으면 pass, 없으면 insert 하는 상황이 이다.
병렬환경이 아니라면 위 문제7 과 동일하게 처리할수 있지만 병렬처리 상황에서는 데이터 중복 상황이 발생한다. 물론 중복데이터 입력 방지를 위한 여러가지 방법이 있다. unique index 를 추가한다던지...
이때 사용할수 있는게 바로 on duplicate key updat 이다.
insert 전에 PK 혹은 unique index 있는지를 판단하는데 , 없으면 insert 하고 있으면 update 한다.
INSERT INTO `brand`(`id`, `code`, `name`, `edit_date`)
VALUES (123, '108', '석삼', now(3))
on duplicate key update name='석삼',edit_date=now(3);
병렬환경에서 on duplicate key update 사용시 dead lock 상황이 발생할수 있니 실제 상황에 맞게 주의하여 사용하여야 한다.
10.show create table
desc `order`;
show index from `order`;
show create table `order`;
11.create table ... select
create table order_2022121819 like `order`;
insert into order_2022121819 select * from `order`;
12.explain
뭐 이건 다 알겠지? 쿼리 분석시....
explain select * from `order` where code='002';
13.show processlist
쿼리수행후 너무 속도가 느리다(진중라면) 해당명령어로 진행과정을 살펴볼수 있다.
mysql> show processlist;
+---------+------+-----------+-------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+---------+------+-----------+-------+---------+------+-------+------------------+
| 2212724 | root | localhost | test | Sleep | 70 | | NULL |
| 2212286 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+---------+------+-----------+-------+---------+------+-------+------------------+
2 rows in set (0.00 sec)
프로세스를 찾았으니 죽여야지?
mysql> kill 2212724;
Query OK, 0 rows affected (0.00 sec)
mysql> show processlist;
+---------+------+-----------+-------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+---------+------+-----------+-------+---------+------+-------+------------------+
| 2212286 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+---------+------+-----------+-------+---------+------+-------+------------------+
2 rows in set (0.00 sec)
- Id : Process id ,MySQL 이 관리하는 thread 번호
- User : Thread에 접속하고 있는 MySQL 사용자
- Host : 사용자가 접속하고 있는 호스트명 , IP 주소
- Command : Thread의 현재 command 상태 .
- Time : Process가 현재 command상태에서 동작 시간
- State : Thread의 상태에 대해 사람이 읽을 수 있는 형태의 정보
Info : 현 실행되고 있는 SQL ."SHOW PROCESSLIST" 최대 100자까지 표시전부 표시하려면 "SHOW FULL PROCESSLIST"
14.mysqldump
mysqldump -h 172.0.0.1 -u root -proot dbname > backup.sql
mysqldump -h{ip} -P{port} -u{user} -p{password} {parameter1},{parameter2}.... > {document}.sql
뭐 너무 유명한? 명령어라 어느정도 개발?운영?서버 만져본 분이라면 다 아는 ...
이글의 타이틀과 약간 어긋난 놈이긴한데 일단 적어본다.
끝!
'DB > RDBMS' 카테고리의 다른 글
mysql8.x Sequel Pro 연결실패 (0) | 2022.12.09 |
---|---|
Mysql Incorrect string value: '\xE5\xxxx\xxxxx' 'xxx' at row 1 (0) | 2022.12.08 |
invalid default value for '컬럼명' (0) | 2022.12.08 |