>  기사  >  데이터 베이스  >  4가지 SQL 언어에 대한 자세한 설명: DDL DML DCL TCL_MySQL

4가지 SQL 언어에 대한 자세한 설명: DDL DML DCL TCL_MySQL

WBOY
WBOY원래의
2016-08-20 08:48:101549검색

SQL이 네 가지 유형으로 나누어진다고 많은 사람들이 논의하는 것을 보았습니다. 여기서 지식을 대중화하고 차이점을 요약해 보겠습니다.

1. DDL – 데이터 정의 언어

데이터베이스 정의 언어: 데이터베이스의 구조를 정의합니다.

주요 명령어로는 CREATE,ALTER,DROP 등이 있는데, 아래에 예시를 들어 자세히 설명합니다. 이 언어는 커밋이 필요하지 않으므로 주의하세요.

CREATE – 데이터베이스에 객체를 생성합니다. 데이터베이스에 객체를 생성합니다

예:

CREATE DATABASE test; // 创建一个名为test的数据库

ALTER – 데이터베이스 구조를 변경합니다. 데이터베이스 구조 수정

예:

ALTER TABLE test ADD birthday date; // 修改test表,新增date类型的birthday列

DROP – 데이터베이스에서 개체 삭제 데이터베이스에서 개체 삭제

예:

DROP DATABASE test;// 删除test数据库

기타:

TRUNCATE – 테이블 내용 자르기(개발 기간 동안 매우 일반적임)

COMMENT – 데이터 사전에 메모 추가

2. DML – 데이터 조작 언어

데이터베이스 운영 언어: 데이터베이스의 데이터를 SQL로 처리

주요 명령으로는 INSERT,UPDATE,DELETE 등이 있습니다. 이 예들은 누구나 공통적으로 사용하는 것이므로 하나씩 소개하지는 않겠습니다. 이 언어에는 커밋이 필요합니다. 일반적으로 사용되는 LOCK TABLE도 있습니다.

그 밖에도 생소한 것들이 있습니다:

CALL – PL/SQL 또는 Java 서브루틴 호출

EXPLAIN PLAN – 데이터 접근 경로 분석 및 분석

3. DCL – 데이터 제어 언어

데이터베이스 제어 언어: 권한 부여, 역할 제어 등

GRANT – 사용자에게 액세스 권한 부여

REVOKE – 승인 철회

4. TCL – 트랜잭션 제어 언어

거래 제어 언어

COMMIT – 완성된 작품 저장

SAVEPOINT – 여기로 롤백할 수 있는 트랜잭션의 저장점을 설정합니다.

ROLLBACK – 롤백

SET TRANSACTION – 거래 옵션 변경

예: Java의 JDBC는 트랜잭션 지원을 캡슐화합니다. 예를 들어, 먼저 test

라는 새 테이블을 만듭니다.

test.sql

SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
 
-- ----------------------------
-- Table structure for `city`
-- ----------------------------
DROP TABLE IF EXISTS `city`;
CREATE TABLE `city` (
 `id` int(11) NOT NULL DEFAULT '0' COMMENT '城市ID',
 `name` varchar(20) DEFAULT NULL COMMENT '名称',
 `state` varchar(20) DEFAULT NULL COMMENT '状态',
 `country` varchar(20) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
SET FOREIGN_KEY_CHECKS = 1;

JDBC 트랜잭션 롤백의 첫 번째 예 - JDBC 데이터베이스 트랜잭션 롤백:

/**
 * 描述:JDBC数据库事务回滚
 *
 * Created by bysocket on 16/6/6.
 */
public class TransactionRollBack extends BaseJDBC {
 
  public static void main(String[] args) throws SQLException {
    Connection conn = null;
    try {
      // 加载数据库驱动
      Class.forName(DRIVER);
      // 数据库连接
      conn = DriverManager.getConnection(URL,USER,PWD);
 
      // 关闭自动提交的事务机制
      conn.setAutoCommit(false);
      // 设置事务隔离级别 SERIALIZABLE
      conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
 
      Statement stmt = conn.createStatement();
      int rows = stmt.executeUpdate("INSERT INTO city VALUES (3,'china',1,'cc')");
      rows = stmt.executeUpdate("UPDATE city set country = 'TAIWAN' WHERE id = 4");
 
      // 提交事务
      conn.commit();
    } catch (Exception e) {
      e.printStackTrace();
      // 回滚事务
      if (conn != null) {
        conn.rollback();
      }
    } finally {
      /** 关闭数据库连接 */
      if (conn != null) {
        try {
          conn.close();
        } catch (SQLException e) {
          e.printStackTrace();
        }
      }
    }
  }
}

19행: 트랜잭션 격리 수준은 SERIALIZABLE로 설정됩니다. 기본 호출은 TCL 언어의 SET TRANSACTION입니다.

22번째 줄: 패스 실행, 데이터 삽입

라인 23: 실행이 실패하고 기본 키 4가 있는 레코드가 없으며 바로 예외가 발생합니다.

31행: 트랜잭션 롤백, 캡슐화된 것은 TCL 문의 ROLLBACK

JDBC 트랜잭션 롤백의 두 번째 예 - JDBC 데이터베이스 트랜잭션 롤백, 특정 저장 지점으로 롤백:

/**
 * 描述:JDBC数据库事务回滚,回滚到特定的保存点
 *
 * Created by bysocket on 16/6/6.
 */
public class TransactionRollBack2 extends BaseJDBC {
  public static void main(String[] args) throws SQLException {
    Connection conn = null;
    Savepoint svpt = null;
    try {
      // 加载数据库驱动
      Class.forName(DRIVER);
      // 数据库连接
      conn = DriverManager.getConnection(URL,USER,PWD);
 
      // 关闭自动提交的事务机制
      conn.setAutoCommit(false);
      // 设置事务隔离级别 SERIALIZABLE
      conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
 
      Statement stmt = conn.createStatement();
      int rows = stmt.executeUpdate("INSERT INTO city VALUES (3,'china',1,'cc')");
      // 设置事务保存点
      svpt = conn.setSavepoint();
      rows = stmt.executeUpdate("UPDATE city set country = 'TAIWAN' WHERE id = 4");
 
      // 提交事务
      conn.commit();
    } catch (Exception e) {
      e.printStackTrace();
      // 回滚事务
      if (conn != null) {
        conn.rollback(svpt);
      }
    } finally {
      /** 关闭数据库连接 */
      if (conn != null) {
        try {
          conn.close();
        } catch (SQLException e) {
          e.printStackTrace();
        }
      }
    }
  }
}

첫 번째 예의 중복에 대해서는 언급하지 않겠습니다.

9행: 저장점 선언

24행: 저장점 세트

33행: 이 저장점으로 트랜잭션 롤백

위 코드는 TCL 언어의 SAVEPOINT를 포함합니다

마지막으로 요약할 그림은 다음과 같습니다. (SELECT는 DQL에 속합니다.)

이 글이 SQL을 공부하는 모든 분들께 도움이 되었으면 좋겠습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.