'MySQL'에 해당되는 글 8건

  1. Knex.js, Node.js에서 SQL 질의하기
  2. MySQL, CREATE TABLE 테이블 생성하기
  3. Spring Boot, MyBatis 연동으로 MySQL 데이터베이스 질의하기 (4)
  4. MySQL 5.7.x, Windows, 설치하기
  5. MySQL 테이블 생성시 DATETIME 타입에 DEFAULT로 현재 시간 입력하기 (4)
  6. Joda-Time의 DateTime 타입을 MySQL에 파라메터로 전달하기
  7. CentOS에서 MySQL 완전 제거 후 새로 설치하기 (1)
  8. [DB] [MySQL] 데이터베이스 생성 및 원격 접속하기

Knex.js, Node.js에서 SQL 질의하기

개요

Knex.jsNode.js SQL 빌더 및 질의 기능을 제공하는 라이브러리이다. MySQL, MariaDB, PostgreSQL, SQLLite, Oracle, MSSQL과 같이 대부분의 RDBMS를 지원한다.

프로젝트 적용

프로젝트에 적용하기 위해 아래와 같이 패키지를 설치한다.

$ npm install knex --save
$ npm install mysql --save

Knex.js 예제

아래는 Knex.js을 이용하여 쿼리 빌더를 사용하지 않고 RAW SQL 질의를 하는 예이다. MySQL을 예로 들었다.

const knexConfig = {
    client: 'mysql',
    connection: {
        host: '{host}',
        user: '{user}',
        password: '{password}',
        database: 'mysql',
        charset: 'utf8'
    },
    debug: true,
    pool: {
        max: 10
    },
    acquireConnectionTimeout: 60000
};

const knex = require('knex')(knexConfig);

knex.raw('select * from user').then((resp) => {
        console.log(resp);
    }
).catch((err) => {
        console.log(err);
    }
);

참조 글


저작자 표시 비영리 동일 조건 변경 허락
신고

MySQL, CREATE TABLE 테이블 생성하기

먼저 읽어볼만한 글

CREATE TABLE 예시

MySQL 테이블 생성의 예는 아래와 같다. 아래는 회원 테이블 생성의 간단한 예이다.

CREATE TABLE user (
  id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  email VARCHAR(255) NOT NULL UNIQUE,
  password_encrypted VARCHAR(255) NOT NULL,
  is_deleted TINYINT(1) NOT NULL DEFAULT 0,
  created_datetime DATETIME DEFAULT CURRENT_TIMESTAMP,
  updated_datetime DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
)
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_unicode_ci;
  • id 컬럼은 PRIMARY KEY이다. 타입을 INT UNSIGNED로 선언하여 약 42억개의 서로 중복되지 않는 PK를 가진 로우를 저장할 수 있다. AUTO_INCREMENT에 의해 새로운 로우가 INSERT 될 때마다 1부터 4294967295까지의 PK가 자동 생성된다. 괄호 안의 숫자는 데이터 조회시 출력될 자리수로 실제 타입이 가진 크기와 무관하다.


  • email 컬럼은 회원 이메일 주소를 저장한다. VARCHAR 타입의 괄호 안 숫자는 저장 가능한 최대 글자 수로 바이트 크기가 아님에 유의한다. 한글 1자 또한 영문자 1자와 동일하게 1개 글자로 계산된다. CHAR_LENGTH() 함수와 동일하다. (글자수가 아닌 바이트 관점에서 UTF-8 기준 한글 1자는 3바이트, 영문자 포함 아스키 코드는 1바이트로 저장된다. LENTH() 함수와 동일하다.)


  • password_encrypted 컬럼은 회원 해쉬 변환된 비밀번호를 저장한다. 보안상의 이유로 반드시 비밀번호를 그대로 저장하지 않고 해쉬 변환 후 저장해야 한다. BCrypt 해쉬 알고리즘을 사용할 경우 60-bytes 크기의 문자열 해쉬를 생성한다. 해쉬 변환 관련 글은 이 글을 참고한다.


  • is_deleted 컬럼는 회원 삭제 여부를 저장한다. false는 0, true이면 1을 저장하면 된다. TINYINT는 -128부터 127까지를 저장 가능한 타입이다. INT와 마찬가지로 괄호 안의 숫자는 데이터 조회시 출력될 자리수이다.


  • created_datetime 컬럼은 회원 가입일시를 저장한다. DATETIME은 일시를 저장할 수 있는 타입이다. 기본값으로 CURRENT_TIMESTAMP를 명시하면 자동으로 현재 일시가 저장된다.


  • updated_datetime 컬럼은 회원 정보의 수정일시를 저장한다. 회원 정보 변경시 자동으로 현재 일시가 저장된다.


  • 테이블의 기본 언어셋으로 모든 유니코드를 지원하는 utf8mb4을 지정하였다. COLLATE는 정렬의 정확도를 결정한다. 비영어권은 utf8mb4_unicode_ci를 지정해야 정확하게 정렬된다.


  • MySQL 5.5 이상부터는 스토리지 엔진을 생략해도 기본값으로 InnoDB가 설정된다. InnoDB는 트랜잭션 처리를 지원한다.

참고 글

저작자 표시 비영리 동일 조건 변경 허락
신고

Spring Boot, MyBatis 연동으로 MySQL 데이터베이스 질의하기

먼저 읽어볼만한 글

데이터베이스 연결 및 질의를 위한 의존성 정보 추가

/build.gradle에 아래 내용을 추가한다. MyBatis 라이브러리를 이용하여 MySQL 데이터베이스에 연결하기 위한 의존성 정보이다.

dependencies {
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-jdbc'
    compile group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter', version: '1.3.0'
    compile group: 'org.mybatis', name: 'mybatis-typehandlers-jsr310', version: '1.0.2'
    compile group: 'com.ifrabbit', name: 'spring-data-mybatis', version: '1.0.17.RELEASE'
    compile group: 'mysql', name: 'mysql-connector-java', version: '6.0.2'
}
  • mybatis-typehandlers-jsr310 아티팩트는 데이터베이스 컬럼의 날짜/시간 타입을 Java 8부터 추가된 LocalDate, LocalTime, LocalDateTime, Year, Month 클래스로의 자동 맵핑을 지원한다. MyBatis 3.4 버전부터 자동 지원되며 이전 버전은 별도의 typeHandler 등록이 필요하다.

데이터베이스 연결 정보 작성

/src/main/resouces/application.properties에 아래와 같이 연결한 데이터베이스 연결 정보를 작성한다. Profile에 따라 다른 연결 정보를 작성하면 개발, 운영 환경에 따라 연결 데이터베이스를 다르게 설정할 수 있다.

spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/spring_boot_example
spring.datasource.username=root
spring.datasource.password=Q1w2e3r4
spring.datasource.connectionProperties=useSSL=false;useUnicode=yes;characterEncoding=UTF-8;serverTimezone=UTC
spring.datasource.initSQL=SELECT 1

  • DataSourceProperties 클래스에 의해 위에 명시한 데이터베이스 연결 정보를 맵핑한다.


    • spring.datasource.type: 데이터베이스에 연결할 DataSource 클래스명을 명시한다. 여기서는 Tomcat JDBC Connection Pool을 명시했다. 별도로 명시하지 않을 경우 DataSourceBuilder 클래스에 의해 Tomcat JDBC Connection Pool, HikariCP, DBCP 1, DBCP 2 순서대로 유무를 조사하여 자동 등록한다.

    • spring.datasource.driverClassName: 데이터베이스에 연결할 Driver 클래스명을 명시한다. MySQL에 접속하기 위해 Connector/J를 명시했다. 역시 별도로 명시하지 않을 경우 자동 등록한다.


  • Tomcat JDBC Connection Pool을 사용할 경우 PoolConfiguration 클래스에 의해 추가 설정을 적용한다. 위 예제에는 2개의 추가 설정 만을 명시했지만 실제로 레퍼런스 문서에 명시된 모든 설정 값을 명시할 수 있다.


    • spring.datasource.connectionProperties: 데이터베이스 연결시 적용할 파라메터를 명시한다. 데이터베이스 환경마다 다르므로 적절한 파라메터를 입력한다.


    • spring.datasource.initSQL: 새로운 연결을 생성할 때 마다 실행할 SQL 문을 명시한다.


  • DataSourceAutoConfiguration 클래스에 의해 위 맵핑된 데이터베이스 연결 정보로 dataSource(javax.sql.DataSource) 이름의 빈을 생성한다. 위 방법을 사용하지 않고 직접 입맛에 맞게 dataSource 빈을 생성해도 무방하다.


  • MybatisAutoConfiguration 클래스에 의해 위 생성된 dataSource 빈을 자동으로 인지하여 sqlSeesionFactory(org.mybatis.spring), sqlSessionTemplate(org.mybatis.spring) 이름의 빈을 생성한다. 이 것 만으로 애플리케이션에서 MySQL 데이터베이스에 질의하기 위한 준비는 끝났다.

데이터베이스 질의를 수행하는 DAO 클래스 작성

/src/main/com.jsonobject.example/ExampleDAO.java를 아래와 같이 작성한다. 데이터베이스의 현재 시간을 문자열로 반환하는 간단한 기능이다. 아래와 같은 어노테이션 기반의 질의문 작성은 간단하고 직관적이지만 실제로 프로덕션 레벨에서 요구되는 Dynamic SQL을 소화하기에는 한계가 있으므로 XML 방식의 Mapper 사용을 추천한다.

package com.jsonobject.example;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

@Mapper
public interface ExampleDAO {

    @Select("SELECT NOW()")
    String getCurrentDateTime();
}

DAO를 소비하는 비즈니스 로직 작성

아래는 앞서 작성한 DAO 클래스를 이용하여 비즈니스 로직을 작성한 예이다. 기본적인 Java, JDBC를 이용한 질의에 비해 Spring Boot, MyBatis를 이용한 질의는 매우 간단한 것을 확인할 수 있다.

package com.jsonobject.example;

@Service
public class ExampleService {

    @Autowired
    private ExampleDAO exampleDAO;

    public String getCurrentDataTime() {

        return exampleDAO.getCurrentDateTime();
    }
}

2개 이상의 데이터베이스 연결을 위한 설정

앞서 설명한 방법은 애플리케이션에서 1개의 데이터베이스에만 연결한다는 전제 하에 Spring Boot, MyBatis에 의해 미리 만들어진 코드에 의해 각 1개의 DataSource, SqlSessionFactory, SqlSessionTemplate 빈을 자동으로 생성하고 사용하는 시나리오였다. 하지만 프로덕션 레벨에서는 2개 이상의 데이터베이스에 연결하는 요구사항이 흔히 발생한다. 이번에는 2개 이상의 데이터베이스 질의를 수용할 수 있는 방법을 설명한다. 연결할 데이터베이스의 이름을 first라고 가정하고 진행하겠다.

/src/main/resources/application.properties 파일을 아래와 같이 작성한다.

spring.first.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
spring.first.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.first.datasource.url=jdbc:mysql://localhost:3306/spring_boot_example
spring.first.datasource.username=root
spring.first.datasource.password=Q1w2e3r4
spring.first.datasource.connectionProperties=useSSL=false;useUnicode=yes;characterEncoding=UTF-8;serverTimezone=UTC
spring.first.datasource.initSQL=SELECT 1
  • first라는 키워드를 부여함으로서 추후 second, third 등 2개 이상의 데이터베이스 연결이 가능하도록 확장성을 부여했다. 단지 예시일 뿐 어떤 이름을 부여해도 무방하다.

/src/main/java/com.jsonobject.example/FirstDataSoureConfig.java 파일을 아래와 같이 작성한다.

package com.jsonobject.example;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

@Configuration
public class FirstDataSourceConfig {

    @Bean
    @ConfigurationProperties(prefix = "spring.first.datasource")
    public DataSource firstDataSource() {

        return DataSourceBuilder.create().build();
    }

    @Bean
    public SqlSessionFactory firstSqlSessionFactory(DataSource firstDataSource, ApplicationContext applicationContext) throws Exception {

        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(firstDataSource);
        sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:mapper/first/*.xml"));
        return sqlSessionFactoryBean.getObject();
    }

    @Bean
    public SqlSessionTemplate firstSqlSessionTemplate(SqlSessionFactory firstSqlSessionFactory) throws Exception {

        return new SqlSessionTemplate(firstSqlSessionFactory);
    }
}
  • 앞서 1개의 데이터베이스 만을 구성할 때는 별도의 클래스 작성이 필요 없었지만 2개 이상부터는 위와 같이 DataSource, SqlSessionFactory, SqlSessionTemplate 빈을 별도로 생성하는 작업이 필요하다. 다른 데이터베이스 연결을 위한 작업시 위와 동일한 형태의 클래스를 작성해주면 된다.

/src/main/java/com.jsonobject.example/ExampleDAO.java 파일을 아래와 같이 작성한다.

package com.jsonobject.example;

import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;

@Repository
public class ExampleDAO {

    @Autowired
    @Qualifier("firstSqlSessionTemplate")
    private SqlSession sqlSession;

    public String getCurrentDateTime() {

        return sqlSession.selectOne("com.jsonobject.example.mapper.ExampleMapper.getCurrentDateTime");
    }
}
  • 앞서 생성한 firstSqlSessionTemplate 빈을 맵핑한 것을 확인할 수 있다.

마지막으로 /src/main/resources/mapper/first/ExampleMapper.xml 파일을 아래와 같이 작성한다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.jsonobject.example.mapper.ExampleMapper">
    <select id="getCurrentDateTime" resultType="String">
        SELECT NOW()
    </select>
</mapper>
  • MyBatis의 장기인 강력한 Dynamic SQL 기능을 이용하려면 위와 같이 Mapper라 불리는 XML 문서에 SQL 문을 작성해야 한다. 프로젝트의 통일성을 위해 DAO 클래스의 패키지명과 일치하는 경로에 저장하도록 한다. 예를 들면 아래와 같다.
    • /src/main/java/com/jsonobject/example/dao/UserDAO.java
    • /src/main/resources/com/jsonobject/example/mapper/UserMapper.xml

레플리케이션 연결을 위한 설정

레플리케이션 구성은 아래 글을 참고한다.

참고 글


저작자 표시 비영리 동일 조건 변경 허락
신고

MySQL 5.7.x, Windows, 설치하기

MySQL for Windows 다운로드

MySQL 무료 버전인 MySQL Community Edition을 다운로드한다. 본 글에서 사용한 버전은 5.7.12이다.


  • https://www.mysql.com → Downloads → MySQL Community Edition → Community (GPL) Downloads → MYSQL Community Server → Windows (x86, 64-bit), ZIP Archive -> Downloads


  • 다운로드한 파일을 C:\mysql 경로에 압축 해제한다.

MySQL 설치 및 초기화

MySQL 서버 구동에 앞서 초기화가 필요하다. 아래와 같이 초기화를 실행한다.

C:\mysql\bin> mysqld --initialize

새로운 비밀번호를 부여하기 위해 아래와 같이 mysqld 데몬을 구동한다. 커맨드 창을 종료해도 작업 관리자의 백그라운드에서 프로세스에서 mysqld 데몬이 실행되고 있음을 확인할 수 있다.

C:\mysql\bin> mysqld --skip-grant-tables
[Note] mysqld: ready for connections.
Version: '5.7.12'  socket: ''  port: 3306  MySQL Community Server (GPL)

root 계정으로 MySQL에 접속한다. 아래와 같이 정상적으로 프롬프트가 출력될 것이다.

C:\mysql\bin> mysql -u root mysql
mysql>

앞서 랜덤 생성되었던 root 계정의 비밀번호를 자신만 기억할 수 있는 문자열로 변경한다.

mysql> UPDATE mysql.user SET authentication_string=PASSWORD('Q1w2e3r4') WHERE User='root';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> quit

MySQL 데몬을 재시작 후 다시 아래와 같이 root 계정으로 로그인하면 변경된 비밀번호로 접속됨을 확인할 수 있다.

C:\mysql\bin> mysqladmin -u root shutdown

C:\mysql\bin> mysqld

C:\mysql\bin> mysql -u root -p
Enter password: ********

mysql> SET PASSWORD = PASSWORD('Q1w2e3r4');

새 데이터베이스 생성

아래와 같이 새 데이터베이스를 생성하면 본격적으로 MySQL을 사용할 수 있다.

mysql> CREATE DATABASE spring_boot_example;
Query OK, 1 row affected (0.00 sec)

mysql> USE spring_boot_example;
Database changed


저작자 표시 비영리 동일 조건 변경 허락
신고

MySQL 테이블 생성시 DATETIME 타입에 DEFAULT로 현재 시간 입력하기

Oracle(오라클)에서는 테이블 생성시 날짜와 시간을 저장하는 DATE 타입에 아래와 같이 SYSDATE로 기본값을 부여할 수 있다.


CREATE
    TABLE
        ORACLE_TABLE(
            DATE_CREATED DATE DEFAULT SYSDATE
        )
;


당연한 생각에 MySQL에서도 동일한 시도를 해보았다. MySQLDATETIMEOracleDATE와 동일한 역할을 하는 타입이다.


CREATE
    TABLE
        MySQL_Table(
            DateCreated DATETIME DEFAULT NOW()
        )
;


당연히 될 줄 알았지만 결과는 오류가 발생했다. 구글링 결과 MySQL 버전에 따라 아래와 같이 처리해야 한다.


MySQL v5.6.5 이상일 경우


NOW() 함수가 아닌 CURRENT_TIMESTAMP 함수를 사용해야 한다.


CREATE
    TABLE
        MySQL_Table(
            DateInserted DATETIME DEFAULT CURRENT_TIMESTAMP
        )
;

 

MySQL v5.6.5 미만일 경우


방법이 없다. 굳이 기본 값으로 현재 시간을 입력하려면 해당 테이블에 트리거(Trigger)를 작성해야 한다.


CREATE
    TABLE
        MySQL_Table(
            DateInserted DATETIME
        )
;

CREATE
    TRIGGER MySQL_Table_OnInsert BEFORE INSERT
            ON MySQL_Table FOR EACH ROW
    SET
        NEW.dateInserted = NOW()
;

관련 글


참고 글



저작자 표시 비영리 동일 조건 변경 허락
신고

Joda-Time의 DateTime 타입을 MySQL에 파라메터로 전달하기

Java 소스 코드 작성시 날짜와 시간을 다룰 때 Java의 기본 API가 제공하는 java.util.Date 클래스를 사용하지 않고 Joda-Timeorg.joda.time.DateTime 클래스를 이용하는 편이다. 사용이 훨씬 편리하기 때문이다.


DateTime 클래스 사용시 주의할 점은 데이터베이스에 대한 CRUD 작업시 JDBC Driver를 이용하여 MySQL에 파라메터로 전달할 때 변환 작업이 필요하다. 변환 없이 그래도 파라메터로 전달하면 아래와 같은 오류를 출력한다.


com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value...


해답은 DateTime 객체를 yyyy-MM-dd HH:mm:ss 형식의 String 타입의 문자열 값으로 변환하는 것이다. 아래와 같이 변환하여 전달하면 오류가 발생하지 않는다. org.joda.time.format.DateTimeFormat 클래스 또한 Joda-Time이 제공하는 클래스이다.


DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").print(dateTimeObject);


저작자 표시 비영리 동일 조건 변경 허락
신고

CentOS에서 MySQL 완전 제거 후 새로 설치하기

CentOS 5에서 MySQL을 완전 제거 후 phpMyAdmin까지 새로 설치하는 방법을 정리하였다. 아래 순서대로 진행한다.

기존 설치되어 있는 MySQL 패키지 제거


기존에 설치된 MySQL 패키지를 제거한다.

$ yum remove mysql mysql-server

MySQL 디렉토리 삭제


남아있는 MySQL 디렉토리를 삭제한다. 필요시 백업한다.

$ rm -f -r /var/lib/mysql

MySQL 패키지 설치


MySQL 패키지를 새로 설치한다.

$ yum install mysql mysql-server

phpMyAdmin 설치


phpMyAdmin은 웹 방식의 MySQL 전용 클라이언트이다. 공식 리파지터리보다 최신 버전의 패키지를 제공하는 비공식 리파지터리인 Remi에 접근할 수 있도록 패키지를 설치한다.

$ rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

Remi 리파지터리로부터 phpMyAdmin 패키지를 설치한다.

$ yum --enablerepo=remi install phpMyAdmin

외부에서 phpMyAdmin을 실행할 수 있도록 환경 설정한다.

$ vi /etc/httpd/conf.d/phpMyAdmin.conf
<Directory /usr/share/phpMyAdmin/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     Require local
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Allow from All
   </IfModule>
</Directory>

Apache HTTP Server를 재시작한다.

$ service httpd restart

이제 phpMyAdimin에 접속할 준비가 끝났다. 아래 주소로 접속해보자. localhost 부분에는 자신의 서버 주소를 입력하면 된다.

http://localhost/phpMyAdmin/




저작자 표시 비영리 동일 조건 변경 허락
신고

[DB] [MySQL] 데이터베이스 생성 및 원격 접속하기

* 우분투 서버에 MySQL 설치 후 root 사용자로 로그인한다.

# mysql -u root -p


* 테스트 프로젝트 개발에 사용할 myblog 데이터베이스를 새로 생성한다.

mysql> create database myblog;


* myblog 데이터베이스의 모든 권한을 myblogadmin 사용자에게 부여하고 IP 주소 192.168.11.15(원격 접속 PC 주소)에서만 원격접속이 가능하도록 제한하고 접속 암호는 admin으로 설정한다.

mysql> grant all on myblog.* to myblogadmin@'192.168.11.15' identified by 'admin';


* 생성한 myblog 데이터베이스에 원격접속하기 위해 경량의 MySQL 무료 클라이언트인 HeidiSQL(현재 최신 버전은 v7.0.0.4053)을 설치한다. heidisql로 구글링 후 Downloads > Installer 를 차례로 클릭하여 다운로드 후 설치한다.


* HeidiSQL을 실행하면 Session Manager가 나타난다. New > Network Type: MySQL(TCP/IP) > IP: 192.168.11.21(접속할 MySQL 서버의 주소 입력) > User: myblogadmin > Password: admin > Open을 차례대로 수행하면 앞서 생성한 데이터베이스에 원격접속된다.


* 좌측 윈도우에서 myblog 데이터베이스를 클릭하고 CTRL+T 단축키를 누르면 새로운 Query Tab이 열리면서 MySQL 명령어 및 SQL 문장을 수행할 수 있다. 명령어 입력 후 F9 단축키를 누르면 명령이 실행된다. CTRL+F8 단축키를 누르면 SQL 문장에 대한 자동 포맷팅이 수행된다.

SELECT SYSDATE() FROM DUAL;


저작자 표시 비영리 동일 조건 변경 허락
신고