이 문서는 포스트그레스의 Index,function,trigger,grant,revoke,Large Object를 예제와 함께 설명한 글이다. ===================================================================================== 1.1 CREATE INDEX CREATE [UNIQUE] INDEX index_name ON table_name CREATE [UNIQUE] INDEX index_name ON table_name ACCESS METHOD . 디폴트는 BTREE 이다.(BTREE,RTREE,HASH) INDEX 생성 1 example 2) INDEX 생성 2 CREATE INDEX indx2 example 3) INDEX 생성 3 CREATE INDEX indx3 example 4) INDEX 생성 4 CREATE INDEX indx4 example 5) INDEX 삭제 DROP INDEX indx1; ===================================================================================== INCREMENT : 이값이 -1 이면 -1 만큼 감소 , 3 이면 3씩 증가, 디폴트는 1 이다. CREATE SEQUENCE seq_name1 START 101; 결과 nextval ===================================================================================== LANGUAGE : sql, pgsql, c 등이 있다. CREATE FUNCTION test() RETURNS int4 실행 결과 AS ‘ 와 ‘ 사이에 함수의 본문을 기입하면 된다. 참고로 문자열일 경우, CREATE FUNCTION test() RETURNS int4 여기서 NEXTVAL 은 SEQUENCE 관련 내장함수이다. 1.4 예제 \i /usr/local/src/test.sql –create sequence seq_test1,seq_test2,seq_test3 –create table tab_test1,tab_test2,tab_test3 CREATE TABLE tab_test2( CREATE TABLE tab_test3( –craete index –FUNCTION func_test() –transaction 1 INSERT INTO tab_test1 VALUES (func_test(),’jini2′,’100-0000′,’No_Memo2’); INSERT INTO tab_test1 VALUES (func_test(),’jini3′,’200-0000′,’No_Memo3’); INSERT INTO tab_test1 VALUES (func_test(),’jini4′,’300-0000′,’No_Memo4’); INSERT INTO tab_test1 VALUES (func_test(),’jini5′,’400-0000′,’No_Memo5’); END; –transaction 2 ——————————————————————-End !! ===================================================================================== GRANT privilege [,…] ON object [,…] privilege object Table PUBLIC GROUP group username Description Notes permission 정보의 형식 a : INSERT privilege USAGE(사용예) GRANT ALL ON imsi_table TO nogadax 2.2 REVOKE REVOKE privilege [,…] privilege object group username Description REVOKE ALL ON imsi_table FROM nogadax CREATE TRIGGER name { BEFORE | AFTER } { event [ OR …]} event : INPUT , UPDATE , DELETE 등이 올 수 있다. TRIGGER 를 촌스럽게 표현하자면 방아쇠를 당기면 총알이 나가는 것에 비유할 수 있다. example supplier 테이블에 DELETE, UPDATE 가 발생하면 이 동작이 행해지기 전에 example 3.2 TRIGGER 실행을 위한 PL/pgSQL등록 방법 방법은 두가지가 있다. postgreSQL의 PATH : 여기서의 PATH 는 /usr/local/pgsql 이다. 또한 pgsql 디렉토리 밑의 등록 과정 [postgres@nogadax postgres]# psql template1 등록 과정 [postgres@nogadax postgres]# psql nogadax 3.3 TRIGGER 예제 1 [podtgres@nogadax postgres]$ psql nogadax ——————————————————-Cut here!! –DROP all Object for safe_test –Create Table CREATE TABLE test2( –SELECT TRACTION ———————————————————-End !! 3.4 TRIGGER 2 trigger_name : TRIGGER 의 이름 DESCRIPTION 또한, 트리거가 AFTER 키에 의해 event후에 기동되어지면, 최근의 삽입,UPDATE,삭제 NOTES 3.5 TRIGGER 예제 2 —————————————————-Cut here !! DROP TRIGGER tab1_trg ON test1; DROP FUNCTION tab1_func(); DROP TABLE test1; CREATE TABLE test2( CREATE TABLE test3( CREATE TABLE test4( CREATE FUNCTION tab2_func() RETURNS opaque CREATE FUNCTION tab3_func() RETURNS opaque CREATE TRIGGER tab2_trg AFTER CREATE TRIGGER tab3_trg AFTER INSERT INTO test1 VALUES (2); INSERT INTO test1 VALUES (3); INSERT INTO test1 VALUES (4); ———————————————–End !! 4. PL/pgSQL Installing Procedural Languages 공유객체인 처리기는 컴파일된 후 인스톨되어야 하는데 디폴트로 PL/pgSQL 은 PostgreSQL 설치시 PL/pgSQL 언어 처리기를 설치하기 위해서는 먼저 위의 라이브러리 디렉토리에서 “plpgsql.so” 를 확인 후 CREATE FUNCTION 와 CREATE PROCEDURAL LANGUAGE 에 의해 각 데이타베이스 에서 등록을 하여야 PL/pgSQL 처리기 등록 예제 혹은 위의 문을 화일로 저장한후 \i 를 사용할 수 있다. template1=> \i /usr/local/src/plsql_inst.sql “CREATE TRUSTED PROCEDURAL LANGUAGE” 에서 TRUSTED 키워드는 PostgreSQL 의 슈퍼유저 권한이 없는 2. PL/pgSQL OVERVIEW 설명 PL/pgSQL 은 블럭 지향언어이다. 블럭은 다음처럼 정의되어진다. [ Label ] 블럭의 statements구역내에 여러개의 sub-block이 생성될 수 있으며 이는 서브블럭내의 변수 들을 — : 한 라인의 주석처리 example 설명 4.2 PL/pgSQL 2 DROP FUNCTION test1(); CREATE TABLE tab1 ( CREATE FUNCTION test1() RETURNS int4 SELECT test1(); 설명 Trigger Procedure 트리거 프로시져로서 생성된 함수에는 약간의 특수한 변수를 가지며 이는 자동으로 생성되어 지며 NEW : ROW 레벨 트리거상에서 INSERT/UPDATE 로 인해 새로리 생성된 4.3 예제 ——————————————————-Cut here !! IF NEW.empname ISNULL THEN IF NEW.salary ISNULL THEN –EXCEPTION TEST ————————————————————————–End !! 설명 RAISE EXCEPTION ”% cannot have NULL salary”, NEW.empname ; 위의 문에서 ” 와 ” 사이의 % 는 NEW.empname 의 값을 출력한다. 정리 Declaration : 선언부 –var_a 변수의 DEFAULT의 값은 5이다. var_a 변수는 test_table 의 테이블 구조를 가진다. name RECORD 특정 테이블의 구조를 가지지 않고 selection 의 결과에 name ALIAS FOR $n; Data Type : 자료형 Postgres-BaseType : 포스트 그레스의 기본 자료형( int4,integer,text,char,..) variable%TYPE class.field%TYPE Expression Select expression Statement : 처리문장 identifier :=expression; SELECT expressions INTO target FROM … PERFORM query : Calling another function RETURN expression; RAISE [NOTICE | EXCEPTION] ” message % ”,variable IF expression THEN 5. Large Object with Transaction 포스트그레스는 Large Object 라는 개념으로 이를 극복하려한다. 과거에 포스트그 레스는 이런 큰 포스트그레스는 Large Object 를 쪼개어 이를 데이타베이스의 튜플들에 저장한다. B-tree 인덱스는 다음은 예제이다. ——————————————————————– BEGIN WORK; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; create table image( insert into image (name , raster) select lo_export (image.raster , ‘/tmp/snap.gif’) COMMIT WORK; Large Object Note 설명 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 포스트그레스의 트랜잭션의 디폴트 레벨은 “READ COMMITTED” 로서 트랜잭션 내의 SERIALIZABLE 는 포스트그레스의 가장 강력한 트랜잭션 레벨로서 트랜잭션내의 OID 는 객체에대한 포스트그레스의 시스템 관련 식별자이다. lo_import(읽어올 데이타의 PATH); 는 데이타를 읽어들이는 Large Object 관련 lo_export( OID , 데이타가 쓰여질 시스템의 PATH); 는 데이타를 읽어서 꺼내는 COMMIT WORK; 는 트랜잭션의 완료를 의미한다. 이로 인해 실질적인 갱신이나 삭제등이 5.2 TRANSACTION 일관성 : 트랜잭션의 수행에 대해 데이타베이스의 데이타들의 일관성은 분리 : 각 트랜잭션은 분리되어 다른 트랜잭션중에 간섭해서는 안된다. 영구성 : 트랜잭션의 수행후 commit 된 데이타들은 영구적으로 유지되어야 트랜잭션 관련 SQL 명령어 정리 COMMIT [WORK | TRANSACTION] END [WORK | TRANCTION] LOCK [TABLE] name ROLLBACK [WORK | TRANSACTION] 위의 INSERT문 이 성공적으로 수행되었다면 commit 될것이다. 이를 autocommit 라 하는데 또한 다른말로 unchained mode 포스트그레스에서의 일반적인 명령들의 실행은 unchained mode 이다. “각각의 문장(statement)들은 암시적인 트랜잭션내에서 실행되어지고 결국은 개별적인 SQL 문들의 실행에 있어 사용자들은 자신도 모르게 BEGIN 문 바로 뒤에 SET 문을 사용하여 그 트랜잭션의 트랜잭션 분리 레벨 트랜잭션 분리 정책은 여러 유저의 동시성 에 대한 보다 강력한 제한이라 할 6. 참고 문서와 기타 programmer’s guide
|
Category: MariaDB MySQL
about mariadb mysql
mysql rank function
mysql rank function
create table ds (id int(11), login int(11))
insert into ds (id, login)
values (1,1),
(2,1),
(3,1),
(4,2),
(5,2),
(6,6),
(7,6),
(8,1)
select result.id,result.login,result.rank from (
SELECT id,
login,
IF(login=@last,@curRank:=@curRank,@curRank:=@_sequence) AS rank,
@_sequence:=@_sequence+1,
@last:=login
FROM ds , (SELECT @curRank := 1, @_sequence:=1, @last:=0) r
ORDER BY id asc) as result;
#가상 호스트 연결
/etc/httpd/conf.d/vhost.conf 파일 생성 후 아래내용 기입만하면 됨.
<VirtualHost *:80>
DocumentRoot /home/onepage/public_html
ServerName onepage.dev
ServerAlias www.onepage.dev
<Directory “/home/onepage/public_html”>
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /home/wpuser/public_html/cosmos
ServerName cosmos.dev
ServerAlias www.cosmos.dev
<Directory “/home/onepage/public_html”>
Require all granted
</Directory>
</VirtualHost>
#shutdown -h +10
#shutdown -r 21:00
#shutdown -r now 바로 재부팅
#shutdown -c
#shutdown -k now 현재 접속자에게 종료메시지만 보내고, 실제로는 종료하지 않음.
#shutdown -r now, reboot , init 6 : 재부팅 명령
로그아웃
#logout , exit
리눅스 가동하는 방법
런레벨: 7단계(init 명령)
#init 0 : 종료
#init 1 : 단일 사용자모드(시스템복구)
#init 2 : 다중 사용자모드
#init 3 : 텍스트모드의 다중사용자모드
#init 4 : 사용하지 않음
#init 5 : 윈도우모드의 다중사용자모드
#init 6 : 재부팅 모드
tty
Ctrl + alt + F2, F3, F4, F5, F6
부팅메시지
/var/log/messages
#dmesg 명령으로 확인
#man [분류번호] <명령어>
[space] : 다음 페이지
[b] : 이전 페이지
/검색문자열 [Enter]
?검색문자열 [Enter]
[n] : 다음 단어로 이동
[q] : 종료
#vi abc.txt
vi의 세가지 모드 : 입력/명령/실행
입력모드 : 글자입력
명령모드 : 파일편집
실행모드 : 파일 저장, 읽기, 외부명령실행, 종료 등
커서의 이동
한문자씩 이동 h : 왼, j : 위, K : 아래, l : 오른쪽
단어의 이동
w : 다음단어의 첫글자로
b : 이전단어 처음
e : 다음단어의 끝
행단위 이동
^ : 맨위쪽의 첫글자
$ : 마지막글자의 끝
G : 파일의 마지막행
nG :
입력모드 : a, i – esc, :w, :q :wq :q!
명령모드 -esc
x: 한글자 지우기 dw : 커스 오른쪽 단어 삭제 db : 커서왼쪽단어 삭제
dd : 한줄삭제 ndd: 여러줄 삭제 yy : 한줄복사, nyy : 여러줄 복사
p : 현재 커서 아래로 붙여넣기 np : n번 붙여넣기
u : 복구하기
r+문자 : 한글자 치환 R : 치환모드 cw : 한단어 치환하기
%s치환문자 치환할문자
~ : 대소문자 전환
/검색어 : 아래방향으로 찾기 ?검색어 : 윗방향으로 찾기 n : 다음 찾기
텍스트모드 마운트
mount <장치명> <마운트포인트>
mount /dev/cdrom /media/cdrom
mount /dev/sdb1 /media/usb
umount <장치명> 또는 마운트포인트
MySQL Rank Function Implementation
create table ds (id int(11), login int(11))
insert into ds (id, login)
values (1,1),
(2,1),
(3,1),
(4,2),
(5,2),
(6,6),
(7,6),
(8,1)
select result.id,result.login,result.rank from (
SELECT id,
login,
IF(login=@last,@curRank:=@curRank,@curRank:=@_sequence) AS rank,
@_sequence:=@_sequence+1,
@last:=login
FROM ds , (SELECT @curRank := 1, @_sequence:=1, @last:=0) r
ORDER BY id asc) as result;
mssql to mysql conversion
mssql to mysql
http://www.mysqltutorial.org/mysql-data-types.aspx
1. isnull ==> ifnull — 쿼리에서만 변경해야.
- index.asp 224 chk_DAU_Count > “0” 데이타 타입 미스매치 –> csng
- getdate() ==> now()
- top 3 ==> limit 3 or limit 0, 3
- dbo. ==> 공백
- datediff(hh,ubb_indt,getdate()) ==> TIMESTAMPDIFF(HOUR, ubb_indt, now())
- convert(varchar(10),regdate,120) ==> date_format(regdate,’%Y-%m-%d’)
- convert(varchar(10),regdate,112) ==> date_format(regdate,’%Y%m%d’)
- view에서 –> end if ; 세미콜론 주의
- db connection 다수 –> 모두 찾아 대체 utf 포함.
- with(nolock) ==> 공백 , (nolock) ==>공백
- nCount from db return == > 타입 캐스팅 csng
- 현재 부모경로 사용 상태임 — > 수정 변경 필요
- mysql ltrim, rtrim 지원됨
- exec sp_xx ==> call sp_xx 프로시져 호출
- mysql 뷰생성시 from 절 뒤 서브쿼리는 사용 불가능하다
- TIME_TO_SEC(TIMEDIFF(‘2007-01-09 10:24:46′,’2007-01-09 10:23:46’))
- not in(select * frm table limt) ==> This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME subquery’
- select charindex(‘st’,’myteststring’) 0 ==> SELECT INSTR(‘myteststring’,’st’); 1 인덱스 주의
mssql to mysql
- default ‘getdate()’ –> ‘000-000-000’ ==> 다시 어플에서 now() 추가
- Visual Studio 2010 Tools for Office Runtime — mssql -> 엑셀 -> mysql 로 convert
- mysql for excel
mssql to mysql : exists
IF EXISTS (SELECT 1 FROM Table WHERE FieldValue=”)
BEGIN
SELECT TableID FROM Table WHERE FieldValue=”
END
ELSE
BEGIN
INSERT INTO TABLE(FieldValue) VALUES(”)
SELECT SCOPE_IDENTITY() AS TableID
END
— rewritten for MySQL
IF (SELECT 1 = 1 FROM Table WHERE FieldValue=”) THEN
BEGIN
SELECT TableID FROM Table WHERE FieldValue=”;
END;
ELSE
BEGIN
INSERT INTO Table (FieldValue) VALUES(”);
SELECT LAST_INSERT_ID() AS TableID;
END;
END IF;
myql procedure
http://code.tutsplus.com/articles/an-introduction-to-stored-procedures-in-mysql-5–net-17843
DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(IN countryName VARCHAR(255))
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ;
CALL GetOfficeByCountry(‘USA’)
Microsoft SQL Server Type Mapping
10.5.4 Microsoft SQL Server Type Mapping
Table 10.2 Type mapping
Source Type | MySQL Type | Comment |
---|---|---|
INT | INT | |
TINYINT | TINYINT | UNSIGNED flag set in MySQL |
SMALLINT | SMALLINT | |
BIGINT | BIGINT | |
BIT | TINYINT(1) | |
FLOAT | FLOAT | Precision value is used for storage size in both |
REAL | FLOAT | |
NUMERIC | DECIMAL | |
DECIMAL | DECIMAL | |
MONEY | DECIMAL | |
SMALLMONEY | DECIMAL | |
CHAR | CHAR/LONGTEXT | Depending on its length. MySQL Server 5.5 and above can have CHAR columns with a length up to 255 characters. Anything larger is migrated as LONGTEXT |
NCHAR | CHAR/LONGTEXT | Depending on its length. MySQL Server 5.5 and above can have VARCHAR columns with a length up to 65535 characters. Anything larger is migrated to one of the TEXT blob types. In MySQL, character set of strings depend on the column character set instead of the datatype. |
VARCHAR | VARCHAR/MEDIUMTEXT/LONGTEXT | Depending on its length. MySQL Server 5.5 and above can have VARCHAR columns with a length up to 65535 characters. Anything larger is migrated to one of the TEXT blob types. |
NVARCHAR | VARCHAR/MEDIUMTEXT/LONGTEXT | Depending on its length. MySQL Server 5.5 and above can have VARCHAR columns with a length up to 65535 characters. Anything larger is migrated to one of the TEXT blob types. In MySQL, character set of strings depend on the column character set instead of the datatype. |
DATE | DATE | |
DATETIME | DATETIME | |
DATETIME2 | DATETIME | Date range in MySQL is ‘1000-01-01 00:00:00.000000’ to ‘9999-12-31 23:59:59.999999’. Note: fractional second values are only stored as of MySQL Server 5.6.4 |
SMALLDATETIME | DATETIME | |
DATETIMEOFFSET | DATETIME | |
TIME | TIME | |
TIMESTAMP | TIMESTAMP | |
ROWVERSION | TIMESTAMP | |
BINARY | BINARY/MEDIUMBLOB/LONGBLOB | Depending on its length |
VARBINARY | VARBINARY/MEDIUMBLOB/LONGBLOB | Depending on its length |
TEXT | VARCHAR/MEDIUMTEXT/LONGTEXT | Depending on its length |
NTEXT | VARCHAR/MEDIUMTEXT/LONGTEXT | Depending on its length |
IMAGE | TINYBLOB/MEDIUMBLOB/LONGBLOB | Depending on its length |
SQL_VARIANT | not migrated | There is not specific support for this datatype. |
TABLE | not migrated | There is not specific support for this datatype. |
HIERARCHYID | not migrated | There is not specific support for this datatype. |
UNIQUEIDENTIFIER | VARCHAR(64) | A unique flag set in MySQL. There is not specific support for inserting unique identifier values. |
SYSNAME | VARCHAR(160) | |
XML | TEXT |
Source Type | MySQL Type | Comment |
---|
mssql vs mysql data type mapping
@@ mssql vs mysql data type mapping
http://dev.mysql.com/doc/workbench/en/wb-migration-database-mssql-typemapping.html
http://www.sqlines.com/sql-server-to-mysql/functions/convert_string
mariadb, mysql feartures
- timestamp default는 테이블에 오직 하나만 가능.
- 테이블 upt-date 는 timestap –> datetime으로 변경 default 제거, null 허용해 해결
- timestamp는 default 가능한 2038년에 만료됨.
MySQL engine level encryption
MySQL engine level encryption
http://deview.kr/2013/detail.nhn?topicSeq=27
MySQL 10.1 table schema encryption
http://www.youdidwhatwithtsql.com/encryption-mariadb-1013/2064/
Mssql column level encryption
MySQL Workbench localhost connection errors
mysql localhost 접속 오류시
Using MySQL Stored Procedures with PHP mysql/mysqli/pdo
Using MySQL Stored Procedures with PHP mysql/mysqli/pdo