일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 스토어드 프로시저
- 연관관계
- shared lock
- JPQL
- FetchType
- 낙관적락
- PS
- 즉시로딩
- 이진탐색
- CHECK OPTION
- dfs
- BOJ
- 일대다
- 다대일
- 스프링 폼
- 힙
- SQL프로그래밍
- 비관적락
- 백트래킹
- 다대다
- 연결리스트
- 동적sql
- 데코레이터
- execute
- exclusive lock
- querydsl
- 지연로딩
- fetch
- 유니크제약조건
- eager
- Today
- Total
목록SQL (23)
흰 스타렉스에서 내가 내리지
뷰는 테이블처럼 데이터를 가지고 있지는 않다. 뷰의 실체는 SELECT 문으로 만들어져 있기 때문에, 뷰에 접근하는 순간 SELECT 가 실행되고 그 결과가 화면에 출력되는 방식이다. 비유하자면 바탕화면의 '바로 가기 아이콘' 과 비슷하다. 뷰를 만드는 형식 CREATE VIEW 뷰_이름 AS SELECT ~~; CREATE VIEW v_member AS SELECT mem_id, mem_name, addr FROM member; 뷰는 기본적으로 '읽기 전용' 으로 사용되지만, 뷰를 통해서 원본 테이블의 데이터를 수정할 수도 있다. # 뷰를 사용하는 이유 보안에 도움이 된다 예시 : 아르바이트생에게 회원 조회 작업을 시킨다. 그런데 아르바이트생이 회원 테이블에 접근할 수 있도록 한다면 중요한 개인 정보까..
기본값(default) 정의는 값을 입력하지 않았을 때 자동으로 입력될 값을 미리 지정해 놓는 방법이다. 예를 들어 키를 입력하지 않고 기본적으로 160이라고 입력되도록 하고 싶다면 다음과 같이 정의할 수 있다. CREATE TABLE member ( ... ... height TINYINT UNSIGNED NULL DEFAULT 160, ... ); ALTER TABLE 사용 시 열에 DEFAULT 를 지정하기 위해서는 ALTER COLUMN 문을 사용한다. 예를 들어, 다음과 같이 연락처의 국번을 입력하지 않으면 자동으로 02가 입력되도록 할 수 있다. ALTER TABLE member ALTER COLUMN phone SET DEFAULT '02'; 기본 값이 설정된 열에 기본값을 입력하려면 def..
체크 제약조건은 입력되는 데이터를 점검하는 기능을 한다. 예를 들어, 키에 마이너스 값이 입력되지 않도록 하거나, 연락처의 국번에 02, 031, 062 중 하나만 입력되도록 할 수 있다. 키를 100 이상의 값만 입력되도록 하기 CREATE TABLE member ( mem_id CHAR(8) NOT NULL PRIMARY KEY, mem_name VARCHAR(10) NOT NULL, height TINYINT UNSIGNED NULL CHECK (height >= 100) ); 필요하다면 테이블을 만든 후에 ALTER TABLE 문으로 제약 조건을 추가해도 된다. 연락처의 국번에 02, 031, 062 중 하나만 입력되도록 하기 ALTER TABLE member ADD CONTRAINT CHECK ..
# 스토어드 프로시저 DELIMITER $$ CREATE PROCEDURE myProcedure() BEGIN END $$ DELIMITER ; CALL myProcedure(); 세미콜론 (;) 으로는 SQL 의 끝인지, 스토어드 프로시저의 끝인지 구별할 수 없어서 $$ 를 사용한다. * 스토어드 프로시저 매개변수 # 1. IN - 프로시저에 값을 전달한다. DELIMITER $$ CREATE PROCEDURE myProc(IN name VARCHAR(255)) BEGIN SELECT * FROM Member m WHERE m.name = name; END $$ DELIMITER ; -- CALL myProc('홍길동'); # 2. OUT - 프로시저의 값을 반환한다. - 초기값은 프로시저 내에서 NU..
# 내부 조인 두 테이블에 모두 있는 내용만 조인되는 방식이다. 만약, 양쪽 중에 한 곳이라도 내용이 있을 때 조인하려면 외부 조인을 사용해야 한다. SELECT * FROM member m INNER JOIN article a ON m.id = a.mem_id WHERE a.title='~~' INNER JOIN 에서 INNER 를 생략하고 JOIN 만 써도 INNER JOIN 으로 인식한다. # 외부 조인 한 쪽에만 데이터가 있어도 결과가 나온다. SELECT FROM OUTER JOIN ON [WHERE 검색 조건]; LEFT OUTER JOIN 왼쪽 테이블의 내용이 모두 출력된다. LEFT JOIN 이라고 써도 된다. RIGHT OUTER JOIN 오른쪾 테이블의 내용이 모두 출력된다. FULL ..
# 함수를 이용한 명시적인 변환 (explicit conversion) 데이터 형식을 변환하는 함수는 CAST(), CONVERT() 이다. CAST ( 값 AS 데이터_형식 [ (길이) ] ) --- CONVERT ( 값, 데이터_형식 [ (길이) ] ) CAST() 나 CONVERT() 함수 안에 올 수 있는 데이터 형식은 CHAR, SIGNED, UNSIGNED, DATE, TIME, DATETIME 등이다. SIGNED 는 부호가 있는 정수, UNSIGNED 는 부호가 없는 정수이다. * 예제 SELECT AVG(price) AS '평균 가격' FROM buy; 가격을 실수보다는 정수로 보고 싶을 때, 데이터 형 변환을 사용한다. SELECT CAST(AVG(price) AS SIGNED) '평균..
# SQL 에서의 변수 SQL 도 다른 일반적인 프로그래밍 언어처럼 변수를 선언하고 사용할 수 있다. 변수는 MySQL 워크벤치를 재시작할 때까지는 유지되만, 종료하면 없어진다. SET @txt = '도시 이름 : '; SET @population = 8000000; SELECT @txt, Name, Population FROM city WHERE Population >= @population; # LIMIT 에는 사용할 수 없다 이 SQL 은 SELECT 문에서 오류가 발생한다. LIMIT 에는 변수를 사용할 수 없기 때문이다. # LIMIT 에 변수를 사용할 수 있게 하는 편법 → PREPARE 와 EXECUTE SET @txt = '도시 이름 : '; SET @population = 8000000;..
만약 몇억 거느이 데이터가 있는 대용량의 테이블이 더 이상 필요 없다면 어떻게 삭제하는 것이 좋을까? 1. DELETE - 삭제가 오래 걸린다. 2. DROP - 테이블 자체가 삭제된다. - 따라서 순식간에 모두 삭제된다. 3. TRUNCATE - DELETE 와 동일한 효과를 내지만 속도가 매우 빠르다. DROP 은 테이블이 아예 없어지지만, DELETE 와 TRUNCATE 는 빈 테이블을 남긴다. TRUNCATE 는 DELETE 와 달리 WHERE 문을 사용할 수 없다. 그러므로 TRUNCATE 는 조건 없이 전체 행을 삭제할 때만 사용된다. # 결론 대용량 테이블의 전체 내용을 삭제할 때 테이블 자체가 필요 없을 경우에는 DROP 으로 삭제하고, 테이블의 구조는 남겨놓고 싶다면 TRUNCATE 로 ..
예제 테이블로, MySQL 에서 제공하는 world 데이터베이스를 이용한다. CREATE TABLE city_popul (city_name CHAR(35), population INT); INSERT INTO city_popul SELECT Name, Population FROM world.city; 주의할 점은 SELECT 문의 열의 개수가 INSERT 할 테이블의 열 개수와 같아야 한다는 점이다. DESC 명령으로 테이블 구조를 확인하여 새로운 테이블을 만든다
# 자동으로 증가하는 AUTO_INCREMENT AUTO_INCREMENT 는 열을 정의할 때 1부터 증가하는 값을 입력해준다. 단, AUTO_INCREMENT 로 지정하는 열은 꼭 PRIMARY KEY 로 지정해줘야 한다. CREATE TABLE member ( member_id INT AUTO_INCREMENT PRIMARY KEY ); # AUTO_INCREMENT 로 입력되는 다음 값을 100 부터 시작하게 하기 ALTER TABLE MEMBER AUTO_INCREMENT=100; INSERT INTO member VALUES (NULL); SELECT * FROM member; # AUTO_INCREMENT 로 입력되는 다음 값을 1003, 1006, 1009, ... 로 3씩 증가하도록 설정하..