'프로그램 > MySql' 카테고리의 다른 글
MYSQL 사용자 생성 (0) | 2016.11.29 |
---|---|
PASSWORD()와 OLD_PASSWORD() 함수 그리고 old_passwords 설정 (0) | 2016.11.28 |
MySQL 내장 함수 (MySQL전용 함수) (0) | 2016.11.28 |
MySQL 기본 명령어 정리 (0) | 2016.11.28 |
join문 (0) | 2015.10.14 |
MYSQL 사용자 생성 (0) | 2016.11.29 |
---|---|
PASSWORD()와 OLD_PASSWORD() 함수 그리고 old_passwords 설정 (0) | 2016.11.28 |
MySQL 내장 함수 (MySQL전용 함수) (0) | 2016.11.28 |
MySQL 기본 명령어 정리 (0) | 2016.11.28 |
join문 (0) | 2015.10.14 |
7.3.3 MySQL 내장 함수 (MySQL전용 함수)
- IFNULL(A, B) : A가 null 이면 B를 A가 null이 아니면 A를 그대로 반환한다.
- ISNULL(A) : A가 null 이면 true(1) , null 이 아니면 false(0) 을 반환한다.
- NOW() : 현재시간 반환
- SYSDATE() : 현재시간 반환
** 일반적인 웹서비스에서 NOW()가 아닌 SYSDATE()를 꼭 사용해야 이유는 없다. 기능은 동일하지만 SYSDATE()는 '호출시점'에 따라 값이 결정되기 떄문에 인덱싱 등에 문제를 가진다.
where from_data > SYSDATE() 는 실행때마다 SYSDATE값이 달라진다, 이건 상수가 아닌상태이다!!
- DATE_FOMRAT : Date Type -> String
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H시 %i분 %s초') AS cur_str;
- STR_TODATE : 문자열을 날자 타입으로 변경
SELECT STR_TO_DATE( '2011-04-30', '%Y-%m-%d') as cur_dt;
- DATE_ADD, DATE_SUB : 날자 타입의 가감
SELECT DATE_ADD( NOW(), INTERVAL 1 DAY ) as tomorrow;
SELECT DATE_ADD( NOW(), INTERVAL -1 DAY ) as yesterday;
** YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 의 값이 있고 [ INTERVAL n 단위 ] 형식으로 입력하면 된다.
- RPAD(), LPAD() : 문자의 좌우측에 문자를 덧붙여 지정된 길이로 만든다.
SELECT RPAD("Cloee', 10, '_'); -> Cloee_____
- RTRIM(), LTRIM(), TRIM() : 문자의 우측, 좌측, 양측의 공백(Space, NewLine, Tab)을 제거
- CONCAT : 문자열을 연결, 인자의 갯수는 제한이 없다.
- CONCAT : 문자열을 구분자를 넣어서 연결해준다.
SELECT CONCAT_WS(',', 'A', 'B', 'C') --> A,B,C
- GROUP_CONCAT : 값들을 정렬한후, 연결하거나 구분자설정, 중복제거등 유용하다.
ex1-SELECT GROUP_CONCAT(dept_no)
==> d001, d002, d003, d004
FROM dept (dept모든 레코드에서 dept_no 칼럼을 기본 구분자, 로 연결한 값을 반환)
ex2- SELECT GROUP_CONCAT(dept_no, SEPARATOR '|') FROM dept
==> d001|d002|d003}d004
ex3- SELECT GROUP_CONCAT(dept_no, ORDER BY dept_name DESC) from dept
==> d007,d008,d004,d001
dept_name 역순 정렬 -> dept_no 들의 연결값을 가져옴
ex4- SELECT GROUP_CONCAT(DISTINCT dept_no ORDER BY dept_name DESC) from dept
==> d007,d008,d006,d004
ex3과 동일하지만 중복된 dept_no가 있다면 제거하고 가져온다.
** 제한적인 메모리 버퍼를 사용하는데 TOAD나 SQLYog에서는 단순한 Warnning지만, JDBC로 연결할 때는 SQLException이 발생하므로, GROUP_CONCAT의 결과가 버퍼를 초과하지 않도록 주의해야한다.
- CASE WHEN (Function가 아닌 Syntax)
SELECT emp_no, frst_name
CASE gender WHEN 'M TEHN 'Man'
WHEN 'F' THEN 'Woman'
ELSE 'Unknown'
END AS gender
FROM emp LIMIT 10
** CASE WHEN 절이 일치해야만 THEN 이하도 실행이 된다. 서브쿼리->CASE WHEN으로 성능 향상을 꾀할 수 있다.(P407)
- MD5, SHA : 비대칭형 암호화 알고리즘 (SHA - SHA-1알고리즘, 160bit 해시 값, MD5 - Message Digest알고리즘 128bit 해시 값)
중복의 가능성이 매우 낮기 때문에, 길이가 긴 데이터를 줄여서 인덱싱하는 용도로도 사용한다.(url값 인덱싱)
MYSQL 사용자 생성 (0) | 2016.11.29 |
---|---|
PASSWORD()와 OLD_PASSWORD() 함수 그리고 old_passwords 설정 (0) | 2016.11.28 |
MySQL 계열의 FLUSH PRIVILEGES 명령어 (0) | 2016.11.28 |
MySQL 기본 명령어 정리 (0) | 2016.11.28 |
join문 (0) | 2015.10.14 |
ER 다이어그램 (Entity-Relationship Diagram) (0) | 2017.09.19 |
---|---|
[oracle] 토드팁 - sql자동생성 (0) | 2016.12.30 |
데이터 무결성 (Data Integrity) (0) | 2016.12.02 |
클라이언트/서버 (0) | 2016.11.28 |
Osi 7 layer (0) | 2016.11.28 |
MySQL의 기본 명령어와 SQL문 정리. 내가 RDBMS에 완전 문외한이기 때문에 기본 SQL쿼리까지…
Redhat Linux 7.3, MySQL 3.23.58 에서 테스트함.
설치는 Redhat 기본 제공 RPM으로 했다.
mysql -u 사용자명 -p dbname
설치 직후에는 root 사용자에 비밀번호가 없으므로 다음과 같이 접속하여 MySQL을 관리할 수 있다.
mysql -u root mysql
외부 서버에서 접속이 불가하면 MySQL 설정에서 bind-address
항목을 살펴본다.
MySQL을 설치한 직후에는 root 계정에 암호가 지정되어 있지 않다. 다음 세가지 방법으로 비밀번호를 변경 할 수 있다.
# mysqladmin 이용 mysqladmin -u root password 새비밀번호
# update문 이용 mysql -u root mysql ---- mysql> UPDATE user SET password=password('새비밀번호') WHERE user='root'; mysql> FLUSH PRIVILEGES;
# Set Password 이용 mysql> SET PASSWORD FOR root=password('새비밀번호');
일단 root 비밀번호가 설정된 상태에서는 mysql이나 mysqladmin 명령을 실행할 때 -p 옵션을 붙여주고 기존 비밀번호를 입력해야만 한다.
GRANT ALL PRIVILEGES ON dbname.* TO username@localhost IDENTIFIED BY 'password';
username 이라는 사용자를 password라는 비밀번호를 갖도록 하여 추가한다. username은 dbname이라는 데이타베이스에 대해 모든 권한을 가지고 있다. username 사용자는 로칼 호스트에서만 접속할 수 있다. 다른 호스트에서 접속하려면
GRANT ALL PRIVILEGES ON dbname.* TO username@'%' IDENTIFIED BY 'password';
위를 또한 번 실행한다. '%'에서 홑따옴표를 주의한다.
특정 권한만 주려면, 아래와 같은 형태로 권한을 나열한다.
GRANT INSERT,UPDATE,SELECT ON dbname.* TO username@'localhost' IDENTIFIED BY 'pwd';
MySQL error 1045(28000): Access denied for user ...에 따르면 '%'란 localhost 를 제외한 모든 호스트를 뜻한다고 한다. 즉, localhost에 대해서는 명시적으로 따로 권한을 지정해야 한다.
CREATE USER
를 통한 사용자 생성이 안될 경우에는 mysql - ERROR 1396 (HY000): Operation CREATE USER failed for 'jack'@'localhost' 참조하여, 먼저 생성하려던 사용자를 drop 하고 재시도 해본다. 이 현상이 나타나는 이유는, CREATE USER/GRANT
명령으로 사용자와 권한을 추가/관리해야 하는데 mysql.db
, mysql.user
테이블을 직접 조작하다가 일관성이 깨졌기 때문이다. 가급적 mysql의 계정/권한 테이블에 대한 직접 조작은 하지 말아야 한다.
drop user admin@localhost; flush privileges; create user admin@localhost identified by 'admins_password'
mysql> DLETE FROM USER WHERE USER='username'; mysql> FLUSH PRIVILEGES;
# 데이터베이스를 생성하고, mysql> CREATE DATABASE dbname; # 현재 존재하는 데이터베이스 목록을 보여준다. mysql> SHOW DATABASES; # 특정 데이타베이스를 사용하겠다고 선언한다. mysql> USE dbname; # 쓸모 없으면 과감히 삭제한다. mysql> DROP DATABASE [IF EXISTS] dbname;
IF EXISTS
옵션은 비록 데이타베이스가 없더라도 오류를 발생시키지 말라는 의미이다.
mysql> CREATE TABLE tablename ( column_name1 INT PRIMARY KEY AUTO_INCREMENT, column_name2 VARCHAR(15) NOT NULL, column_name3 INT ) ENGINE=INNODB;
mysql> SHOW TABLES;
mysql> EXPLAIN tablesname; 혹은 mysql> DESCRIBE tablename;
mysql> RENAME TABLE tablename1 TO tablename2[, tablename3 TO tablename4];
mysql> DROP TABLE [IF EXISTS] tablename;
mysql> STATUS -------------- mysql Ver 11.18 Distrib 3.23.58, FOR pc-linux (i686) Connection id: 26 CURRENT DATABASE: study CURRENT USER: study@localhost CURRENT pager: stdout USING OUTFILE: '' Server version: 3.23.58 Protocol version: 10 Connection: Localhost via UNIX socket Client characterset: latin1 Server characterset: euc_kr UNIX socket: /var/lib/mysql/mysql.sock Uptime: 2 hours 9 MIN 59 sec Threads: 1 Questions: 160 Slow queries: 0 Opens: 28 FLUSH TABLES: 1 OPEN TABLES: 1 Queries per SECOND avg: 0.021 --------------
mysql> INSERT INTO tablename VALUES(값1, 값2, ...); 혹은 mysql> INSERT INTO tablename (col1, col2, ...) VALUES(값1, 값2, ...);
mysql> SELECT col1, col2, ... FROM tablename;
컬럼명을 *로 하면 모든 컬럼 의미.
mysql> SELECT col1 AS '성명', col2 AS '국어점수' FROM grade;
컬럼의 이름을 바꿔서 출력.
mysql> SELECT * FROM tablename ORDER BY col1 DESC; mysql> SELECT col1, korean + math english AS '총점' FROM tablename ORDER BY '총점' ASC;
DESC는 내림차순 ASC는 오름차순.
mysql> SELECT * FROM grade WHERE korean < 90;
결과중 처음부터 10개만 가져오기
mysql> SELECT * FROM grade LIMIT 10;
결과중 100번째부터 10개만 가져오기. 첫번째 레코드는 0번 부터 시작한다.
mysql> SELECT * FROM grade LIMIT 100, 10;
mysql> UPDATE tablename SET col1=새값 WEHER 조건
mysql> DELETE FROM tablename WEHRE 조건
-- DELETE 바로 뒤에 삭제할 테이블을 적는다. -- INNER JOIN DELETE T1, T2 FROM T1 INNER JOIN T2 ON T1.key = T2.key WHERE condition; -- LEFT JOIN DELETE T1 FROM T1 LEFT JOIN T2 ON T1.key = T2.key WHERE T2.key IS NULL;
-E 옵션을 줘서 실행한다.
mysql -E -u root -p mysql
mysql> SHOW errors; mysql> SHOW warnings;
SHOW FULL processlist; SHOW FULL processlist\G;
SHOW VARIABLES LIKE "%version%";
SHOW CREATE TABLE [테이블이름]\G
-- 전체 테이블 정보를 주석까지 포함해 보여준다. SHOW TABLE STATUS; SHOW TABLE STATUS like 'member%'; -- 테이블 이름 매칭 조건 -- 테이블의 컬럼 정보를 주석까지 포함해 보여준다. SHOW FULL COLUMNS FROM [테이블이름];
-- 테이블의 주석 변경 ALTER TABLE [테이블이름] COMMENT = '테이블설명'; -- 컬럼의 주석 변경 ALTER TABLE [테이블이름] CHANGE COLUMN [컬럼이름] [새컬럼이름] ...여러 속성... COMMENT '새 주석';
information_schema
의 TABLES
, COLUMNS
를 쿼리하여 테이블, 컬럼 정보를 살펴볼 수 있다.
select t.TABLE_SCHEMA, t.TABLE_NAME, c.COLUMN_NAME, c.COLUMN_TYPE, c.COLUMN_COMMENT from `TABLES` t inner join `COLUMNS` c on t.TABLE_NAME = c.TABLE_NAME order by t.TABLE_SCHEMA, t.TABLE_NAME
MYSQL 사용자 생성 (0) | 2016.11.29 |
---|---|
PASSWORD()와 OLD_PASSWORD() 함수 그리고 old_passwords 설정 (0) | 2016.11.28 |
MySQL 계열의 FLUSH PRIVILEGES 명령어 (0) | 2016.11.28 |
MySQL 내장 함수 (MySQL전용 함수) (0) | 2016.11.28 |
join문 (0) | 2015.10.14 |
1. 클라이언트/서버 이란? ㅇ 클라이언트 (Client) - 영어 뜻 자체로는 고객을 의미 . 클라이언트는 기본적으로 한 개 이상의 서버가 제공하는 서비스를 사용할 수 있는 소비자의 개념 - 클라이언트/서버 모델에서, . 네트워크를 이용하여 서버(Server)측에 서비스 요청을 의뢰하는 주체 ㅇ 서버 (Server) - 클라이언트들이 요구하는 각종 서비스를 제공하는 측 - 클라이언트/서버 모델에서, . 네트워크상에서 하드웨어 또는 소프트웨어로써 서비스의 요청을 받는 측 2. 클라이언트/서버 출현배경 ㅇ 과거에는 동일 컴퓨터 내에서 호출 및 피호출 프로그램이 상호작용함으로써 이들을 분리할 필요가 없었음 ㅇ 그러나, 컴퓨터 및 네트워크 기술발전에 따라 많은 프로그램을 대신하여 서비스를 제공하거나 자원을 관리하는 전문화된 프로그램의 개념이 널리 확산되어, - 이를 서버라 하고 서비스 또는 자원을 의뢰(요청)하는 측을 클라이언트라고 하게됨 3. 클라이언트/서버 모델의 특징 ㅇ 이 모델에서의 통신은 항상 요청-응답의 형태를 취함 - 클라이언트에 의해서만 시작되고 서버에 의해서는 결코 시작되지 않음 ㅇ 서버 종류 - 통상 프린트서버, 고속의 그래픽서버, 데이타베이스서버, 화일서버, 네임서버 등과 같은 것이 있으며 한 가지 작업을 전담함 - 일반적으로 서버란 많은 다른 클라이언트들의 동시적인 요구를 처리할 수 있도록 설계된 프로세스라고 말할 수 있음 ㅇ 클라이언트/서버 환경 - 최종 사용자에게는 많은 장점을 제공하는 반면에 망 운영자에게는 복잡하고 어려 운 문제를 끊임없이 제기하게됨 ㅇ 구성요소 : Client, Server, Network ㅇ 소프트웨어 위치 - 변화가 적은 소프트웨어는 클라이언트측에 변화가 잦은 소트웨어는 서버측에 놓음 ㅇ 분산처리 - 클라이언트/서버 모델은 분산협동처리(distributed cooperative processing) 의 특별한 예라고 할 수 있음 - 지능형 동배간 처리에서 한 서버는 여유있는 서버에게 계산 부담을 분배함으로써 서버와 네트워크 특성을 기반으로 하는 분산을 최적화할 수 있음 4. 클라이언트/서버 TCP/IP 프로토콜 ㅇ 例) HTTP, FTP, 전자우편(SMTP,POP), TELNET, DNS 등 ㅇ 서버 포트(Port) 관리 - 서버는 클라이언트가 접근하는 초기 포트로써 잘알려진 포트를 사용하고, - 일단 이 포트를 통해 클라이언트와의 연결이 이루어지면, - 일반적으로, 서버는 임시 포트(Ephemeral Port)를 생성하여 연결하고, - 이후에는 데이터 교환이 이렇게 유지되는 연결을 통해 이루어지짐
ER 다이어그램 (Entity-Relationship Diagram) (0) | 2017.09.19 |
---|---|
[oracle] 토드팁 - sql자동생성 (0) | 2016.12.30 |
데이터 무결성 (Data Integrity) (0) | 2016.12.02 |
DB 기본 용어 (SQL, DDL, DML, DCL, TCL) (0) | 2016.11.28 |
Osi 7 layer (0) | 2016.11.28 |
◎ OSI 7 Layer
– 처음에는 네트워크 관련 제조사마다 각자 다른 독자적인 계층 구조를 사용했으나 타사와의 호환이 문제가 되어 참조모델로써 OSI 7 Layer가 도입되었습니다
– 호환 뿐 아니라 표준화를 통해 효율성 또한 높일 수 있으며 네트워크 상에서 문제가 발견되었을 때 데이터의 흐름을 파악해 문제점을 해결하기가 좀 더 수월합니다
– OSI 7 Layer는 위 그림처럼 나타낼 수 있습니다
– 데이터를 보낼 때는 7계층에서 1계층까지 거치면서 각 계층의 헤더와 여러 정보 (발신자의 주소 등)가 원래 데이터에 붙게 되는데 이것을 Encapsulation이라고 합니다
– 데이터를 수신한 입장에서는 1계층에서 7계층까지 거치면서 패킷의 헤더들이나 정보들을 벗겨내면서 원래 데이터를 만드는데 이것을 De-capsulation이라고 합니다
◈ Application ( 7계층 – 응용계층 )
– 사용자의 인터페이스를 담당하며 사용자들이 사용하는 네트워크 응용프로그램이라고 할 수 있습니다
– 서비스를 위한 프로토콜이 포함되어 사용자가 네트워크를 이용할 수 있도록 해주는 역할을 합니다 (서비스 제공)
– Ex > FTP , Telnet , SMTP , DNS , DHCP ….
◈ Presentation ( 6계층 – 표현계층 )
– 보내질 데이터의 포맷 즉 형식을 지정하는 계층입니다
– 송신 측과 수신 측의 부호체계가 다를 수 있기 때문에 그러한 것에 대한 변화를 규정하고 데이터 형식을 정합니다
– 데이터 형식이라 하는 것은 확장자나 파일 포맷 뿐 아니라 Charater Set이나 Encoding 등도 포함됩니다
◈ Session ( 5계층 – 연결계층 ) //논리적인 연결
– 연결을 담당하여 데이터의 송수신을 가능하게 하는 계층입니다
– 연결 즉 세션을 맺고 끊고 유지하는 역할을 하는데 통신에 있어서 양쪽 즉 수신과 송신 컴퓨터간의 최초연결과 연결유지를 담당합니다
◈ Transport ( 4계층 – 전송계층 ) // port
– 서비스를 PORT주소로 구분해서 데이터를 전송하는 역할을 담당합니다
– 만약 보내는 데이터가 클 때는 데이터를 쪼개서 패킷으로 만드는 역할 또한 연결계층이 담당합니다
– 데이터 전송 중 네트워크 오류나 기타 장애로 인해 데이터가 중간에 끊긴 경우 역시 연결계층에서 실패한 패킷만 재전송하는 역할도 합니다
– 4계층의 데이터 전송방식에는 TCP 와 UDP가 있는데 이것에 대해서는 다음에 다시 알아보도록 하겠습니다. 간단하게 TCP는 신뢰성 / UDP는 빠른 속도를 가집니다
– 4계층의 PDU(Protocol Data Unit)은 Segment입니다
◈ Network ( 3계층 – 네트워크계층) //ip
– 논리적 주소인 IP를 가지고 통신노드에 대한 다양한 경로를 설정하고 라우팅 및 망,노드간의 트래픽을 제어하는 계층입니다
– 데이터의 안전한 전송을 위해 논리적 경로, 링크를 설정하고 흐름이나 순서를 제어합니다
– 3계층의 PDU는 Packet과 Datagram입니다
◈ Data Link ( 2계층 – 데이터링크계층)
– 물리적 주소인 MAC을 사용해서 노드대 노드로 데이터를 전달하는 계층입니다
– PDU는 Frame으로 Encapsulation시에 헤더와 테일을 붙이는데 테일을 붙이는 이유는 데이터의 무결성검사 즉 오류체크를 하기 위해서입니다
– LAN Protocol = Ethernet / WAN Protocol = HDLC , PPP
◈ Physical ( 1계층 – 물리계층 )
– 다 만들어진 패킷, 데이터를 실제 전기적신호로 바꾸어 물리적인 선을 타고 수신자에게 보내는 계층입니다
ER 다이어그램 (Entity-Relationship Diagram) (0) | 2017.09.19 |
---|---|
[oracle] 토드팁 - sql자동생성 (0) | 2016.12.30 |
데이터 무결성 (Data Integrity) (0) | 2016.12.02 |
DB 기본 용어 (SQL, DDL, DML, DCL, TCL) (0) | 2016.11.28 |
클라이언트/서버 (0) | 2016.11.28 |
expression을(를) 데이터 형식 int(으)로 변환하는 중 산술 오버플로 오류가 발생했습니다.[mssql] (0) | 2023.10.11 |
---|---|
MS-SQL 테이블 복사 (0) | 2019.09.27 |
SCM 서비스 - 사용된 계정의 암호 변경 (0) | 2019.06.01 |
sql서버 외부포트열기 (0) | 2017.10.25 |
mssql코멘트 (0) | 2016.01.18 |
expression을(를) 데이터 형식 int(으)로 변환하는 중 산술 오버플로 오류가 발생했습니다.[mssql] (0) | 2023.10.11 |
---|---|
MS-SQL 테이블 복사 (0) | 2019.09.27 |
SCM 서비스 - 사용된 계정의 암호 변경 (0) | 2019.06.01 |
sql서버 외부포트열기 (0) | 2017.10.25 |
사용자 비밀번호 (0) | 2016.02.11 |