집 >데이터 베이스 >MySQL 튜토리얼 >4가지 SQL 언어에 대한 자세한 설명: DDL DML DCL TCL_MySQL
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을 공부하는 모든 분들께 도움이 되었으면 좋겠습니다.