목록STUDYING/SQL SERVER (15)
MY MEMO
1. 설치하기 : https://medium.com/@reverentgeek/sql-server-running-on-a-mac-3efafda48861 사실 이 글은 위의 설치를 모두 진행했을 때 반복되는 오류가 생겨서 쓰는 글이다! 1) command를 이용해서 mssql 을 실행했을 때 생기는 오류 이 오류는 직접 코드를 수정해야 고칠 수 있다.Stack Overflow : https://github.com/hasankhan/sql-cli/issues/52 위의 코드 105번째 줄에서 options,를 option으로 고쳐준다! 2) 노트북을 끄면 자동으로 docker의 내 container도 꺼진다내 container의 이름은 name_your_container 이다! 일단 docker가 실행되고 있..
1. MSSQL에 일반인 사용자도 접근할 수 있게 접근 권한을 주기 1-1) Database -> 속성 1-2) SQL Server 및 Window 인증모드 => 서비스 자동 재시작 2) 일반 사용자의 id와 pw를 만들어줌 CREATE LOGIN login_idWITH PASSWORD = 'password',CHECK_POLICY = OFF;GOEXEC sp_addsrvrolemember login_id, sysadmin;: 사용자 id와 password를 만들고 권한을 줌 3) 1433번 port를 열어줘야한다 (Window 방화벽)window 제어판 -> windows 방화벽 -> 고급설정왼쪽에 인바운드 규칙 -> 새규칙 규칙종류 = 포트 -> TCP & 특정 로컬 포트 설정 -> 이름 설정 -> ..
1. 전체 텍스트 검색 : 긴 문장으로 구성된 열의 내용을 검색 할때 인덱스를 사용할 수 없지만 인덱스를 사용할 수 있는 것처럼 만들어서 검색을 빠르게 하는 것SELECT문의 WHERE or FROM 전에 관련된 키워드를 사용 SELECT * FROM FulltextTbl WHERE description LIKE '%남자%';: 이렇게 하면 index 검색이 아닌 table scan CREATE FULLTEXT CATALOG movieCatalog AS DEFAULT;: 전체 텍스트 인덱스가 저장될 가상의 공간 CREATE FULLTEXT INDEX ON FullTextTbl(description)KEY INDEX pk_idON movieCatalogWITH CHANGE_TRACKING AUTO; // ..
(실무에서는 거의 사용하지 않음)Trigger : 방아쇠라는 뜻으로 테이블에 무슨 일이 일어나면 자동으로 실행 -> 삽입 수정 삭제 등을 실행ex) 테이블에 행을 고의 또는 실수로 삭제한다면 테이블에 행이 삭제되는 순간에 행의 내용/시간/삭제/사용자를 기록 1) AFTER TRIGGER: INSERT, UPDATE, DELETE 등의 작업이 일어났을 때 작동하는 트리거 +) deleted 라는 table이 system에 존재 -> 삭제되는 모든 내용이 있음 & inserted : insert 했을 모든 데이터가 입력되어있음INSERT가 실행 : inserted 테이블에 삽입UPDATE가 실행 : 원래의 데이터 -> inserted / 삭제된 데이터 -> deleted CREATE TRIGGER trg_i..
커서 : 행의 집합을 처리성능에 별로 좋지 않은 영향 처리 순서커서 선언 -> 커서 열기 -> 커서 데이터 가져오기 -> 데이터 처리 -> 커서 닫기 -> 커서 해제 DECLARE userTbl_cursor CURSOR GLOBAL/LOCAL(default) + STATICFOR SELECT height FROM userTbl; OPEN usrTbl_cursor;: 내부적으로 위의 쿼리문을 실행해서 cursor에 데이터를 담아 놓음 DECLARE @id NVARCHAR(10)DECLARE @sum BIGINTDECLARE @userGrade NCHAR(50) FETCH NEXT FROM userCur INTO @id, @sum -- 첫 행 값을 대입 WHILE(@@FECTCH_STATUS=0) -- 행이..
1. 저장 프로시저 : 쿼리문의 집합 -> 어떤 동작을 일괄 처리할때 사용 장점1) SQL Server의 성능을 향상 시킬 수 있다2) 유지 관리가 간편하다3) 모듈식 프로그래밍이 가능하다4) 보안을 강화할 수 있다ex) 사용자에게 테이블 권한을 주지 않고 프로시저에 대한 권한을 준다 5) 네트워크 전송량의 감소: 쿼리문이 네트워크를 통해서 전송되는데 쿼리가 많을 수록 많은 부하를 준다 과정구문 분석 -> 개체 이름 확인 -> 사용 권한 확인 -> 최적화 (대부분 indexing) -> 컴파일 및 실행계획 등록 => 메모리에 저장 -> 실행 같은 과정을 한번 더 실행하면메모리 확인 -> 실행 (단 한글자라도 다르다면 다르게 취급한다.) EXEC usp_ID 5000 WITH RECOMPILE;:저장 프로..
트랜젝션 : 하나의 논리적 작업 단위로 수행되는 일련의 작업 (전부 되거나 전부 안되거나)트랜젝션을 써야 하는 이유: 거래를 할때 구매자가 구매를 진행했는데 오류로 인하여 판매자는 돈이 입금되지 않은 경우 Database는 DB이름을 치지만 실제로는 파일 이름으로 존재한다 (*.mdf : 데이터 파일 / *.ldf : 트랜젝션 로그파일) 원래 데이터베이스는 논리적 데이터베이스 -> 물리적 데이터베이스 논리적 데이터베이스에서 쿼리를 날리면 일단 로그에 기록을 남기고 실제 데이터를 변경한다 트렌젝션을 생성하는 쿼리: BEGIN TRANSACTION (또는 BEGIN TRAN)SQL 문장COMMIT TRANSACTION (또는 COMMIT TRANS or COMMIT WORK) 실제로 쿼리를 실행하면 자동으로..
동영상을 보는게 더 좋음: https://www.youtube.com/watch?v=sSOsWoaTrNk&index=28&list=PLVsNizTWUw7Gw_ubikxbzecfveoxemsAs 데이터베이스는 성능이 아주 중요한 역할을 한다인덱스가 없어도 데이터를 조회하고 변경하는데 아무런 문제가 되지 않지만 - 장점1) SELECT를 빠르게 접근2) 해당 쿼리의 부하가 줄어서 시스템 전체의 성능이 향상 - 단점1) 데이터베이스 크기의 10% 정도의 추가 공간2) 인덱싱을 하는데 시간이 많이 소요3) Insert Update Delete가 자주 일어날때는 성능이 나빠질 수 있음 - 인덱스가 사용되기 좋은 조건1) 인덱스는 열 단위에서 생성2) WHERE 절에서 사용되는 열에 인덱스 생성3) WHERE 절에..
- Primary key 지정시 이름 지정 가능userID char(8) NOT NULL CONSTRAINT PK_userTbl_userID PRIMARY KEY혹은 맨 뒤에CONSTRAINT PK_userTbl_userID PRIMARY KEY (userID) ALTER TABLE userTblADD CONSTRAINT PK_userTbl_userID PRIMARY KEY(userID);: Primary Key로 변경 - Foreign KeyuserID char(8) NOT NULLCONSTRAINT FK_userTbl_buyTblFOREIGN KEY PREFERENCES userTbl(userID) ON DELETE CASCADE;ON UPDATE CASCADE; UNIQUE: 중복되지 않은 유일한 ..
RESTORE DATABASE db FROM DISK = '폴더 주소' WITH REPLACE:: data복원 CAST(amount AS FLOAT)CONVERT (FLOAT, amount): 데이터 타입 변환 PARSE('2017년 09월 09일' AS DATE);: 만약 정상적으로 실행이 되지 않는다면 오류 발생TRY_PARSE('123.45' AS INT);: 정상적으로 실행되지 않는다면 NULL값 RETURN UPDATE table SETcol1 = STUFF((SELECT col1 FROM table),999991,10,REPLICATE('c',10)),col2 = STUFF((SELECT col2 FROM table),999991,10, REPLICATE('다',10)); UPDATE tabl..