일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- foreigen key
- SQL
- Java
- N+1
- 지연로딩
- bufferedInputStream
- Shared Lock
- 피연산자
- 프로그래머스 코테
- 오버라이딩
- InterruptedException
- 연산자와의 관계
- 오버로딩
- 멱등성
- 변수와 메서드
- exclusive lock
- delete
- 서버 스크립트
- 메세지 큐
- 컬렉션 프레임워크
- 즉시로딩
- git 기초
- 원시타입
- 추상메서드
- 프로그래머스
- select
- null/not null
- 변수와 상수
- 참조타입
- jsoup
- Today
- Total
[JAVA_Back-End]
[DATABASE] ALTER - 테이블 속성 설정 (+ 제약조건, view) 본문
< 이전 포스팅 정리 >
[DATBASE] DML(SELECT 서브쿼리) + DDL(CREATE/ALTER/DROP)
< 지난 포스팅 정리 > [DATABASE] DML - SELECT < 지난시간 정리 > 데이터베이스 => 데이터베이스 관리 시스템 (DBMS) - 대량/분산의 데이터를 효율적으로 관리, 운영하기 위해 사용 (파일시스템의 단점 보
thstnqls.tistory.com
데이터베이스화
쇼핑몰
고객, 상품, 주문
- 저장
ERP:offline => online(프로그램)
- 검색
=> KM
=>경영/ 경제(이론) => 구현(IT)
Extended ERP
CRM
SCM
SEM
=>Big DATA
DDL
create database
drop database
create table(*)
열이름 자료형(크기)
옵션 not null / default
alter table
컬럼 정의
옵션 => constraint
drop table
DML
select(*)
insert
update
delete
제약조건(contraint)
=> 무결성 검사
=> 입력 데이터 검사
1. 필수 입력 -> not null
2. 중복 방지 -> unique
3. 필수입력 + 중복방지 -> primary key (주키)
테이블 당 1개
=> 사원번호
+ auto_increment(sequence)
=> 자동 증가
=> 정수 타입 데이터 형태
4. primary key를 참조 -> foreign key (참조키, 외래키)
5. 값에 대한 검사 -> check (mariadb는 사용하지 않음)
기술 방법 (효과 같음)
컬럼 단위 제약조건
create table 테이블명(
열이름 자료형(크기) 제약조건기술,
열이름 자료형(크기) 제약조건기술,
..
)
테이블 단위 제약조건
create table 테이블명(
열이름 자료형(크기),
열이름 자료형(크기)
.. ,
제약조건기술,
제약조건기술
)
* 테이블의 제약조건을 확인
제약조건 테이블 실행 명령어
> source c:\mariadb\(sql파일이름 적기) //내 파일경로에 있는 sql파일을 source로 실행시키면 된다.
* null과 공백의 차이 (테이블을 만들 때 null로 설정해주어야 null이 들어감. 공백과는 다름)
[unique]
* 테이블 생성 시 unique 지정 (컬럼단위)
> create table dept_u1 (
-> deptno int(2) unique,
-> dname varchar(14),
-> loc varchar(13));
* 테이블 생성 시 unique 지정 (테이블 단위)
> create table dept_u2(
-> deptno int(2),
-> dname varchar(14),
-> loc varchar(13),
-> constraint unique(deptno));
[primary key] - 주 키
* 테이블 생성 시 primart key 지정 (컬럼단위)
> create table dept_p1(
-> deptno int(2) primary key,
-> dname varchar(14),
-> loc varchar(13));
* 테이블 생성 시 primart key 지정 (테이블단위)
> create table dept_p2(
-> deptno int(2),
-> dname varchar(14),
-> loc varchar(13),
-> constraint primary key(deptno));
[auto_increment] - 자동증가
> create table dept_a1(
-> deptno int(2) primary key auto_increment,
-> dname varchar(14),
-> loc varchar(13));
=> auto_increment는 제일 큰 숫자를 기준으로 + 된다.
[foreign key] - 외래키
=> 외래키를 생성할 때는 references로 항상 참조할 테이블의 primary key를 지정해야한다 (= 기본 테이블에는 primary key가 있어야 한다.)
> create table dept_p(
-> deptno int(2) primary key,
-> dname varchar(14),
-> loc varchar(13));
> create table emp_f(
-> empno int(4),
-> ename varchar(10),
-> job varchar(9),
-> deptno int(2),
-> constraint foreign key(deptno) references dept_p(deptno));
* 테이블에 데이터 삽입하기
=> 기본 테이블(primary key가 있는)에 데이터를 삽입 후 해당 데이터와 연결할 수 있는 데이터를 참조 테이블에 삽입하는 순서로 진행해야 에러가 나지 않는다.
=> 참조 중일때는 기본 테이블 값의 변경/삭제를 할 수 없다.
[check] - 값에 대한 결과
> create table dept_c1(
-> deptno int(2) not null,
-> dname varchar(14),
-> loc varchar(13),
-> check(deptno >=30));
복합키 -집합
=> 두 개 이상의 컬럼을 묶어서 키를 생성
=> primary key가 2개가 아닌 2개 묶어서 하나의 primary key로 인식해야한다.
> create table order_p(
-> pcode int(4),
-> ccode int(4),
-> orderdate datetime,
-> etc varchar(20),
-> constraint primary key(pcode,ccode));
테이블을 만들 때 무조건 부여해야하는 것.
1. not null
2. pk
null / not null 속성 추가/삭제
> alter table dept modify deptno int(2) not null; =>not null
> alter table dept modify deptno int(2); => null
unique 추가
> alter table dept add constraint unique(deptno);
unique 속성 삭제
> alter table 테이블이름 drop constraint 속성이름;
primary key 추가
> alter table dept add constraint primary key(deptno);
primary ket 속성 삭제
> alter table dept drop constraint primary key;
참조 테이블 확인 (FOREIGN KEY 확인)
참조테이블을 삭제할 때,
> alter table emp drop foreign key emp_ibfk_1; //속성 명
check 제약조건 추가
> alter table dept add constraint check(deptno);
check 삭제
> alter table dept drop constraint CONSTRAINT_1;
테이블 간의 관계에 의해서 데이터 조회
- 관계형 데이터베이스
pk, fk
모델링을 통해서 디자인 => ERD(Entity-relationship diagram)
디자인 코딩
엔터티 테이블
속성 컬럼
관계 키
Diagram
CA ERWin
MySQL Workbench
수동
https://ko.exerd.com/index.do#intro
eXERD
사용자 권한관리 업무에 따른 모델 접근 권한 관리(생성, 수정, 삭제)가 가능하며, 사용자별 권한 부여를 통해 데이터 모델의 보안성을 강화 시킵니다.
ko.exerd.com
ERDCloud
Draw ERD with your team members. All states are shared in real time. And it's FREE. Database modeling tool.
www.erdcloud.com
- 주문과 주문상세정보는 일대일 관계
- 고객정보 없이 주문이 들어갈 수 없으니 일대다 관계
- 상품정보 없이 주문이 있을 수 없으니 일대다 관계
E-R 다이어그램
- 개체(Entity) - 사각형으로 표현, 사각형의 상단에 개체의 이름을 기술.
- 속성(Attribute) - 사각형 내부에 기술, 사각형의 위 칸에는 기본키 속성, 아래 칸에는 일반 속성 기술
- 관계(Relationship) - 개체 간에 실선 또는 점선 표시
- 실선인 경우 -> 식별 관계 (Identifying) : 카디널리티가 1쪽인 개체의 기본키 속성이 M쪽인 사원 개체의 외래키로 구현되는 과정에서 사원의 기본키 속성으로 추가.
- 점선인 경우 -> 비식별 관계(Non-Identifying) : 카디널리티가 1쪽인 개체의 기본키 속성이 M쪽인 사원 개체의 외래키로 구현되는 과정에서 일반 속성으로 추가.
- 까마귀 발(Crow's foot) - 한 개의 부서에 여러 명의 사원이 소속되는 관계
- O기호 - 선택도. O이 붙어있는 경우 (선택) / O이 붙어있지 않은 경우 (필수)
- 사원 개체 쪽에 O이 있다면 각 부서에 사원이 한 명도 배정되지 않을 수도 있다는 의미
- 부서 개체 쪽에 O이 있다면 사원 중에서 어떠한 부서에도 소속되지 않은 사원이 있을 수 있음을 의미
VIEW
- select문을 저장한 이름
create view 뷰이름 as select문
뷰이름 - 가상 테이블처럼 활용 가능
- view에는 데이터가 실제로는 없음
*뷰 생성
> create view emp_vu1
-> as
-> select*from emp;
* table 타입으로 view 확인
> show full tables where table_type='view';
> show full tables;
== (같은 명령어)
> select table_name, table_type
-> from information_schema.tables
-> where table_schema='sample';
> show create view emp_vy1 \G //view 확인
*뷰 삭제
> drop view emp_vu1;
* 부서번호가 10인 데이터에 대한 view만들기
> create view emp_vu_10
-> as
-> select empno,ename,mgr,job
-> from emp where deptno=10;
* 필드의 이름을 arias로 변경
> create view emp_vu_20
-> as
-> select empno no, ename name,mgr,job
-> from emp
-> where deptno=20;
- 이름과 내용의 범위를 변경해서 view를 만들었을 때, 보안의 효과가 증대될 수 있다.
* 사원번호,사원이름, 급여 , 연봉정보를 조회할 수 있는 emp_sal이라는 view생성
> create view emp_sal
-> as
-> select empno,ename,sal,sal*12+ifnull(comm,0) ansal
-> from emp;
* 사원번호, 사원이름, 부서번호, 부서이름, 부서위치의 정보를 조회할 수 있는 emp_dept이라는 view생성
> create view emp_dept
-> as
-> select e.empno, e.ename,d.deptno,d.dname,d.loc
-> from emp e inner join dept d
-> on(e.deptno=d.deptno);
> show create view emp_vy1 \G 해당 명령어 결과물에 대한 분석이 필요
View: emp_vu_10
Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost`
SQL SECURITY DEFINER VIEW `emp_vu_10`
AS select `emp`.`empno`
AS `empno`,`emp`.`ename`
AS `ename`,`emp`.`mgr`
AS `mgr`,`emp`.`job`
AS `job` from `emp` where `emp`.`deptno` = 20
character_set_client: utf8mb4
collation_connection: utf8mb4_general_ci
'SQL' 카테고리의 다른 글
[MySQL] SELECT 데이터 추출하기 (0) | 2024.03.20 |
---|---|
[DATABASE] 정리 (0) | 2023.09.22 |
[DATABASE] 인덱스 / 사용자 생성 + 권한 부여 (0) | 2023.09.08 |
[DATBASE] DML(SELECT 서브쿼리) + DDL(CREATE/ALTER/DROP) (0) | 2023.09.06 |
[DATABASE] DML - SELECT (0) | 2023.09.05 |