본문 바로가기
DBMS/mysql

mysql 기본 문법 정리 - 제약조건

by solutionmaster 2023. 5. 6.

1. mySQL 주석처리

-- 한줄주석
#한줄주석처리
/* 여러줄주석
*/

2. mySQL 기본명령어

show databases; -- 생성된 데이터베이스 확인
use 테이터베이스명; -- 데이터베이스 선택
desc 테이블명; -- 테이블 속성 확인
create table 테이블명 (칼럼명 데이터타입 null/null key설정); -- 테이블생성

  • char : 고정형 문자값 저장 타입
  • varchar : 가변형 문자값 저장 타입

3. 기본적인 DB 특징


데이터정의어(DDL)

CREATE - 스키마(database), table
DROP(삭제)- table, index, view, 스키마(database)
ALTER(수정) - table


데이어조작어(DML)

INSERT - 삽입
SELECT - 검색
UPDATE - 수정
DELETE - 삭제


데이터제어어(DCL)

GRANT - 권한부여
REVOKE -권한회수


데이터타입

. 정수 - TINYINT : -128 ~ 127
- SMALLINT : -32768~32767
- MEDIUMINT
- INT : -2147483648 ~ 2147483647
- BIGINT

. 고정소수형 - DECIMAL : 십진수표현 (DECIMAL(5,2)) -> 99999.99
. 부동소수형 =FLOAT, DOUBLE
. 문자 - CHAR(N) 길이 N인 고정된 문자열
- VARCHAR(N) : 최대 N개로 구성괸 가변길이 문자열
- TEXT : 길이가 긴 가변갈이 문자열
- ENUM : 유한개의 문아자열 집합중 하나의값 예)enum('사원', 대리, 과장)

. 날짜/시간
- DATE : 'YYYY-MM-DD'
- YEAR : 'YYYY'
- TIME : '00:00:00'
- TIMESTAMP : 'YYYY-MM-DD 00:00:00'

. 바이너리(이진수) - TINYBLOB, BLOB(64kb), MEDIUMBLOB(16MB), LONBLOB(4GB)


제약조건

.primary key 절
- 하나 이상의 칼럼을 기본키로 설정할 수 있다.
- NULL이 될수 없다.
- 이미 존재하는 키를 갖는 레코드를 신규 생성하면 거부된다(키중복불가).

. NOT NULL절
- 입력되지않는 레코드가 생성되면 거부된다.

. UNIQUE 절
- 레코드속의 unique라고 지정한 컬럼의 값은 유일해야한다.

. AUTO INCREMENT 절
- 지정된 컬럼에 값을 입력하지 않아도 자동으로 1씩 증가되어 자동 입력된다.

. FOREIGN KEY절

. CHECK - check(잔액>0) 특정조건을 준수하지 않으면 거절


테이블 생성 구조

create table 테이블 이름 (
   컬럼명 데이터타입 [not null | null] [default 기본값],
   .......,
    [primary key(컬럼명)],
    [unique(컬럼명)],
    [foreign key(외래키) references 참조할테이블명(참조할칼럼)]
  );

.alter - 데이터베이스와 테이블의 내용을 수정할 수 있다.

 ALTER TABLE 테이블 이름
   ADD COLUMN 컬럼명 데이터타입 [NOT NULL | NULL] [DEFAULT 기본값],
   DROP COLUMN 컬럼명, 
   CHANGE COLUMN 수정전 컬럼 수정후 컬럼 데이터타입 [NOT NULL | NULL] [DEFAULT 기본값]

실습(alter문)

  • 강의테이블에서 이수학점칼럼의 이름을 학점으로 변경해보세요.

    alter table 강의 change column 이수학점 학점 char(4);
  • 강의테이블에서 수정했던 학점 칼럼을 삭제하시오

    alter table 강의 drop column 학점;
  • 학생테이블에서 전화번호를 연락처로 변경하시오

    alter table 학생 change column 전화번호 연락처 varchar(20);
  • 학생테이블에서 취득자격증 칼럼을 20글자크기의 가변데이터 타입으로 추가해보시오

    alter table 학생 add column 취득자격증 varchar(20) null default 3;
  • 학생테이블에서 학생이름 칼럼이 강의테이블의 강의번호를 참조하도록 설정하시오

    alter table 학생 add foreign key(학생이름) references 강의(강의번호);

실습(create문) - 테이블 생성

  • 강의1 테이블 생성
    1. 모든 컬럼에 기본적으로 null 허용하지않습니다.
    2. 컬럼은 강의번호,강의이름, 강의시간, 인원제한, 교수번호로 구성
    3. 강의번호 기본키이고 자동으로 1씩 증가 됩니다.
    4. 강의이름은 반드시 있어야하고 고유한 이름이어야합니다.
    5. 인원제한은 50이라는 기본값을 갖고 정수입니다.
    6. 교수번호는 myschool데이터베이스에 있는 교수 테이블의 교수번호를 참조하고 길이가 3인 고정 문자열입니다.
    7. 강의이름과 강의시간은 최대 20크기의 문자열로 구성됩니다.
  create table 강의1(
      강의번호 int(5) auto_increment primary key, -- 강의번호가 기본키이고, 자동으로 번호가 1씩증가
      강의이름 varchar(20) not null unique,
      강의시간 varchar(20) not null,
      인원제한 int(10) default 50,
      교수번호 char(5) not null
  );
  desc 강의1; -- 테이블 속성 확인

인덱스(Index)

  • 데이터의 응답시간을 단축하기 위해 인덱스를 제공한다.
  • 생성1 - 자동지점
    . primary key, foreign key, unique일 경우 내부적으로 자동생성되어있다.3
  • 생성2 - 명시적지점 3
    . create index 인덱스이름 on 테이블 (컬럼명, 컬럼명,,)
  • 삭제 : drop index 인덱스이름 on 테이블;

인덱스(Index) 실습

  • 강의1 테이블에서 강의시간, 인원제한 칼럼을 볼수있는 '강의시간조회' 이름의 인덱스 생성
      create index 강의시간조회 on 강의1(강의시간,인원제한);
  • 강의1 인덱스 조회
      show index from 강의1;
  • 강의시간조회 인덱스 삭제
      drop index 강의시간조회 on 강의1;

insert문(입력)

  INSERT INTO 테이블명(칼럼명, 칼럼명) values(값,값,값,,,"값,값)   //칼럼명과 값이 대칭.

update문(수정)

   UPDATE 테이블 SET 컬럼명 = 데이터, 컬럼명 = 데이터,,,,WHERE 조건
update문 실습
  • 학생번호 201434207 학생의 주소를 영등포구로 변경.

    update 학생 set 주소 = '영등포구' where 학생번호 = '201434027';
  • 통계학과 정의영을 남자에서 여자로 변경.

    update 학생 set 성별 = '여자' where 학생이름 = '정의영';
  • 컴퓨터학과 강원상 부교수의 전화번호를 학생 최성우님의 연락처로 변경

    update 교수 set 전화번호 = (select 전화번호 from 학생 where 학생이름='최성우') where 교수이름 = '김원상';

delete문(삭제)

  • 구조
    DELETE FROM 테이블 where조건
  • *where절을 사용하지않으면 모든 레코드가 삭제된다, 다만 이러더라도 테이블의 구조는 그대로 보존된다.
delete문 실습
  • 수강신청 테이블에서 2014년 2월 28일 이후 레코드를 삭제하시오

    delete from 수강신청 where 신청시각 > '2024-03-10 00:00:00';
  • 수강신청 테이블에서 MN09인 강의번호를 삭제하시오

    delete from 수강신청 where 강의번호='MN09';
  • testdb로 가서 myschool의 강의 테이블에서 강의번호가 MN09인 레코드를 삭제하시오

    delete from myschool.수강신청 where myschool.강의번호='MN09';

댓글