문과 코린이의, [C#] 기록/문과 코린이의, [SQL] 기록

[문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용( 한글 영문 우선순위, 기본키(PK) / 유니크(UQ) 제약조건 추가/삭제, 기본키명 직접 지정 방법)

벼리네 2022. 1. 28. 14:03
반응형

[문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용( 한글 영문 우선순위, 기본키(PK) / 유니크(UQ) 제약조건 추가/삭제, 기본키명 직접 지정 방법)

[문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용( 한글 영문 우선순위, 기본키(PK) / 유니크(UQ) 제약조건 추가/삭제, 기본키명 직접 지정 방법)

 


< 참고 강의 영상 >

MSSQL Server 2016 기반의 데이터베이스 입문에서 활용까지 Part.3 대시보드 - 인프런 | 강의 (inflearn.com)

 

MSSQL Server 2016 기반의 데이터베이스 입문에서 활용까지 Part.3 - 인프런 | 강의

데이터베이스 구축에서부터 테이블 생성, 각종 SQL 쿼리문을 사용해서 데이터베이스 내 데이터를 조작, 변경할 수 있는 강의입니다., - 강의 소개 | 인프런...

www.inflearn.com

2022.01.26 - [문과 코린이의, [SQL] 기록] - [문과 코린이의 IT 기록장] MSSQL - 서브 쿼리 : IN 연산자, 상관 서브쿼리, 다중 INSERT 여러 방법, 서브쿼리 연습문제, IN, EXISTS 연산자, IN, EXISTS 연산자 연습문제

 

[문과 코린이의 IT 기록장] MSSQL - 서브 쿼리 : IN 연산자, 상관 서브쿼리, 다중 INSERT 여러 방법, 서

[문과 코린이의 IT 기록장] MSSQL - 서브 쿼리 : IN 연산자, 상관 서브쿼리, 다중 INSERT 여러 방법, 서브쿼리 연습문제, IN, EXISTS 연산자, IN, EXISTS 연산자 연습문제 < 참고 강의..

vansoft1215.tistory.com

2022.01.26 - [문과 코린이의, [SQL] 기록] - [문과 코린이의 IT 기록장] MSSQL - GROUP BY 추가 설명, 다중 그룹

 

[문과 코린이의 IT 기록장] MSSQL - GROUP BY 추가 설명, 다중 그룹

[문과 코린이의 IT 기록장] MSSQL - GROUP BY 추가 설명, 다중 그룹 < 참고 강의 영상 > MSSQL Server 2016 기반의 데이터베이스 입문에서 활용까지 Part.2 대시보드 - 인프런 | 강의 (inflearn.com)..

vansoft1215.tistory.com

2022.01.27 - [문과 코린이의, [SQL] 기록] - [문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용 (테이블 스크립트, 2개 이상의 컬럼을, 기본키로 만들기, CLUSTERED VS NONCLUSTERED, DB내 인덱스 확인, CLUSTERED INDEX / NONCLUSTERED INDEX 실습)

 

[문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용 (테이블 스크립트, 2개 이상의 컬럼을, 기본

[문과 코린이의 IT 기록장] MSSQL - 데이터 베이스 활용 (테이블 스크립트, 2개 이상의 컬럼을, 기본키로 만들기, CLUSTERED VS NONCLUSTERED, DB내 인덱스 확인, CLUSTERED INDEX / NO..

vansoft1215.tistory.com


1. 한글 영문 우선순위

- 기본적으로 한글이 우선순위를 가진다. (한글 완성형 기준) 그렇지만, 우선순위 변경도 가능하다.

 * DB 기본 데이터 정렬 속성 : Korean_Wansung_CI_AS

** 가급적 기본 데이터 정렬은 바꾸지 않는 것이 좋음.

** 속성 변경을 할 때, 유니코드 지원이 안되는 컬럼같은 경우 주의해야 할 필요 존재


1) Collaction 정보

 * Collaction  : 대조/조사

: SQL Server의 기본 데이터 정렬을 설정하는 옵션.

: DB 설치시에 셋팅.

 * 쿼리문으로 이를 확인 가능.

-- Collaction 정보 보기
1) SELECT * FROM ::fn_helpcollations() -- 이 옵션들 중에 Korean_Wansung_CI_AS 존재
2) GUI 모드에서 바로 확인도 가능 (오른쪽 버튼 - 속성 - 일반)


2) Collaction 정보를 변경하기 위해서는?

: ALTER 명령어를 사용하면 된다.

ALTER DATABASE 디비명		
	COLLATE Korean_Wansung_CI_AI(변경 언어)

 * 그렇지만 기본키 제약조건 등으로 안될 수 도 있기 때문에, 초보자는 DB 백업을 권한다.

 


3) 데이터 정렬 방법 (GUI모드)

* 해당 데이터베이스에 작업하던 상황에서, 기본 데이터 정렬 속성값을 변경하려고 하면 불가능함. (오류 뜸)

테이블 - 오른쪽 클릭 - 속성 - 옵션

* DB의 기본 데이터 정렬 방식이 바뀐다 하더라도, 지금까지 만들어진 해당 열에 대한 데이터 정렬 속성은 변화되지 않음. 

* 즉 DB의 데이터 정렬 방식이 바뀌게 되면, 그 이후에 생성되는 테이블에 대해서 적용되어짐. (이전은 변화 x)

 

< Korean_Wansung_CI_AS >

- CI : Case-Insensitive : 대소문자에 민감하지 않은

AS : Accent-Sensitive 


4) 영문 SQL Server

- 기본적으로 영문 기반인만큼, 기본 데이터 정렬이 한글 완성형이 아님.

- 그렇지만, 영문 DB라 하더라도, 한글 완성형 DB를 복원하면 그대로 복원이 된다.

 


5) COLLATE(데이터 정렬) 쿼리문 실습

a. DATABASE COLLATION(데이터 정렬) 보기

SELECT DATABASEPROPERTYEX('DB명','COLLATION')AS COLLATION

b. DATABASE TABLE COLLATION 정보 보기

EXEC sp_help [dbo.테이블명] -- 묶어주면 dbo. 사용 가능
EXEC sp_help 테이블명

c. DATABASE & TABLE COLLATION 변경하기

- 데이터베이스 기본 데이터 정렬 속성 변경

ALTER DATANBASE [DB명]
	COLLATE Korean_Wansung_CI_AS -- 이로 바꿔주자.
-- 이 DB 속성을 변경하기 전에, 생성된 테이블들의 속성은 변하지 않는다. (즉 생성시 속성 상태 유지)

- 테이블 내 컬럼 기본 데이터 정렬 속성 변경

ALTER TABLE 테이블명
	ALTER COLUMN 컬럼명 컬럼데이터형 
    -- [ 주의 ]
    -- 이때 해당 컬럼명은 Primary key, Unique 등 제약조건이 걸린 것이면 안됨. (중복되는 값을 받을 수 없음). 
    -- 따라서 이를 변경하려고 하려면 수행이 잘 안될 것임.
    		COLLATE Korean_Wansung_CI_AS -- 바꿀 데이터 정렬(Collation) 속성

2. 기본키(PK) / 유니크(UQ) 제약조건 추가/삭제

CREATE DATABASE [9TO9]

USE [9TO9];

-- [1] 테이블 생성
-- 먼저 기본키 제약조건, 유니크 제약조건 없이 테이블을 생성해본다.
CREATE TABLE dbo.table_customers4(
	cus_id		CHAR(10)		NOT NULL,
	cus_name	NVARCHAR(20)		NOT NULL,
	cus_class	NVARCHAR(20)		NOT NULL
)


-- [2] 인덱스 확인
-- 기본키 지정, 유니크 지정을 하지 않았기 때문에, 인덱스 확인해보면 없다고 나옴
EXEC sp_helpindex table_customers4;
-- 제약조건을 보는 코드
EXEC sp_helpconstraint table_customers4;


-- [3] 기본키 추가(제약조건 추가)
ALTER TABLE dbo.table_customers4
	ADD
		CONSTRAINT PK_table_customers4 PRIMARY KEY CLUSTERED(cus_id)
        -- PK_table_customers4 : 제약조건 이름
        -- CONSTRAINT를 안 써줘도 괜찮음.
		-- CLUSTERED는 안써줘도 기본으로 CLUSTERED INDEX 생성해줌.
      		  -- UNIQUE를 지정해주는 경우는, UQ_table_customers4로 해주면 됨.
GO -- 구분의 개념

EXEC sp_helpindex table_customers4;
GO


-- [4] 기본키 제약조건의 삭제
ALTER TABLE dbo.table_customers4
	DROP
		CONSTRAINT PK_table_customers4
GO 

EXEC sp_helpindex table_customers4;
GO

-- [5] 유니크 제약조건의 생성
ALTER TABLE dbo.table_customers4
	ADD
		CONSTRAINT UQ_table_customers4 UNIQUE NONCLUSTERED(cus_name)
GO
 
 EXEC sp_helpindex table_customers4;


-- [6] 유니크 제약조건의 삭제
ALTER TABLE dbo.table_customers4
	DROP
		CONSTRAINT UQ_table_customers4

EXEC sp_helpindex table_customers4;
-- 시스템 뷰 - 정보 스키마 뷰 : 테이블 컬럼들에 대한 정보를 확인 가능
-- 데이터베이스 뷰 쪽에 DB마다 생성되어 있다.
-- 테이블 각 컬럼에 대한 정보를 보거나 활용하고자 할 때 사용 가능
-- JOIN등을 통해 여러 정보를 묶어서 활용할 수 있다.
SELECT *
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE -- 컬럼들에 대한 정보를 가지고 있는 스키마
WHERE TABLE_NAME = '테이블명'
-- [7] 기본키 기존에 존재시 삭제법
-- 정확한 제약조건의 이름(cosntraint name)을 알아야 한다. (exec sp_helpconstraint에서 확인 가능)
ALTER TABLE dbo.table_customers4
	DROP
		CONSTRAINT 제약조건명

 

a. PRIMARY KEY CONSTRAINT ADD / DROP

: 중복된 값을 입력할 수 없다.

: NULL 입력할 수 없다.

 

b. UNIQUE CONSTRAINT ADD / DROP

: 중복된 값을 입력할 수 없다.

: NULL 입력할 수 있다. (단, NOT NULL로 지정되어 있으면 안됨)

CREATE TABLE dbo.tbl_test(
	cus_id		CHAR(10)		PRIMARY KEY, -- PK
	cus_name	CHAR(10)		UNIQUE,		 -- UQ
)

INSERT INTO dbo.tbl_test VALUES('AAA','AAA'); -- 가능
INSERT INTO dbo.tbl_test VALUES('',''); -- 공백 입력 가능
INSERT INTO dbo.tbl_test VALUES('NULL','BBB') -- NULL값이 아니라, 이는 문자값으로 인식됨. 따라서 입력 가능.
INSERT INTO dbo.tbl_test VALUES(NULL,'ABC'); -- NULL 값 입력은 불가능
INSERT INTO dbo.tbl_test VALUES('BBB',NULL)	-- UQ는 NULL값 입력 가능 (문자가 아닌 실제 NULL) 
INSERT INTO dbo.tbl_test VALUES('abc',NULL)	-- null값을 위에서 한번 사용했기 때문에, 중복불가능의 조건에 따라 사용 x 

SELECT * FROM dbo.tbl_test;

 


3. 기본키명 직접 지정 방법

CREATE TABLE 테이블명
(
	cus_id		CHAR(10)	NOT NULL 	CONSTRAINT 		제약 기본키명		PRIMARY KEY,
)

- 테이블을 만들 때 직접 기본키명을 지정해서 만들 수 있다.

 


* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형