-
[mysql] DDL,DML,제약조건SQL/MySQL 2021. 7. 23. 17:34
SQL ( MySQL 사용 )
1. 언어종류
자바는 컴파일언어(한번 변수형태 정하면 못바꿈)
컴파일언어: 미리 변수형을 계획해 정해줘야 검사시 문제 없다.
자바스크립트는 인터프리터언어(볼때마다 알아서 바꿔줌)
인터프리터언어: 검사할 때 확인해서 변수형을 정해줌.
>>Database의 SQL은 컴파일언어.(자료형을 지정 및 변경 불가하다.)
2. Database 의 정의
MySQL 사용
Database: table(표)들의 정보집합.
DBMS: Database를 관리할 수 있는 프로그램
(MySQL: DBMS 프로그램중 하나)
SQL: DBMS 프로그램에서 사용할 언어
MySQL과 함께 깔리는 MySQL Command Line Client: MySQL과 별개의 프로그램.
직접 MySQL에 접속하지 않고 커맨드라인에 입력하면 MySQL에 입력을 전달해준다.
마치 나중에 DBMS에 JSP를 연결하듯이, 커맨드라인도 이렇게 연결된 별개의 프로그램.
MySQL: install의 64bit 다운로드 ->
3. SQL 명령어
: command line으로 실습.
SQL = DDL + DML + DCL
DDL
- DB
show, create, drop
1. 존재하는 DB전부 검색
show databases;
2. DB만들기
create database mydb1;
3. DB없애기
drop database mydb1;
- table
create, drop, show, use, desc
1. table 만들기
create table tbl1
(
col1 int,
col2 varchar(10)
);
//두 개의 열, SQL에서는 자료형이 뒤에 선언됨.
* int: SQL에서는 int가 long(큰정수)정도는 된다.
* varchar(최대글자): 문자가변길이, 최대글자 안에서 길이 변경 가능
2. table 삭제
drop table tbl1;
3. 존재하는 table 전부 검색
show tables;
4. 사용자DB 선언(앞으로 테이블등의 편집을 db이름 따로 선언안하고 자동으로 인식하게 됨)
use mydb1;
5. table의 목록검색(위에서 만든 열을 다 보여줌)
desc tbl1;
(desc = description 묘사)
DML
한줄쓰기(행삽입), 한줄삭제, 열값변경, 표 읽기
Insert , delete , update ,select
from
1. table에 값을 넣기(열에 맞춰 값 지정 후 넣기)
insert into tbl1(col1, col2) values(1,'aaa');
DB의 문자, 문자열 둘다 : ' ' (작은따옴표)를 쓴다.
2. 표 읽기
select * from tbl1;
select col1,col2 from tbl1;(위와동일)
select col1 from tbl1;(col1하나만)
* : 모든 열
select로 결국 표를 가져옴(어떤 열을 선택해서 행을 가져오냐는 조건을 써서)
select * from tbl1 where(조건)
: tbl1의 모든 열중에서 조건에 만족하는 행만 가져와 표로 만들기.
3. 열값 변경
update tbl1 set col2='bbb';
:tbl1의 모든 행에서 열 col2의 값 바꾸기
update tbl1 set col2 = 'bbb' where~;
:조건에 맞는 행중에서 col2의 값 바꾸기
4. 행삭제
delete from tbl1;
:tbl1의 모든 행을 삭제
delete from tbl1 where col1= '3';
:tbl1중에서 행col1의 값이 3인 행만 지워라.
전체구조:
UI화면(html,js) - 작업처리(Java,객체지향) - 데이터보관(DB)
SQL
행 : 실체(Entity, 설계단계?), 튜플(tuple)
var v.s varchar
var: 고정길이 문자열
최대길이 설정후 내용이 적게 들어가도 사용하는 공간은 최대길이만큼
varchar: 가변길이 문자열
최대길이 설정후 내용이 적게 들어가면 그 길이만큼 줄어듬
왜 varchar만 안쓰고 char를 쓸까?
char는 최대길이설정한 만큼 공간을 사용하니, 일정한크기이다.
이는 대용량 정보(검색같은)에 varchar보다 더 빠르고 유리하다.
보통 primary key 설정한 값에 varchar보다는 char를 쓰는게 좋다.
제약조건
1) 제약조건:
FOREIGN KEY- REFERENCES 참조테이블(참조속성) = 외래키
not null = 값을 비울 수 없다.
null = 값을 비워도 된다.
unique = 하나의 테이블 내에서 한번만 나옴, 주로 대체키 설정 시 사용됨(값중복 막음)
2) 그외 조건
- auto_increment: 자동으로 1씩증가(따로지정도가능)
- default: 자동으로 지정값주기(따로지정도가능)
이렇게 모든 값이 자동, 기본값(default) 설정되어 있다면 위처럼 ()아무것도없이 행을 넣어도 값이 다 지정된다.
배운 변수형
TIMESTAMP - format: YYYY-MM-DD HH:MI:SS = 시간변수
시간변수에 넣을 수 있는 값: current_timestamp: 현재날짜&시간
ALTER문
테이블의 열을 추가(add), 삭제(drop), 변경(alter)
select절
select 5+3; +-----+ | 5+3 | +-----+ | 8 | +-----+
선택한 테이블을 조건에 맞춰 다시 테이블로 나타낸다.
테이블이 아닌 값을 선택해도 표를 만들어준다.
즉 select문은 선택한 열을
열의 이름과 함께 들어간 튜플을 테이블 형태로 나타내 준다.
열의 이름에는 위처럼 수식이 제목이 될 수도 있다.
select distinct 절
select로 선택한 열에 들어간 값중 중복된 값은 제외되어 표로 나온다.
select count 절
select로 선택한 열에 들어간 값의 숫자가 표로 나온다.
열의 이름은 count로 된다.
where절
보통 insert를 제외한 DML 언어는(delete, update, select) 선택된 열에 대한 모든 행을 가져온다.
where절은 이 행을 지정하는 조건문이다.
where절 행의 조건에 맞는 튜플들만 select에서 지정한 열로 표로 만든다.
연산자
= : 같다
<>: 같지 않다
나머지 크다작다는 자바와 같음
BETWEEN: 앞의 값과 뒤의 값의 사이 연산자
LIKE:
's%' 첫글자가 s면 됨
'%s' 맨뒷글자가 s면 됨
'%s%' 아무대나 s면 됨
%는 없어도되고 많아도된다는 의미.(달러표시된쪽에 문자가 없이 s혼자있어도 된다)
IN:
where city in('Paris','London');
(city = 'Paris' or city = 'London' 와 똑같은 값)
in안에 있는 조건들과 같으면 되는 연산자
AND: 열의 값들이 and로 이어진 값들과 일치하면 되는 연산자
OR: 열의 값들이 or로 이어진 값들 중 하나만 일치하면 되는 연산자
NOT: 열의 값들이 NOT뒤의 값이 아니면 되는 연산자
키워드
order by: 오름차순(기본값)으로 정렬, 무조건 문장의 마지막단에 와야 한다.
오름차순(ASC) | 내림차순(DESC), 따로 정의해야 한다.
order by country asc, customerName desc;
= 1차로 나라별 오름차순, 2차로 이름별 내림차순
//tbl1 테이블에는 제한조건 없음 , 중복한 값 들어갈 수 있다. insert into tbl1(col1,col2) values(4, 'fff'); insert into tbl1(col1,col2) values(5, 'ggg'); insert into tbl1(col1,col2) values(2, 'ccc'); insert into tbl1(col1,col2) values(2, 'hhh');
제약조건을 가진 테이블을 만들기
primary key = 기본키
CREATE TABLE 회원 ( 번호 int primary key, 성명 varchar(20), 주민번호 char(13) ); insert into 회원 values(1,'aaa','111'); insert into 회원 values(1,'bbb','222'); //에러: 앞의 숫자1을 넣은 열은 primary key. 튜플끼리 중복 불가하다.
create table 게시물 ( 번호 int primary key , 제목 varchar(20) not null , 내용 varchar(200) null , 작성자번호 int not null , FOREIGN KEY(작성자번호) REFERENCES 회원(번호), UNIQUE (제목) );
//제한조건을 위처럼 아래에 따로 설정할 수도 있고 한줄로 같이 설정도 가능하다. create table 게시물 ( 번호 int primary key, //제한조건 한줄로. 제목 varchar(20) not null unique, 내용 varchar(200) null , 작성자번호 int not null , FOREIGN KEY(작성자번호) REFERENCES 회원(번호) ); insert into 회원 values(1, '가길동', '111'); //오류: 기본키값인 열의 값이 기존값과 겹침 insert into 회원 values(2, '나길동', '222'); insert into 게시물 values(1, '제목1', '내용1', 1); insert into 게시물 values(2, '제목2', '내용2', 2); insert into 게시물 values(3, '제목3', '내용3', 3); //오류: 외래키인 열의 값이 참조하는 테이블의 기본키값이 아닌 값으로 설정됨
DDL: alter문
alter table 게시물 add column 조회수 int; //게시물 테이블에 int형 조회수라는 이름의 열을 넣었다. alter table 게시물 drop column 조회수; //게시물 테이블에서 조회수라는 이름의 열을 없앴다.
auto_increment, default, timestamp, current_timestamp 적용하기
'SQL > MySQL' 카테고리의 다른 글
[mysql] if(),date(),Safe mode (0) 2021.07.27 [mysql] grant,user,index,view (0) 2021.07.24 [mysql] join,Aliases (0) 2021.07.24 [mysql] where,비교연산자,order by (0) 2021.07.23