레이블이 Database인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Database인 게시물을 표시합니다. 모든 게시물 표시

2009년 6월 22일 월요일

[MYSQL] MYSQL SQL(스크립트) 파일 import 하기

리눅스 쉘에서 id와 pw를 입력하여 mysql을 실행후
내보내기 혹은 dump된 sql파일을 mysql을 실행할 디렉토리에 복사해놓습니다.
굳이 실행할 곳에 복사 안해도 상관은 없습니다만 경로 입력할때 풀경로를 다 입력해주어야합니다.
실행할곳에 복사를 해놓는경우 경로가 필요없이 ./스크립트.sql 이런식으로 입력해주면 간단해져요

mysql> source ./경로/스크립트.sql    실행하면 MSSQL에서 쿼리실행기로 실행한것처럼
실행되면서 쿼리가 실행되어진다.

2009년 6월 18일 목요일

[MYSQL] phpmyadmin 설치 후 오류 해결 방법

[root@vmm geniuskch]# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket /var/lib/mysql/mysql.sock' (2)

대책을 찾던 중 KLDP에 나온 내용으로 해결.

1. 퍼미션 문제
일반 유저에서
ls -al /var/run/mysqld/mysqld.sock
해서 확인을 해봅니다.

펼쳐두기..

2009년 5월 27일 수요일

[MYSQL] ※ 이미 생성된 테이블에 PK 및 FK 제약조건 추가하기

 

※ 이미 생성된 테이블에 PK 제약조건 추가하기


ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건이름] PRIMARY KEY(컬럼명);


EX) ALTER TABLE product ADD CONSTRAINT product_pdcode_pk PRIMARY KEY(pdcode);

product 라는 테이블에 product_pdcode_pk 라는 이름을 가진 PK 제약조건을 추가한다.


※ 이미 생성된 테이블에 FK 제약조건 추가하기


ALTER TABLE [테이블명] ADD CONSTRAINT [제약조건이름] FOREIGN KEY(컬럼명)

REFERENCES [부모테이블명](PK컬럼명) [ON DELETE CASCADE];


EX)
ALTER TABLE category ADD CONSTRAINT category_pcode_fk FOREIGN KEY(pcode)
REFERENCES product(pdcode) ON DELETE CASCADE;


※ 제약조건의 삭제


ALTER TABLE [테이블명] DROP CONSTRAINT [제약조건이름];


EX) ALTER TABLE product DROP CONSTRAINT product_pcode_fk;

제약조건을 삭제할 경우에는 FK 제약조건부터 먼저 삭제해준다.


※ NOT NULL 제약조건의 추가


ALTER TABLE [테이블명] MODIFY [컬럼명] [데이터타입] CONSTRAINT [제약조건이름]

NOT NULL;


EX) ALTER TABLE product MODIFY pname varchar2(20) CONSTRAINT product_pname_nn

EX) NOT NULL;

[MYSQL] 펌 - Foreign key 예제



 

MySQL foreign key 예제


a_tbl, b_tbl 두개의 테이블이 있다고 하자



 create table a_tbl(

 user_id varchar(10) not null default'',

 user_name varchar(30) not null default'',

 primary key(`user_id`)

 ) engine=innodb;





 create table b_tbl(

 user_id varchar(10) not null,

 user_tel varchar(15) not null,

 primary key(`user_id`),

 constraint fk_user_id       -- 제약조건명 : fk_user_id

 foreign key (`user_id`)     -- 테이블의 필드(user_id)가 foreign key

 references a_tbl(`user_id`) -- 테이블(a_tbl)의 필드(user_id)를 참조 

 on delete cascade           -- 참조키가 삭제되면 foreign key도 삭제

 on update cascade           -- 참조키가 업데이트되면 foreign key도 업데이트

 ) engine=innodb;


 CASCADE : 참조키가 삭제되거나 업데이트 되면 동일하게 foreign key도 동일하게 맞춤.

 RESTRICT : 참조키 변경(삭제 혹은 업데이트)되는 것을 방지함.

 SET NULL : 참조키에 변경(삭제 혹은 업데이트) 되면 foreign key 값을 null 로 저장.

 NO ACTION : 참조키에 변경(삭제 혹은 업데이트) 되어도 아무런 동작을 하지 않음.(foreign key의 이미 없음)


 각 테이블에 데이터 입력를 입력하자.



 insert into a_tbl values('happy','hong gil dong');

 insert into a_tbl values('appleman','lee soon shin');

 insert into a_tbl values('keeper','lee myoung park');


+----------+-----------------+

| user_id  | user_name       |

+----------+-----------------+

| appleman | lee soon shin   |

| happy    | hong gil dong   |

| keeper   | lee myoung park |

+----------+-----------------+

3 rows in set (0.00 sec)





 insert into b_tbl values('happy','010-1234-5678');

 insert into b_tbl values('appleman','011-4321-8765');

 insert into b_tbl values('keeper','016-9876-5432');


+----------+---------------+

| user_id  | user_tel      |

+----------+---------------+

| appleman | 011-4321-8765 |

| happy    | 010-1234-5678 |

| keeper   | 016-9876-5432 |

+----------+---------------+

3 rows in set (0.00 sec)




 각 두테이블을 조인하자.


 mysql> select a.user_id, b.user_id, a.user_name, b.user_tel from a_tbl a join b_tbl b where a.user_id=b.user_id;

+----------+----------+-----------------+---------------+

| user_id  | user_id  | user_name       | user_tel      |

+----------+----------+-----------------+---------------+

| appleman | appleman | lee soon shin   | 011-4321-8765 |

| happy    | happy    | hong gil dong   | 010-1234-5678 |

| keeper   | keeper   | lee myoung park | 016-9876-5432 |

+----------+----------+-----------------+---------------+


참조키를 업데이트한 후에 확인하자.



 mysql> update a_tbl set user_id='sadman' where user_id='happy';

 Query OK, 1 row affected (0.00 sec)

 Rows matched: 1  Changed: 1  Warnings: 0


mysql> select a.user_id, b.user_id, a.user_name, b.user_tel from a_tbl a join b_tbl b where a.user_id=b.user_id;

+----------+----------+-----------------+---------------+

| user_id  | user_id  | user_name       | user_tel      |

+----------+----------+-----------------+---------------+

| appleman | appleman | lee soon shin   | 011-4321-8765 |

| keeper   | keeper   | lee myoung park | 016-9876-5432 |

| sadman   | sadman   | hong gil dong   | 010-1234-5678 |

+----------+----------+-----------------+---------------+

3 rows in set (0.00 sec)


= 출처 =

운영자 : 김두형(www.sunmysql.co.kr)

email : beansoft@nate.com

업데이트 : 20080923

2009년 5월 16일 토요일

[MYSQL] 컬럼 순서 바꾸기



alter table 테이블명 add 컬럼명 type명 after 위치할컬럼명;
이렇게 하면 위치할컬럼명 밑에 컬럼명이 위치됩니다

alter table 테이블명 modify 컬럼명 type명 after 위치할컬럼명;
이것은 기존 컬럼명 위치를 수정할때 쓰는 방식..

2009년 5월 15일 금요일

[MSSQL] MSSQL2000에서 외부 접속 하는 방법

MSSQL2000에서 외부 접속 하는 방법

1. 서버 설치 시 유의사항
- Enterprise Edition 은 설치가 되지 않는다.
- Personal Edition 으로 설치를 한다.
- 인스턴스를 수동으로 생성하고..
- 인증모드 부분에서는 sql server 인증으로 비밀번호를 정하고..
 
2. 원격에서의 접속
- 로컬에서의 서비스는 문제 없다..
- 1433 포트는 외부에서 telnet 으로 붙을 수 없다..
- mssql server 2000 service pack 4 를 다운받아 설치한다.
- 다운받아서 설치하면.. 폴더가 생기고.. 배치파일(.bat) 파일을 실행시켜서 수동으로 설치
- 인스턴스를 선택해서 기존 DB 업데이트.. (master db 등은 초기화 되므로 유의..)
- 설치 완료~

윈도우 공식홈페이지 MSSQL2000 서비스팩4 다운받기

2009년 4월 8일 수요일

MSSQL2000 테이블 열 레코드 자동증가값 초기화 방법

테이블 시퀀스 필드의 경우 대부분 자동증가값을 이용을 하는데요.
어떤 경우 이부분에 있어 다시 재 초기화가 필요한 경우가 있습니다.
중간에 사라진 레코드가 너무 많아서 시퀀스값 사이가 클 경우 이겠지요..

DBCC CHECKIDENT(Table명,RESEED,초기값)

ex, DBCC CHECKIDENT(tb_board,RESEED,1)

초기값은 시퀀스값을 초기값을 기준으로해서 값이 증가합니다

초기값이 1이면 쿼리로 글 작성시 입력되는 값은 증가하면서 2로 삽입됩니다

MSSQL에서 DB 복원 후 사용자에 로그인이름이 없어 오류가 나는 문제

출처 : http://blog.naver.com/ahab01/20032654907


MSSQL2000 에서 백업 받은 DB를 다른 서버에 있는 MSSQL2000 에 복원 시켰을때

해당 DB의 사용자가 있는데 로그인 이름이 없어 로그인이 안되는 문제가 있다.

이 문제는 해당 DB를 사용하는 사용자의 GUID가 syslogins.sid 테이블에 있는 것과 다르기 때문이다.

EM에서 사용자에 가 보면 사용자 이름은 있는데 로그인 이름은 비어 있을 것이다.

이것을 해결하기 위해서는 새 서버의 로그인 계정과 복원한 DB의 사용자를 연결해야 한다.


먼저 쿼리매니저에서 연결되지 않은 계정을 확인한다.


sp_change_users_login 'Report'

go


하면 사용자는 있는데 연결되지 않은 사용자의 아이디가 나온다.

 나오는 이름을 확인하고


sp_change_users_login 'Update_one', 'username', 'username'

go


를 하면 연결 작업이 끝난다. EM에서 사용자를 보면 로그인 이름이 생겨있다.


이제 DB에 해당 사용자로 연결이 되는지 확인하면 된다.


2009년 3월 30일 월요일

MYSQL ROOT 패스워드를 변경해보자

1. mysql root 패스워드를 변경해보자(리눅스)


<우선 mysql start 하기>

mysql설치루트/bin>./mysqld_safe &


<mysql 접속하기>

mysql설치루트/bin>./mysql -u root mysql


<password 변경하기>

mysql> use mysql;


mysql> update user set password=password('new-passwd') where user = ('root');


mysql> flush privileges;

(참고 : update문을 사용하여 암호가 바뀌었을땐 flush privileges를 이용하여 사용자 관련 테이블에 알려야 함)


마지막으로 서버 재실행



2. 패스워드 분실시


패스워드 분실시 빠르게 root 패스워드를 변경 해보자


우선 mysql를 stop 한 환경에서 작업을 해야 한다.


<권한 테이블을 사용하지 않겠다고 선언하면서 서버 start>

mysql설치루트/bin> ./mysqld_safe --skip-grant-tables &


<mysql 데이터베이스로 바로 접속>

mysql설치루트/bin>./mysql -u root mysql


<update문으로 패스워드 변경>

mysql>update user set password=password('new-passwd') where user = 'root';


<mysql 접속 종료>

mysql>quit


<mysql stop하기>

mysql설치루트/bin>./mysqladmin -u root -p shutdown


<mysql 재시작>

mysql설치루트/bin>./mysqld_safe &


<mysql 접속하기>

mysql설치루트/bin>./mysql -u root -p

password:


mysql>

 

MYSQL 사용자 생성 및 권한 설정

우선 사용자를 생성하기 위해서 Root 권한으로 Mysql에 접속을 합니다.


#> Mysql  -u root -p

Enter Password : ######


mis13 이란 유저가 Mis13이란 DB의 권한을 가지게 해보겠습니다. (암호는 mis1313)


mysql> GRANT ALL PRIVILEGES ON Mis13.* to mis13@localhost IDENTIFIED BY 'mis1313' WITH GRANT OPTION;


mysql> flush privileges;


작성해주시면 끝... mis13으로 접속을 하시면 Mis13이란 DB만 보이실겁니다.


2. 그 밖에 외부에서도 접속하기, 모든 DB권한 주기


어떤 DB도 접속 가능하게 권한을 주는것은

mysql> GRANT ALL PRIVILEGES on *.*  to mis13@localhost IDENTIFIED BY 'mis1313' WITH GRANT OPTION;

mysql> flush privileges;


슈퍼유저로 (즉 root 권한으로) 권한을 주는것은

mysql> GRANT ALL PRIVILEGES on *.*  to mis13@"%" IDENTIFIED BY 'mis1313' WITH GRANT OPTION;

mysql > flush privileges;


GRANT 명령어 말고 Mysql DB 안에 User, DB 테이블에 넣는 법도 있지만 초보분이 사용하시기엔

이 방법이 편하실겁니다.


3. 모든 권한이 아닌 부분별 골라서 주기


예) mis13 이라는 계정이 전체 데이터베이스에 대해서 select, insert, delete, update 권한만 주고 싶을 경우

mysql>GRANT select, insert, delete, update on *.* to mis13@localhost IDENTIFIED BY 'mis1313' WITH GRANT OPTION;

mysql> flush privileges;


예) mis13 이라는 계정이 Mis13 이라는 데이터베이스에 대해서 select, insert, update 권한만 주고 싶을 경우

mysql>GRANT select, insert, update on Mis13.* to mis13@localhost IDENTIFIED BY 'mis1313' WITH GRANT OPTION;

mysql>flush privileges;

2009년 3월 18일 수요일

ASP에서 MSSQL 연동해서 쿼리 출력하는 예제

안녕하세요? 웹프로그램에 가장 흥미와 제미 있을시기가 지금 님의 시기인듯 한데요

상세한 정보를 원하신다면 제가 끝에 남긴곳에 강좌를 보시구요

저는 실전적으로 바로 적용할수 있고 초보개발자가 빨리 이해할수있는 수준으로 글을 작성하겠습니다.

따라서 학술적이나 이론적으로는 상이함이 있을수 있습니다만...

님이 원하시는 답변의 핵심에 최대한 접근해보도록 노력하겠습니다.

소스작성 순서는

디비접속객체로 디비접속 =>디비 내용 전달 객체생성=>변수활용 쿼리작성=>디비내용전달객체에 쿼리실행에 의한 테이블내용 담기=>리스팅 뿌리기

이상이 순서입니다.

주석을 확인하시면 미약하지만...^^; 설명이 있습니다.
소스
<%
constr="Provider=SQLOLEDB;Data Source=localhost;Initial Catalog=디비명;User ID=유져아이디;Password=비밀번호;Network Library=dbmssocn"
Set db = Server.CreateObject("ADODB.Connection") 'db라는 컨넥션 object 를 생성합니다.
db.Open constr

'위내용은 constr 변수 내용으로 db라는 object로 데이터베이스에 접속한다는 뜻입니다.


Set rs = Server.CreateObject("ADODB.Recordset")

'rs라는 레코드셋 object 생성합니다. rs안에 테이블내용이 들어갑니다.
Set rs.ActiveConnection = db 'rs는 접속할것이다 db라는 객체를 활용해서

'위내용은 테이블 내용을 전달할 rs object 선언과 rs는 db object 를 활용해서 디비에 접속한다는 뜻입니다.


strSql ="select * from  table " 'strSql 이라는 변수에 실행 쿼리를 작성
rs.Open strSql 'strSql 변수의 내용(쿼리)으로 rs에 테이블 내용을 담으라는 뜻입니다.

'위내용은 strSql 의 변수 활용으로 쿼리 작성해서 rs가 그것을 활용해서 테이블 내용을 가져오는 과정입니다.


while not(rs.EOF) '루프를 돌립니다. 테이블의 끝레코드가 아니면 계속 루프가 돌아가라는 조건으로

response.write rs("필드명") &"<br>" '뿌려야할 필드를 출력

rs.MoveNext '다음레코드로 이동

wend '루프의 끝

'위내용은 rs 가 갖고 있는 필드내용을 출력하는 예제입니다. 그리고 그다음 레코드가 이동이 되는 과정도 있구요
%>

이상이 디비에 있는 내용을 출력하는 소스 예제이구요...

물론 객체를 생성했으면 close 하고 nothing 해야한다 변수선언 똑바로 안하냐?
그런 내용의 테클적인 글도 올라올수 있겠으나...

님이 원하는 질문의 핵심에 최대한 접근이 이글 작성의 목표입니다.

상세한 학습을 원하신다면 teayo 사이트의 asp 강좌를 보시면 정말 잘나와있습니다.


제글이 도움이 되셨으면 합니다. 좋은하루요 ^^

MSSQL2005의 권한 설정 설명

MSSQL2005의 변화된 권한 설정 DB/SQL 노트
자료 출처 : http://blog.naver.com/c1dong8/10019140217

MSSQL2000에서는 권한설정을 하면 SQL을 기준으로 권한을 주었다. 예를 들면 검색권한을 주고싶으면 select 권한을 주는 식으로 필요한 권한을 체크해주는 식이였다.

그래서 MSSQL2005왔을때 많이 해맸다-_-;;;;

어찌됫건 MSSQL2005와서 권한 설정의 가장큰 변화는 로그인권한과 데이터베이스 사용권한을 따로 생성해야하는 것인거 같다.

MSSQL2000때는 로그인권한을 가진 유저를 각DB에 추가시키는 방식으로 권한을 주었지만 MSSQL2005부터는 로그인권한을 가진 유저를 만든후 DB에 유저를 추가시킨다음 만든 로그인과 연결된 권한을 생성하는 방식이다.(C#으로 보자면 인스턴스를 만들어서 접근하는 것과 비슷한거 같다.) 간단하게 말하자면 로그인하는 계정과 DB를 사용하는 계정을 따로 생성해야 한다는 것이다.


로그인 계정을 만드는 것은 MSSQL2000때와 같다. 보안>로그인 에서 새 로그인을 만들어주면된다.

이제 DB로 가서 보안>사용자 새 사용자를 추가한다. 사용자이름을 추가하고 아까만든 로그인(로그인 이름)을 설정해준다.

기본 스키마는 자신보다 높은 권한을 가진 스키마를 설정해야한다. 디폴트로 dbo로 되있는데 dbo의 정보를 보면 오너 권한이 있는걸 알수있다. 사용자를 만들면 자동으로 스키마도 생성해주므로 필요하다면 다른 스키마를 선택해도 된다.

밑에보면 데이터베이스 역할 멤버 자격 이라는 칸이 있는데 이것이 예전의 권한설정부분이다.

MSSQL2000과 많이 달라진 것중하나가 권한설정 부분이다. 어디서 본것 같다했는데.....오라클할때 배운거 같다-_-;;;

권한을 설명하자면


역할 멤버

설명

db_accessadmin

Windows 로그인, Windows 그룹 및 SQL Server 로그인에 대한 액세스를 추가하거나 제거할 수 있습니다.

http://technet.microsoft.com/ko-kr/library/ms191451(SQL.90).aspx

설명으로 봐서는 로그인에 대한 계정을 추가 삭제할수 있는 권한이다.

db_backupoperator

데이터베이스를 백업할 수 있습니다.

http://technet.microsoft.com/ko-kr/library/ms189041(SQL.90).aspx

말그대로 DB를 빽업할 수 있다.

db_datareader

데이터베이스에 있는 테이블이나 뷰에 대해 SELECT 문을 실행할 수 있습니다.

http://technet.microsoft.com/ko-kr/library/ms188629(sql.90).aspx

보통 이 권한을 염두하고 프로그램을 만들었으니 변환한 DB의 사용자는 거의 이 권한으로 주었다.

db_datawriter

모든 사용자 테이블에서 데이터를 추가, 삭제 또는 변경할 수 있습니다.

http://technet.microsoft.com/ko-kr/library/ms175039(SQL.90).aspx

MSSQL2000 에서는 안써본기능이라 잘 모르겠다;;

db_ddladmin

데이터베이스에서 모든 DDL(데이터 정의 언어) 명령을 실행할 수 있습니다.

http://technet.microsoft.com/ko-kr/library/ms190667(SQL.90).aspx

데이터 정의어로 오라클에서는 테이블을 생성,삭제,변경할 수 있는 권한이었는데 여기서도 그런거 같다

db_denydatareader

데이터베이스 내에 있는 사용자 테이블의 데이터를 읽을 수 없습니다.

http://technet.microsoft.com/ko-kr/library/ms187916(SQL.90).aspx

어디에 쓰이는지 모르겠다;;

db_denydatawriter

데이터베이스 내의 사용자 테이블에 있는 데이터를 추가, 수정 또는 삭제할 수 없습니다.

http://technet.microsoft.com/ko-kr/library/ms188308(SQL.90).aspx

안써봐서 모른다;;

db_owner

데이터베이스에서 모든 구성 및 유지 관리 작업을 수행할 수 있습니다.

http://technet.microsoft.com/ko-kr/library/ms180977(SQL.90).aspx

개발할 때 이 권한을 주면 편하다 ㅡ.-;;;

db_securityadmin

역할 멤버 자격을 수정하고 사용 권한을 관리할 수 있습니다.

http://technet.microsoft.com/ko-kr/library/ms188685(SQL.90).aspx

Database Roles에서 사용자를 추가, 삭제, 객체사용권한등을 변경할 수 있다.

Public

사용자를 만들면 들어가있는 권한


어디에 쓰이는 권한인지는 모르겠다.


이렇게 역할 멤버 자격까지 주면 사용자가 추가된다.



저장프로시저를 이용하기위해서는 전처럼 하나하나에 권한을 추가해주어야한다.

프로그래밍 기능<저장 프로시저 에서 해당 저장프로시저에서 오른쪽 클릭을 하여  속성을 눌러 속성창을 연다.

사용권한에 보면 사용자 또는 역할이 있는데 아까 만들었던 사용자(로그인이 아님)를 추가하고 Execute권한에 체크를 한다. 스키마 밑에 보면 '스키마 사용 권한 보기'라는 것이 있는 이것을 누르면 연결된 스키마의 권한 정보가 나온다. 로그인 사용자를 누르고 Execute권한에 체크를 한다.(어느 사이트의 설명에서는 권한을 위임받아서 사용한다고 되있었다.)

유효 사용 권한을 눌러보면 연결이 제대로 됬는지 확인해 볼수 있다.


좀 복잡한 느낌은 들지만 나는 어차피 테이블을 다 만들어놓고 그것에 마쳐 프로그래밍을 하기때문에 어차피 쓰는권한은 한정되있으니 별로 걱정은 되지 않지만....예상보다 구하기 힘든 자료에 당황스러웠다;;;(도움말이 이렇게 허접하게 느껴질줄이야-_-;;)

이제 완벽하니 다음 포맷때는 삽질 말아야지

MSSQL 접속프로그램 다운받기(서버 운영 프로그램도 포함)

MSSQL서버에 접속하는 프로그램을 다운받으려면 아래 주소에 가서
SQL Server Management Studio Express 를 다운받는다
MSSQL 서버를 운영하고 싶다면 SQL Server 2005 Express Edition SP1 을 다운 받는다

http://www.microsoft.com/korea/msdn/vstudio/express/sql/download/