ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 ,selectfrom

    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

    댓글

Designed by Tistory.