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

2020년 3월 12일 목요일

MySQL 테이블 정의서 조회 쿼리

SELECT
IFNULL(T2.TABLE_COMMENT, T1.TABLE_NAME) AS TABLE_COMMENT
, T1.TABLE_NAME, T1.ORDINAL_POSITION, T1.COLUMN_COMMENT
, T1.COLUMN_NAME, UPPER(T1.DATA_TYPE) AS DATA_TYPE
, (CASE T1.DATA_TYPE WHEN 'varchar' THEN T1.CHARACTER_MAXIMUM_LENGTH ELSE '' END) AS DATA_LENGTH
, (CASE T1.IS_NULLABLE WHEN 'NO' THEN 'Y' ELSE '' END) AS NOT_NULL
, (CASE T1.COLUMN_KEY WHEN 'PRI' THEN 'Y' ELSE '' END) AS IS_PK
, T1.COLUMN_DEFAULT

FROM (
    SELECT
    *
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_SCHEMA = 'dbzimyung'
    AND TABLE_NAME LIKE 'm_%'
    ORDER BY TABLE_NAME ASC, ORDINAL_POSITION ASC
) T1
INNER JOIN (
    SELECT
    TABLE_NAME, TABLE_COMMENT
    FROM `INFORMATION_SCHEMA`.`TABLES`
    WHERE TABLE_NAME LIKE 'm_%'
) T2 ON T2.TABLE_NAME = T1.TABLE_NAME

MySQL schema query with comment

Table

SELECT * FROM `INFORMATION_SCHEMA`.`TABLES`
WHERE TABLE_NAME LIKE 'm_%'


Column

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'dbname'
AND TABLE_NAME LIKE 'T_%'
ORDER BY TABLE_NAME ASC, ORDINAL_POSITION ASC

MySQL "The server time zone value ‘KST’ is unrecognized or represents more than one time zone" error

MySQL JDBC로 접속시 아래와 같은 에러가 발생할 경우 처리

The server time zone value ‘KST’ is unrecognized or represents more than one time zone

원인 
mysql-connector-java 버전 6.x 이후 버전부터는 KST 타임존을 인식하지 못하는 것으로 판단됨

해결방안1
mysql-connector-java 5.x 버전 이용 (ex. mysql-connector-java-5.1.47)



2011년 8월 4일 목요일

[MySQL] DB생성+사용자추가

* 데이터베이스 생성
mysql> create database <database name>;
mysql> show databases;
* 사용자 추가
mysql> use mysql
mysql> INSERT INTO user
      VALUES('%','monty',PASSWORD('some_pass'),
     'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',
     'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y',
     '','','','',0,0,0,0);

* 사용자 권한 변경
mysql> use mysql
mysql> INSERT INTO db
(Host,Db,User,Select_priv,Insert_priv,
Update_priv,Delete_priv,Create_priv,Drop_priv)
VALUES('%','<db_name>','<user_id>',
'Y','Y','Y','Y','Y','Y');

- 권한정보 반영
mysql> FLUSH PRIVILEGES;

2011년 8월 3일 수요일

우분투에 MySQL 설치

* mysql 설치
$ apt-get install mysql-server

* 비밀번호 설정
$ mysqladmin -u root -p password new-password

* mysql root 비밀번호 재설정

service mysql stop
sudo mysqld --skip-grant-tables &
mysql -u root -p
UPDATE user SET Password=PASSWORD('hello') WHERE User='root'; FLUSH PRIVILEGES; exit;

kill -9 <MYSQL PID>
service mysql start

2011년 8월 2일 화요일

MySQL 스키마 조회 쿼리


* 테이블 정보 조회
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = SCHEMA()

SCHEMA()은 현재 테이블스페이스(?)를 의미 하는 듯...
문자열로 검색도 가능, 대소문자는 구분 안하는듯..


* 컬럼 정보 조회
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = SCHEMA() AND TABLE_NAME = '<TABLE_NAME>'
ORDER BY ORDINAL_POSITION

테이블명 대소문자는 구분 안하는 듯..


* 컬럼 코멘트 추가하는 쿼리
ALTER TABLE <TABLE_NAME> CHANGE COLUMN <COLUMN_NAME> <COLUMN_NAME> VARCHAR(10) COMMENT '<NEW COMMENT>';


* 테이블 생성시 코멘트 추가
CREATE TABLE TB_USER (
USER_ID VARCHAR(32) NOT NULL COMMENT '사용자 아이디',
PRIMARY KEY (USER_ID)
)
COMMENT = '사용자 정보'
;

[Gentoo Linux] mysql 설치

# emerge mysql
# emerge --config mysql
# vi /etc/mysql/my.cnf

utf8 을 원하는 캐릭터셋으로 변경 (euckr or 그대로 등등..)
innodb_data_file_path = ibdata1:10M:autoextend:max:128M 에서 :max:128M을 삭제

# mysql_install_db
# /etc/init.d/mysql start

콘솔에서 mysql 데이터베이스를 생성하고 계정 추가

mysql root로 접속하고 아래 명령어를 실행..

create database board;

CREATE USER 'board'@'localhost' IDENTIFIED BY 'board';

GRANT ALL PRIVILEGES ON *.* TO 'board'@'localhost' WITH GRANT OPTION;

SHOW GRANTS FOR 'board'@'localhost';

Tomcat JNDI Datasource 설정(MySQL)

출처: http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html


1. server.xml 파일에 resource 추가
(1) context 아래에 resource 추가하기
<Context path="/DBTest" docBase="DBTest" debug="5" reloadable="true" crossContext="true">
  <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
               url="jdbc:mysql://localhost:3306/javatest"/></Context>

(2) GlobalNamingResources 에 추가
    <GlobalNamingResources>
        <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
            name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase" />
        <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource" 
            maxActive="100" maxIdle="30" maxWait="10000" username="javauser" password="javadude"
            driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/javatest" />
    </GlobalNamingResources>

...

<Context path="/DBTest" docBase="DBTest" debug="5" reloadable="true" crossContext="true">
  <ResourceLink global="jdbc/TestDB" name="jdbc/TestDB" type="javax.sql.DataSource"/>
</Context>


2. web.xml 파일 수정 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
  <description>MySQL Test App</description>
  <resource-ref>
      <description>DB Connection</description>

      <res-ref-name>jdbc/TestDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
      </resource-ref>
</web-app>


3. test.jsp  

<%@ page import="java.sql.*"%>
<%@ page import="javax.naming.*" %>
<%@ page import="javax.activation.*" %>
<%
    InitialContext cxt = new InitialContext();
    javax.sql.DataSource ds = null;
    Connection conn = null;
        if ( cxt == null ) {
       throw new Exception("Uh oh -- no context!");
    }
    ds = (javax.sql.DataSource) cxt.lookup( "java:/comp/env/jdbc/TestDB" );
    if ( ds == null ) {
       throw new Exception("Data source not found!");
    }
    conn = ds.getConnection();
    out.println(conn.getMetaData().getDriverVersion());
%>