자주 쓰는 MariaDB, MySQL 쿼리 정리
MySQL DDL 쿼리
테이블 기본키 추가
ALTER TABLE 테이블명 ADD PRIMARY KEY (`컬럼1`, `컬럼2`);
테이블 기본키 삭제
ALTER TABLE 테이블명 DROP PRIMARY KEY;
테이블 외래키 추가
ALTER TABLE 테이블명 ADD CONSTRAINT 제약조건명 FOREIGN KEY(컬럼명) REFERENCES 참조테이블명(참조컬럼명) ON DELETE CASCADE ON UPDATE CASCADE;
ON DELETE CASCADE 옵션은 참조테이블의 참조컬럼 값이 삭제되면, 참조하던 ROW들을 자동 삭제해 줍니다.
외래키 추가 시 에러메세지
Cannot add or update a child row: a foreign key constraint fails
외래키로 지정한 컬럼의 값으로 참조테이블 컬럼에 없는 값이 저장되어 있으면 외래키를 추가할 수 없습니다.
전체 INSERT문 추출하고 외래키 지정 후 제약조건에 맞는 INSERT문들만 실행하면 됩니다.
테이블 외래키 삭제
ALTER TABLE 테이블명 DROP FOREIGN KEY 제약조건명;
테이블 컬럼 추가
ALTER TABLE 테이블명 ADD COLUMN 컬럼명 데이터타입;
특정 컬럼 뒤 추가
ALTER TABLE 테이블명 ADD COLUMN 컬럼명 데이터타입 AFTER 특정컬럼명;
테이블 컬럼 삭제
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
MySQL DQL 쿼리
INNER JOIN
SELECT * FROM 테이블1 A
INNER JOIN 테이블2 B ON A.키 = B.폴인키
조인 조건을 만족하는 테이블 A, 테이블 B 행들을 결합합니다.
게시판 댓글을 조회할 때 이용하면 좋습니다.
LEFT OUTER JOIN (=LEFT JOIN)
SELECT * FROM 테이블1 A
LEFT OUTER JOIN 테이블2 B ON A.키 = B.폴인키
왼쪽 테이블을 기준으로 우측 테이블 컬럼들을 조인합니다.
테이블1에 2건, 테이블2에 5건 있으면 총 5건의 결과가 나옵니다.
LEFT JOIN 그룹화
SELECT * FROM 테이블1 A
LEFT OUTER JOIN 테이블2 B ON A.키 = B.폴인키
GROUP BY A.키
테이블1에 2건, 테이블2에 5건 있으면 테이블1의 키컬럼 값을 그룹화하여 총 2건의 결과가 나옵니다.
테이블2의 컬럼 값은 무작위로 선택되어 나타나며, MIN 또는 MAX 함수로 제어할 수 있습니다.
전체 테이블 row 수 확인
SELECT
table_name,
table_rows
FROM
information_schema.tables
WHERE
table_schema = 'DB명'
AND
table_rows > 0
ORDER BY table_name;
숫자형 캐스팅
SELECT * FROM 테이블명
WHERE 컬럼명 = CAST(#{파라미터명} AS UNSIGNED)
CAST 함수로 파라미터를 숫자 변환 후, 컬럼 값과 일치하면 조회합니다.
특정 컬럼 데이터 순으로 정렬
ORDER BY FIELD (컬럼명, "1순위", "2순위", "3순위")
조건에 따른 값 출력
SELECT
CASE
WHEN 컬럼명='조건1' THEN '값1'
WHEN 컬럼명='조건2' THEN '값2'
ELSE '값3'
END AS '출력컬럼명'
FROM 테이블명
JSON 값 추출
SELECT
컬럼명 ->> '$."JSON키"', -- JSON 값에서 양 옆의 ""를 제거하고 출력
json_extract(컬럼명, '$.JSON키'), -- JSON 값 그대로 출력
json_value(컬럼명, '$.JSON키') -- JSON 값 문자열 변환하여 출력
FROM
테이블명
JOIN으로 조회된 행 DELETE
DELTE
a
FROM
테이블1 a
INNER JOIN
테이블2 b
ON
b.키열 = a.키열
WHERE
b.열 = '값'
DELETE문 실행 전에는 항상 FROM 이하 구문을 SELECT 해서 어떤 데이터를 삭제하는지 확인해야 합니다.
데이터 INSERT문
INSERT INTO 테이블명 (
컬럼명1,
컬럼명2
) VALUES (
'값1',
'값2'
);
INSERT INTO DB명.테이블명 시 에러
SQL Error [1142] [42000]: (conn=1043447) INSERT command denied to user 'DB명'@'10.0.0.4' for table '테이블명'
개발 DB명과 운영 DB명이 다른 경우, 쿼리에 DB명이 들어가면 위와 같은 에러가 날 수 있습니다.
쿼리에서 DB명을 제거하고, ‘INSERT INTO 테이블명’으로 실행하면 됩니다.
MySQL DML 쿼리
UPDATE 문
UPDATE 테이블명
SET 컬럼명 = '변경값'
WHERE 컬럼명 = '값'
조회 조건에 해당하는 row에 대해 컬럼 값을 변경합니다.
Leave a comment