CS/데이타베이스 13

[MySQL] Error Code: 1175. Safe Update Mode

발생하는 이유는 데이터 수정 또는 삭제 시 Key값을 이용해서만 가능하도록 설정되어 있기 때문이다. 해결 방안은 2가지가 있다. [방법1] workbench 설정 변경하기 1. [Edit] > [Preferences...] 에서 SQL Editor의 [Safe Updates (rejects UPDATEs and DELETEs with no restrictions)]를 해제 2. Workbench 재실행 후, 코드 실행 [방법2] 코드로 일시적으로만 변경하기 아래 코드를 작성 후, 수정/삭제 코드 실행 set sql_safe_updates = 0;

[SQL] 조인

1. 조인이란? - 여러 테이블에 분산되어 있는 데이터를 "테이블 간의 관계를 지어" 활용할 수 있도록 함 2. 조인 활용 1. 조인 검색 - 자연 조인 : FROM절에 관련 테이블들을 명세 - 조인 조건(= 조인 프레디킷) : WHERE절에 조인하는 조건을 반드시 작성 /*과목코드 CO423에 수강한 학생의 성명, 학과, 성적을 검색하라*/ SELECT 성명, 학과, 성적 FROM 학생, 수강 WHERE 학생.학번 = 수강.학번 AND 과목코드 = 'CO423'; /*열 이름을 단순화하기 위해 FROM절에 별칭 사용*/ SELECT 성명, 학과, 성적 FROM 학생 S, 수강 E WHERE S.학번 = E.학번 AND 과목코드 = 'CO423'; 2. 셀프 조인 : 자기 자신과 조인 /*같은 학과 학생..

[SQL] SubQuery 중첩질의문

1. SubQuery란? - Query문 안에 또 다른 Query문이 있는 것 - 중첩될 수 있는 Query문은 Select문만 가능하므로 SubSelect라 부르기도 함 - 소괄호 안에 표기 2. SubQuery 활용 1. 검색 1) 단일 값을 반환하는 경우 /* 학생 김철수와 같은 학과에 속하는 학생의 성명을 검색하라*/ SELECT 성명 FROM 학생 WHERE 학과 = (SELECT 학과 FROM 학생 WHERE 성명 = '김철수'); /*괄호에서 반환되는 결과는 '컴퓨터' 단일 값임*/ 2) 2개 이상의 값을 반환하는 경우(1) - 1개의 열로 이루어진 테이블을 반환 - 외부 질의문의 WHERE절에 (NOT) IN, ANY, ALL, EXISTS와 같은 연산자가 사용됨 연산자 설명 IN '=AN..

[SQL] 데이터 조작어(DML) 활용

1. SELECT - 데이터 검색하기 더보기 SQL과 이론적 관계형 데이터 모델 차이점 SQL은 똑같은 투플들을 자동으로 제거하지 않는다. 단, 사용자가 SELECT문에 "DISTINCT"를 명시할 때만 "투플의 중복을 제거"한다. 이론상의 관계형 모델은 "투플의 유일성"에 따라 똑같은 투플을 허용하지 않는다. 따라서, SELECT의 결과가 SQL과 이론상 결과가 다를 수 있다. 기본 구조 SELECT [ALL|DISTINCT] 열_리스트 FROM 테이블_리스트 [WHERE 조건] [GROUP BY 열_리스트 [HAVING 조건]] [ORDER BY 열_리스트 [ASC|DESC]]; # [ ]는 선택 가능 요소로 작성 안해도 되는 구간을 표시한 것, # 실제로 작성할 때는 괄호는 지우기 1. 테이블의 투..

[SQL] 데이터 정의어(DDL) 활용

[DDL 종류] CREATE, ALTER, DROP, RENAME 1. 데이터베이스 1. 데이터베이스 생성 create database 데이터베이스명; - 다국어 처리 create database test default character set utf8mb3 collate utf8mb3_general_ci; - 이모지 문자까지 처리 create database test default character set utf8mb4 collate utf8mb4_general_ci * character set = '코드' 저장 방식에 대한 규칙들의 집합 * collate = 저장된 값들을 '비교'할 때 사용하는 규칙들의 집합 2. 데이터베이스 변경 alter database 데이터베이스명 default charact..

[실습] 트리거

1. 삭제 연산 use academicDB; drop table IF EXISTS testTBL; create table testTBL (id int, txt varchar(20)); insert into testTBL values(1, '이멕스아이디'); insert into testTBL values(2, '애프터스쿨'); insert into testTBL values(3, '에이오에이'); drop trigger IF EXISTS testTrg; DELIMITER // create trigger testTrg AFTER DELETE ON testTBL FOR EACH ROW BEGIN set @msg = '가수 그룹이 삭제됨'; END // DELIMITER ; set @msg = ' '; ins..

7. SQL

1. SQL 개요 1. SQL이란? - 관계형 DBMS를 연구할 때, 관계형 대수와 관계형 해석을 기반으로 개발된 데이터 언어 - 관계형 데이터베이스의 "표준언어" - 모든 DBMS에서 사용 가능 - 대소문자는 구별하지 않음 (단, 데이터의 대소문자는 구분) *MySQL은 데이터 대소문자도 구분 x => binary()를 써서 대소문자를 구분하게 함 select id from employee where binary(first_name) = "steven"; 2. SQL의 특징 - SQL 구문은 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL)로 구분 - 형태 1) 대화형 질의어 형태(터미널을 통한 workbench, cmd) 2) SQL이 삽입된 형태(Java, C 등) 2. SQ..

[실습] Stored Procedure (저장 프로시저)

1. Stored Procedure란? - 쿼리문의 집합으로 어떤 동작을 일괄 처리하기 위한 용도로 사용 - 함수와 유사한 역할 - 모듈화시켜서 호출만 해서 실행 가능 2. 실습 1. procedure 생성 및 호출 use academicDB; drop procedure IF EXISTS studentProc; DELIMITER $$ create procedure studentProc() BEGIN select * from student; END $$ DELIMITER ; call studentProc();/*호출*/ +) 참고 : procedure의 더 많은 사용법으로 궁금하지 않으면, 바로 다음 단계로 가도 된다. 1) 입력 매개변수 2개인 경우 drop procedure IF EXISTS stude..

[실습] 고급 SQL SELECT문

0. 사용할 DB 구조 1. 고급 SQL SELECT문 설명 1. 서브쿼리(Sub Query) - 쿼리문 안에 쿼리문이 또 있는 것 /*학생 테이블에서 학과가 컴퓨터인 학생들만 검색하라*/ use academicdb; /*서브쿼리 사용 X*/ select * from student where sdept = "컴퓨터"; /*서브쿼리 사용 O*/ select * from student where sdept = (select sdept from student where sname = "김철수"); 하위 쿼리 (select dept from student where sname = "김철수")는 "컴퓨터"를 반환하므로 동일한 결과가 나온다. 여기서 하위 쿼리에서 둘 이상의 값을 반환할 경우에는 '='이 아닌 IN..

[실습] 키 생성

1. 기본키 생성 - table 정의할 때, 기본키로 지정할 애트리뷰트의 뒤에 'PRIMARY KEY'를 붙여준다. 2. 외래키 생성 FOREIGN KEY REFERENCES 테이블이름(애트리뷰트이름) - "테이블이름"의 "애트리뷰트이름"을 외래키로 쓰겠다. 3. 제약조건 1. PRIMARY KEY (기본키) - 중복 불가 - NULL값 입력 불가 2. UNIQUE - 중복불가 - NULL 허용 3. AUTO_INCREMENT를 지정한 열은 반드시 Primary나 Unique로 지정해줘야 한다. 예시 코드 use test; drop table if exists buy; CREATE TABLE buy ( num SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY, userID ..