MySQL 팁

Computer/Database 2005. 7. 10. 12:35
1.데이터 베이스 생성 및 유저 권한 설정 #
# 데이터 베이스 생성

mysql> create database DB_NAME;


# 유저 등록
인서트문 이용

 /*데이터베이스 변경*/
mysql>  use mysql;

 /* Host , User , Password 변경 후 인서트 실행*/
mysql> INSERT INTO user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv,
Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv,
Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv, ssl_type, ssl_cipher, x509_issuer,
x509_subject, max_questions, max_updates, max_connections) VALUES("192.168.0.1", "choco", password
("passowrd"), "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "", "", "", "", "0", "0", "0");

mysql> flush privileges;


명령어 이용 (모든 호스트 접근허용에는 %)   

/* localhost에서만 접근 허용  */
mysql> grant all privileges on db_name.* to username@localhost identified by 'password' with grant option;

/* 특정 ip 에서만 접근 허용  */ 
mysql> grant all privileges on db_name.* to username@'192.168.0.1' identified by 'password' with grant optoin; 

/* C클래스만 접근 허용 */ 
mysql> grant all privileges on db_name.* to username@'192.168.0.%' identified by 'password' with grant optoin;  


2. My-SQL 4.1(Windows)에서 인코딩 euc-kr로 변경 안되서 한글이 ?로 깨져 보이는 문제
my.ini를 수정해도 접속후에 status명령어로 상태를 확인하면 latin1으로 되어 있다. mysql접속해서 아래 5개의 명령어를 실행하고 status를 다시 실행하면 변경된 것을 확인할 수 있다.

set character_set_connection=euckr;
set character_set_server=euckr;
set character_set_client=euckr;
set character_set_results=euckr;
set character_set_database=euckr;

[변경내역]
2005/07/10 초안 작성
2011/10/12 일부 내용 수정
Posted by Gu Youn
,
1. ConnectinoString 예
  Provider=SQLOLEDB.1;Password=pwd;Persist Security Info=True;User ID=user_id;Initial Catalog=db_name;Data Source=211.211.211.211\instance_name,1030"

2. ConnectionString 각 항목 설명

  Provider : OLE DB Provider 중에서 선택

  Password : 데이터 베이스 연결 암호
 
  User ID : 데이터 베이스 연결 계정

  Initial Catalog : 연결할 데이터 베이스

  Data Source : 연결할 데이터 베이스 주소
   ms-sql 기본 포트/인스턴스 사용하는 경우 : 아이피만 적어도 됨
   ms-sql 기본 인스턴스가 아닌 경우 : \instance_name,port number

'Computer > Database' 카테고리의 다른 글

MySQL 팁  (4) 2005.07.10
MS-SQL - 패치및 서비스팩 적용에 따른 버전 정보  (6) 2005.07.10
데이터 베이스 잡담...  (4) 2003.05.23
Oracle 기본 정리  (3) 2003.03.26
두개 이상의 인스턴스 EM에 등록하기  (4) 2002.11.04
MS-SQL 기본 정리  (16) 2002.10.07
Posted by Gu Youn
,
패치및 서비스팩 적용에 따른 버전 정보

버젼  종류  패치,서비스팩 
8.00.818  2000  SP3+Q815495 
8.00.760  2000  SP3/3a 
8.00.679  2000  SP2+Q316333 
8.00.667  2000  SP2+8/14 fix 
8.00.665  2000  SP2+8/8 fix 
8.00.655  2000  SP2+7/24 fix (Q323875) *SQLSlammer worm 
8.00.650  2000  SP2+Q322853 
8.00.608  2000  SP2+Q319507 
8.00.604  2000  SP2+3/29 fix 
8.00.578  2000  SP2+Q317979 
8.00.561  2000  SP2+1/29 fix 
8.00.534  2000  SP2.01 
8.00.532  2000  SP2 
8.00.475  2000  SP1+1/29 fix 
8.00.452  2000  SP1+Q308547 
8.00.444  2000  SP1+Q307540/307655 
8.00.443  2000  SP1+Q307538 
8.00.428  2000  SP1+Q304850 
8.00.384  2000  SP1 
8.00.287  2000  No SP+Q297209 
8.00.250  2000  No SP+Q291683 
8.00.249  2000  No SP+Q288122 
8.00.239  2000  No SP+Q285290 
8.00.233  2000  No SP+Q282416 
8.00.231  2000  No SP+Q282279 
8.00.226  2000  No SP+Q278239 
8.00.225  2000  No SP+Q281663 
8.00.223  2000  No SP+Q280380 
8.00.222  2000  No SP+Q281769 
8.00.218  2000  No SP+Q279183 
8.00.217  2000  No SP+Q279293/279296 
8.00.211  2000  No SP+Q276329 
8.00.210  2000  No SP+Q275900 
8.00.205  2000  No SP+Q274330 
8.00.204  2000  No SP+Q274329 
8.00.194  2000  No SP 
8.00.190  2000  Gold, no SP 
8.00.100  2000  Beta 2 
8.00.078  2000  EAP5 
8.00.047  2000  EAP4 
7.00.1094 7.0  SP4+Q815495 
7.00.1077 7.0  SP4+Q316333 
7.00.1063 7.0  SP4 
7.00.1004 7.0  SP3+Q304851 
7.00.996  7.0  SP3 + hotfix 
7.00.978  7.0  SP3+Q285870 
7.00.977  7.0  SP3+Q284351 
7.00.970  7.0  SP3+Q283837/282243 
7.00.961  7.0  SP3 
7.00.921  7.0  SP2+Q283837 
7.00.919  7.0  SP2+Q282243 
7.00.918  7.0  SP2+Q280380 
7.00.917  7.0  SP2+Q279180 
7.00.910  7.0  SP2+Q275901 
7.00.905  7.0  SP2+Q274266 
7.00.889  7.0  SP2+Q243741 
7.00.879  7.0  SP2+Q281185 
7.00.857  7.0  SP2+Q260346 
7.00.842  7.0  SP2 
7.00.835  7.0  SP2 Beta 
7.00.776  7.0  SP1+Q258087 
7.00.770  7.0  SP1+Q252905 
7.00.745  7.0  SP1+Q253738 
7.00.722  7.0  SP1+Q239458 
7.00.699  7.0  SP1 
7.00.689  7.0  SP1 Beta 
7.00.677  7.0  MSDE O2K Dev 
7.00.662  7.0  Gold+Q232707 
7.00.658  7.0  Gold+Q244763 
7.00.657  7.0  Gold+Q229875 
7.00.643  7.0  Gold+Q220156 
7.00.623  7.0  Gold, no SP 
7.00.583  7.0  RC1 
7.00.517  7.0  Beta 3 
6.50.479  6.5  Post SP5a 
6.50.464  6.5  SP5a+Q275483 
6.50.416  6.5  SP5a 
6.50.415  6.5  Bad SP5 
6.50.339  6.5  Y2K Hotfix 
6.50.297  6.5  Site Server 3 
6.50.281  6.5  SP4 
6.50.259  6.5  SBS only 
6.50.258  6.5  SP3 
6.50.252  6.5  Bad SP3 
6.50.240  6.5  SP2 
6.50.213  6.5  SP1 
6.50.201  6.5  Gold 
6.00.151  6.0  SP3 
6.00.139  6.0  SP2 
6.00.124  6.0  SP1 
6.00.121  6.0  No SP 

'Computer > Database' 카테고리의 다른 글

MySQL 팁  (4) 2005.07.10
MS-SQL - ConnectionString 샘플  (14) 2005.07.10
데이터 베이스 잡담...  (4) 2003.05.23
Oracle 기본 정리  (3) 2003.03.26
두개 이상의 인스턴스 EM에 등록하기  (4) 2002.11.04
MS-SQL 기본 정리  (16) 2002.10.07
Posted by Gu Youn
,
Nested loop join

2 정규화 위반 예
ex) Table A(a_pk) , Table  intersection(a_pk,b_pk), Table B(b_pk)
interscetion 테이블의 컬럼이 a_pk에만 종속 되는 경우 2정규화 위반

3 정규화 위반
Table A(a_pk)
  A 테이블의 컬럼이 a_pk의 종속 관계가 아니고 속성끼리 종속성을 같는 경우

퍼포먼스는 I/O 문제 결국 쿼리 실행시 block size가 어떻게 되는지에 따라서 퍼포먼스 차이 발생

'Computer > Database' 카테고리의 다른 글

MySQL 팁  (4) 2005.07.10
MS-SQL - ConnectionString 샘플  (14) 2005.07.10
MS-SQL - 패치및 서비스팩 적용에 따른 버전 정보  (6) 2005.07.10
Oracle 기본 정리  (3) 2003.03.26
두개 이상의 인스턴스 EM에 등록하기  (4) 2002.11.04
MS-SQL 기본 정리  (16) 2002.10.07
Posted by Gu Youn
,
1. sqlplus 접속
sqlplus [user name]/[password]@[SERVERNAME]

SERVERNAME은 tnsnames.ora에 설정된 이름을 사용한다.


2. PRIMARY KEY 설정
PRIMARY KEY 설정에는 세가지 방법이 존재

ㄱ.컬럼 정의에서 설정(테이블 일반 생성 하는 형식)
   location_id    NUMBER(4) CONSTRAINT loc_id_pk PRIMARY KEY

ㄴ.테이블 속성에서 설정(Create문 맨 마지막에 추가)
   CONSTRAINT loc_id_pk PRIMARY KEY (location_id)

ㄷ. 테이블 생성후 설정 변경 :
   ALTER TABLE locations_demo MODIFY (country_id CONSTRAINT country_nn NOT NULL);


3. 자동증가하는 컬럼 만들기
sequence를 만들고 테이블에 인서트 할때 sequence를 이용해서 저장한다.

ex)
create sequence seq1
increment by 1
start with 1
maxvalue 1000;

4. lastreqtim과 현재 시간과의 차이 구하기
trunc(round((sysdate-lastreqtime)*24*60*60)) //day 단위
trunc(round((sysdate-lastreqtime)*24)) //hour 단위
trunc(round((sysdate-lastreqtime)*24*60))  //min 단위
trunc(round((sysdate-lastreqtime)*24*60*60)) //sec 단위

5. SQLPLUS 기본 명령 정리
SHOW ALL : 현재 설정 내용 출력
set heading off[on]

6. 인덱스(index)
ㄱ. 생성
   create index index_name  on table_name(column_name);
ㄴ. 삭제
   drop index index_name;
ㄷ.기타
  desc user_indexes;
  select * from user_indexes;

7. 제약 조건 확인(not null...)
select * from user_constraints where table_name = upper('table_name');

8. SERVER NAME 등록
/product/9.2.0.1.0/network/admin/tnsnames.ora에 추가

9. sqlclient에서 한글 인서트 깨지는 경우
오라클 서버의 NSL_LANGUAGE , NLS_CHARACTERSET 확인
  select * from V$NLS_PARAMETERS;
서버의 NLS_CHARACTERSET과 sqlclient의 characterset을 일치시켜 준다.
  export NLS_LANG=AMERICAN_AMERICA.KO16KSC5601
   or
  export NLS_LANG=AMERICAN_AMERICA.UTF8


10. 테이블 목록
  select * from tab

'Computer > Database' 카테고리의 다른 글

MySQL 팁  (4) 2005.07.10
MS-SQL - ConnectionString 샘플  (14) 2005.07.10
MS-SQL - 패치및 서비스팩 적용에 따른 버전 정보  (6) 2005.07.10
데이터 베이스 잡담...  (4) 2003.05.23
두개 이상의 인스턴스 EM에 등록하기  (4) 2002.11.04
MS-SQL 기본 정리  (16) 2002.10.07
Posted by Gu Youn
,
1. MS-SQL 의 두개 이상의 인스턴스가 설치된 컴퓨터와 같은 네트웍에 있는 경우에는 설치된 컴퓨터 이름에 인스턴스명을 붙여서 등록을 하면 된다.  
ex) SQLSERVERInstance1 , SQLSERVERInstance2

2. 같은 네트웍에 있지 않은 경우
클라이언트네트웍 유틸리티(Client Network Utility)를 이용해서 별명(Alias)를 만들어서 등록할때 사용한다. 이후 과정은 1번과 비슷하게 이루어진다. 별명을 만들때 Dynamically determine port 옵션을 해제하고 직접 포트 번호를 적어준다. 포트 번호는 SQL이 설치된 서버의 EM에서 등록정보 일반탭의 네트웍 구성(Network Configuration)을 살펴보면 포트번호를 알 수 있다.

'Computer > Database' 카테고리의 다른 글

MySQL 팁  (4) 2005.07.10
MS-SQL - ConnectionString 샘플  (14) 2005.07.10
MS-SQL - 패치및 서비스팩 적용에 따른 버전 정보  (6) 2005.07.10
데이터 베이스 잡담...  (4) 2003.05.23
Oracle 기본 정리  (3) 2003.03.26
MS-SQL 기본 정리  (16) 2002.10.07
Posted by Gu Youn
,
1. 테이블 구조 보기(DESC)
    Exec sp_help [UserTableName]

2. Stored Procedure 목록 보기 / 검색
SELECT * FROM sysobjects

3. Stored Procedure에서 select후의 레코드셋의 개수를 알고 싶은 경우
SELECT @@rowcount

4.Stored Procedure 삭제 하기
(1) 일반 삭제
     Drop Proc [StoredProcedureName]
 (2) 존재 검사후 삭제
    IF exists (select * from sysobjects where name='sp_extract_rand_problem')
    Begin
        Drop Proc sp_extract_rand_problem
    End
    Go

5. Stored Procedre 작성중 쿼리에 변수 사용 못하는 경우
varchar형 변수에 쿼리 저장한후 EXEC함수로 실행한다
 
예)
  Declare @sql Varchar(200)
       
  SET @sql = 'SELECT TOP ' + CONVERT(varchar(5),@pagesize) + ' * FROM MyBoard '
  SET @sql = @sql + 'WHERE board_idx not in (SELECT TOP ' + CONVERT(varchar(5),(@GotoPage-1) *@pagesize)  
  SET @sql = @sql + ' board_idx FROM MyBoard ORDER BY b_ref desc, b_step) order by b_ref desc, b_step'
  --print @sql
  EXEC (@sql)

6. Query Analyzer 에서 sql문 실행하면 메시지 텝에 (30 row(s) affected) 같은 메시지가 나오지 못하게 하기 #

set NoCount On

7. Local Variable로 Text 타입을 사용 못하므로 varchar형으로 대체해서 사용함

8. Stored Procedure 내에서 동적 쿼리 사용하는 예
Create Proc sp_dynamic_sql
        @strTableName varchar(20) ,
        @intBoard_Idx int ,
        @prev_idx int OUtput
As
Begin
--꼭 nvarchar 이어야 함
declare @stmt as nvarchar(400)
declare @params as nvarchar(500)

--stmt와 paranms에 임시 output 변수를 사용하면 됨, 여러개의 파라미터 경우는 "," 로 구분한다.
set @stmt = 'Select @idx = Min(board_idx) from ' + @strTableName + ' where board_idx > ' + CONVERT(VARCHAR(10),@intBoard_idx)
set @params = '@idx  as int OUTPUT' -- OUTPUT 키워드에 주의
exec sp_executesql @stmt, @params, @idx = @prev_idx OUTPUT
End

9. 테이블 목록(MySql의 show tables기능)
exec sp_tables

10. 데이타 베이스 목록및 정보(MySql의 show database 기능)
exec sp_databases / exec SP_HELPDB

11. FK 관계가 설정된 값 변경하기(참고: http://www.sqler.pe.kr/sql2k/63.asp )
참조받는 쪽의 값을 변경하는 경우 참조하는쪽 테이블에 CASCADE 설정 필요함
--ex(sql.pe.kr에서 발췌)- --tempdb를 사용한다. USE tempdb GO


--학과 테이블을 생성한다. CREATE TABLE 학과( 학과ID varchar(5) primary key , 학과명 varchar(10) not null ) GO

--학생 테이블을 생성한다. --UPDATE는 새로운 CASCADE 옵션으로, --DELETE는 아무 처리도 하지않게(기본 옵션)으로 처리 한다. CREATE TABLE 학생( 학번 int primary key , 이름 varchar(12) not null , 학과ID varchar(5) FOREIGN KEY REFERENCES 학과 (학과ID) ON UPDATE CASCADE ON DELETE NO ACTION ) GO

--학과에 정보를 삽입 한다. INSERT 학과 VALUES ('ITE', '정보통신') INSERT 학과 VALUES ('EC', '전자계산') GO

--학생 테이블에 참조하는 학과(학과ID)컬럼의 값으로 삽입한다. INSERT 학생 VALUES (941234, '코난', 'ITE') INSERT 학생 VALUES (950083, '세린', 'EC') GO

--데이터를 조회한다. SELECT * FROM 학과 SELECT * FROM 학생

--참조제이 걸려 있는 학과(학과ID) 에 --CASCADE 옵션이 걸려 있는 UPDATE를 수행한다. UPDATE 학과 SET 학과ID = 'AAA' WHERE 학과ID = 'ITE' GO

--데이터를 조회한다. CASCADE 옵션이 잘 동작한다. SELECT * FROM 학생 SELECT * FROM 학과

--삭제를 해 보자. DELETE 학과 WHERE 학과ID = 'EC' --참조 제약으로 삭제가 불가 하다는 에러메세지가 나온다.


12. 커서 이용하기(참고: http://www.sqler.pe.kr mssql2000강좌)
dbo.student_tbl에 있는 데이타를 jls.member_tbl에 인서트 하는 루틴

 declare cur_test CURSOR
 For select student_id,pwd,'S'  from dbo.student_tbl        
 --For select teacher_id ,pwd,'T'  from dbo.teacher_tbl

 Open cur_test

 declare @member_id varchar(20),
            @passwd varchar(20),
            @member_type varchar(1),
            @sql varchar(200)
 FETCH NEXT FROM cur_test INTO @member_id, @passwd,@member_type

 WHILE (@@FETCH_STATUS = 0)
 BEGIN
  -- Set @member_id  = 't'+cast(@member_id as varchar(20))
   set @sql = 'insert into jls.member_tbl (member_id,passwd,member_type)values ('''+@member_id+''', '''+@passwd+''','''+@member_type+''' )'
   EXEC (@sql)
 
   FETCH NEXT FROM cur_test INTO @member_id, @passwd,@member_type
  END


  close cur_Test
  deallocate cur_test

ps) 커서 선언시 테이블 조건에 사용할 값에 변수를 직접 사용할 수는 있으나 테이블 명에 직접 변수 사용은 불가능 하므로 다음처럼 해서 커서를 선언 할 수 있다.
  Declare @SQL VARCHAR(400)  
  SET @SQL = 'declare cur_problem CURSOR '
  SET @SQL = @SQL + 'For SELECT problem_num,a.test_cont_info_id FROM '+@strTestTableName+' As a, test_cont_info_tbl As B WHERE course_code='+@strCourseCode
  EXEC(@SQL)

13. 데이터 베이스 계정 정보
exec sp_helplogins <--- 데이타베이스에 상관없이 로긴할 수 있는 넘들 다 보여준다.
exec sp_helpuser <--- 현재 데이타베이스의 유저들을 보여준다.

14. Procedure 에서 변수에 SELECT 결과 할당하기
(변수 이용하는 동적 쿼리는 5, 8 번 참고)
Declare @name VARCHAR(30)
SELECT @name FROM member WHERE id='user_id' Print @name

15. 컬럼 이름 변경(column name)
test테이블의 name 컬럼명을 user_name으로 변경

EXEC   sp_rename 'test.name', 'user_name', 'COLUMN'

16. column이 null이면 기본 값을 주는 함수
ISNULL ( check_expression , replacement_value )

17. sp 작성시 유의점
sp 작성시에는 상황에 따라서 적당한 return 값을 갖도록 한다. 그래야 sp 사용시 발생하는 문제점을 빨리 알 수 있다.

18. IDENTITY 초기화
DBCC CHECKIDENT (t_mark_histw_tbl, RESEED, 0)//table_name, RESEED, 초기값

19. ALTER문 정리
ㄱ. column 속성 변경 : ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR(20) NOT NULL


20. Index에 따르지 않고 정렬하기
상황 : study_contents_id가 93,92,94인 레코드를 조회 하는데 결과의 정렬이 93,92,94로 되기를 원하지만 study_contents_id가 index여서 92,93,94 순으로 오름차순 정렬이 된다.
해결책 : study_contents_id 값에 따라서 정렬하고자 하는 순서를 order_seq에 부여한다. 그리고 order_seq를 정렬조건으로 사용한다.
SELECT study_contents_id ,
CASE study_contents_id
       WHEN 93  THEN 1
       WHEN 92  THEN 2
       WHEN 94  THEN 3
       END AS order_seq
,course_code, FROM study_contents_tbl WHERE study_contents_id IN (93,92,94,) ORDER BY order_seq ASC

21. 로그인 이름이 비어있는 사용자 정보 수정하기.이상하게 EM에서는 수정이 안됨
(1). 로그인 계정(로그인 이름) 생성 : sp_addlogin 생성할유저명, 비빌번호, 디폴트DB
   예) EXEC sp_addlogin 'con_user', 'con_pass', 'test_db'

  (2). 데이터 베이스 로그인 계정 변경 : sp_change_users_login 액션, 데이터베이스의사용자이름
   예) EXEC sp_change_users_login 'Update_One', 'con_user', 'con_user'

  관련 게시물 : http://sqler.pe.kr/web_board/view_list.asp?id=45680&read=45&pagec=&found=is&part=myboard1&ser=yes

22. 객체 생성 스크립트
sp_helptext 함수를 이용하거나 syscomments 시스템 테이블을 이용하면 됨.

ㄱ.프로시져
  select text from syscomments where id in (select id from sysobjects where xtype='p' and name NOT LIKE 'dt%')

ㄴ.트리거
  select text from syscomments where id in (select id from sysobjects where xtype='tr' and name NOT LIKE 'dt%')

ㄷ.뷰
  select text from syscomments where id in (select id from sysobjects where xtype='v' and name NOT LIKE 'sys%')

23. 서버에 생성된 데이터 베이스 정보
--서버단위
--데이터베이스 서버 정보
 select srvname, srvproduct, providername, datasource from master..sysservers
--데이터베이스 로그 공간
 DBCC sqlperf(logspace) /*각 데이터 베이스의 트랜젹션 로그 공간 */

--각 데이터베이스 정보(데위터베이스명, 생성일, 파일)
 select  name, crdate, filename from master..sysdatabases

--데이터베이스 단위
--sp_spaceused , DBCC sqlperf(logspace)를 이용

declare cur_name CURSOR
For select name from master..sysdatabases

Open cur_name

declare @name varchar(100)
declare @command varchar(200)

Fetch Next From cur_Name Into @name

while(@@FETCH_STATUS =0)
begin
        print @name
          set @command = 'use ['+ @name+'] exec sp_spaceused' --use구문과 프로시져가 동일한exec에서 실행 되도록 해야함
        exec(@command)
        /*sp_spaceused  각 데이터 베이스의 사용 공간*/

        FETCH NEXT FROM cur_name INTO @name
end
close cur_name
deallocate cur_name

--데이터베이스 단위
--테이블 목록
--exec sp_tables [dbname]
select * from INFORMATION_SCHEMA.TABLES

--테이블 단위
--컬럼 목록 및 자료형
--exec sp_columns [tablename]
select * from INFORMATION_SCHEMA.COLUMNS where table_name = 'blog_data'

24. 데이터베이스 풀 백업
--pubs데이터 베이스를 e:\backup\backup-file로 백업하는 명령
--백업 파일 경로 지정시 드라이브의 루트를 설정하면 장치 오류가 발생하여 백업이 되지 않음으로
--임의의 디렉토리를 만들어서 사용한다.
BACKUP DATABASE pubs TO DISK = 'e:\backup\backup-file' WITH INIT

'Computer > Database' 카테고리의 다른 글

MySQL 팁  (4) 2005.07.10
MS-SQL - ConnectionString 샘플  (14) 2005.07.10
MS-SQL - 패치및 서비스팩 적용에 따른 버전 정보  (6) 2005.07.10
데이터 베이스 잡담...  (4) 2003.05.23
Oracle 기본 정리  (3) 2003.03.26
두개 이상의 인스턴스 EM에 등록하기  (4) 2002.11.04
Posted by Gu Youn
,