본문 바로가기
DataBase

[MariaDB] default ,테이블 생성 시 컬럼의 default(기본 값) 설정 /upadte set , 테이블 컬럼의 데이터 수정 /not null, null 값을 허용하지 않는 컬럼 /ERROR 1048 (23000) : Column cannot be null /unique 중복 데이터를 허..

by bkuk 2022. 10. 19.

default ,테이블 생성 시 컬럼의 default(기본 값) 설정

 create table detp1 (
    -> deptno int(2) default 90,
    -> dename varchar(14),
    -> loc varchar(13)
    -> );

 

 

테이블 데이터 삽입 예제 1

insert into dept1 values(10, '개발부', '서울');

 

테이블 데이터 null 값 삽입 2

insert into dept1 values(null, '개발부', '서울');

 

테이블 데이터 null 값 삽입 예제 3

insert into dept1 values(default, '개발부', '서울');
insert into dept1 values ( default, '연구부', '대전');

 


 

 

 

update ~ set ,테이블 컬럼의 데이터 수정

update emp1 set comm =0;

 

select * from emp1;

 

update ~ set ,테이블 컬럼의 데이터 수정

update emp1 set hiredate = "2011-01-01", comm = 20;

 


not null, null 값을 허용하지 않는 컬럼

 create table dept_n1 (
    -> deptno int(2) not null,
    -> dname varchar(14),
    -> loc varchar(13)
    -> );

 

데이터 삽입 예제 1

insert into dept_n1 values (10, "개발부", "서울");

 

ERROR 1048 (23000), null 값을 허용하지 않는 컬럼에 null 값을 넣었을 때

insert into dept_n1 values (null, "개발부", "서울" );

 


unique, 중복 데이터를 허용하지 않는 unique 설정

방법 1)

create table dept_u1 (
    -> deptno int(2) unique,
    -> dname varchar(14),
    -> loc varchar(13)
    -> );

 

방법 2)

create table dept_u1 (
    -> deptno int(2),
    -> dname varchar(14),
    -> loc varchar(13)
    -> constraint unique(deptno)
    -> );

 

제약조건을 확인하는 쿼리문

select constraint_name, table_schema, table_name, constraint_type
from information_schema.table_constraints
where constraint_schema='test1';

 

ERROR 1062 (23000), unique로 지정된 컬럼의 동일한 데이터 삽입 시 에러

insert into dept_u1 values (10, "개발부", "서울" );
insert into dept_u1 values (10, "개발부", "서울" );

 

unique로 지정된 컬럼의 null 값을 넣었을 때 =>  Query OK

insert into dept_u1 values (null, "총무부", "인천" );
insert into dept_u1 values (null, "총무부", "인천" );


 

primary key, 테이블 생성 시 컬럼의 기본 키(primary key)  설정

기본키는 not null(값 미정)과 unique(중복 미 허용)의 특성을 가짐.

 

create table p1 (
    -> deptno int(2) primary key,
    -> dname varchar(14),
    -> loc varchar(13)
    -> );

 

primary key, 테이블 생성 시 컬럼의 기본 키(primary key)  설정 2

create table dept_p2 (
    -> deptno int(2),
    -> dname varchar(14),
    -> loc varchar(13),
    -> constraint primary key(deptno)
    -> );

 

ERROR 1062 (23000), primary key로 설정된 컬럼에 동일한 데이터 삽입 시 에러

insert p1 values ( 10, "연구부", "서울" );
insert p1 values ( 10, "연구부", "서울" );

 

ERROR 1048 (23000), primary key로 설정된 컬럼에 null 값 삽입 시 에러

insert p1 values ( null, "연구부", "서울" );

 


auto_increment,  컬럼의 숫자 자동 증가

(단, Primary key만 설정 가능)

create table dept_a1 (
    -> deptno int(2) auto_increment,
    -> dname varchar(14),
    -> loc varchar(13)
    -> );

 

Primary key 지정과 auto_increment 설정,  컬럼의 숫자 자동 증가

create table dept_a1 (
    -> deptno int(2) primary key auto_increment,
    -> dname varchar(14),
    -> loc varchar(13)
    -> );

 

unsigned, 음수를 허용하지 않는 컬럼 설정(범위: 0 ~ 4,294,967,295)

(ex. id나 일련 번호는 음수를 사용하지 X, 모든 수들이 양수로 변경)

create table dept_a1 (
    -> deptno int(2) unsigned primary key auto_increment,
    -> dname varchar(14),
    -> loc varchar(13)
    -> );

 


Foreign Key, 외래키(참조키) 설정, 테이블간의 관계를 정의하는 컬럼

ERROR 1005 (HY000), Primary key 설정 후 foreign key 설정

(아래 예제는 Foreign Key를 설정하기 전, 해당 컬럼이 Primary Key로 설정되지 않아서 발생하는 오류임.)

 create table dept_p (
    -> deptno int(2),
    -> 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)
    -> );

 

Foreign 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)
    -> );

 

 

ERROR 1452 (23000), 부모 테이블에 없는 데이터를 자식 테이블에서 삽입하려고 할 때

insert into emp_f values ( 1000, "홍길동", "clerk", 10);

 

1) 부모 테이블에서 부서번호(PK) = 10의 데이터 추가 후

insert into dept_p values ( 10, "연구부", "서울");

 

2) 자식 테이블에서 데이터 추가

insert into emp_f values( 1000, "홍길동", "clerk", 10);

 

3) 자식 테이블에서 null 값 가능

insert into emp_f values( 2000, "박문수", "clerk", null);

 

4) 외래키로 지정된 값은 반드시 추가

 

insert into emp_f values( 20, "개발부", "대전" );

 


 

1) 부모 테이블에서 부서번호(PK) = 20의 데이터 추가 후

insert into dept_p values( 20, "개발부", "대전" );

2) 자식 테이블에서 데이터 추가

 

insert into emp_f values ( 3000, "박문수", "clerk", 20);

 

 

3) 참조하고 있는 중 부모 테이블에서 부서번호(deptno) 20번을 30번으로 변경 시

부모의 부서번호는 자식의 부서번호와 관계(참조)가 있기 때문에, 오류가 발생

update dept_p set deptno=30 where deptno=20;

 

4) 부서번호(deptno) 자식 테이블에서 20번을 30번으로 변경 시

delete from emp_f where deptno=20;

 

 

4) 자식 테이블 변경 후 부모 테이블 변경

update dept_p set deptno=30 where deptno=20;

 


 

참조하고 있는 중 부모 테이블에서 테이블을 지울 시 발생하는 에러

drop table dept_p;

 

1) 자식 테이블 삭제

drop table emp_f;

2) 부모 테이블 삭제

drop table dept_p;

댓글