Heim >Datenbank >MySQL-Tutorial >Ausführliche Erklärung der vier SQL-Sprachen: DDL DML DCL TCL_MySQL

Ausführliche Erklärung der vier SQL-Sprachen: DDL DML DCL TCL_MySQL

WBOY
WBOYOriginal
2016-08-20 08:48:101598Durchsuche

Ich habe viele Leute darüber diskutieren sehen, dass SQL in vier Typen unterteilt ist. Lassen Sie uns das Wissen hier bekannt machen und ihre Unterschiede zusammenfassen.

1. DDL – Datendefinitionssprache

Datenbankdefinitionssprache: Definiert die Struktur der Datenbank.

Zu den Hauptbefehlen gehören CREATE,ALTER,DROP usw., die im Folgenden anhand von Beispielen ausführlich erläutert werden. Diese Sprache erfordert kein Commit, seien Sie also vorsichtig.

CREATE – um Objekte in der Datenbank zu erstellen. Objekte in der Datenbank erstellen

Beispiel:

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

ALTER – ändert die Struktur der Datenbank. Ändern Sie die Datenbankstruktur

Beispiel:

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

DROP – Objekte aus der Datenbank löschen Objekte aus der Datenbank löschen

Beispiel:

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

Und andere:

TRUNCATE – Tabelleninhalt abschneiden (sehr häufig während der Entwicklungsphase)

COMMENT – Fügen Sie dem Datenwörterbuch Notizen hinzu

2. DML – Datenmanipulationssprache

Datenbankoperationssprache: Daten in der Datenbank in SQL verarbeiten

Zu den Hauptbefehlen gehören INSERT,UPDATE,DELETE usw. Diese Beispiele werden häufig von allen verwendet und werden nicht einzeln vorgestellt. Diese Sprache erfordert Commit. Es gibt auch die häufig verwendete LOCK TABLE.

Es gibt noch andere Unbekannte:

CALL – ruft eine PL/SQL- oder Java-Subroutine
auf

EXPLAIN PLAN – Datenzugriffspfad analysieren und analysieren

3. DCL – Datenkontrollsprache

Datenbankkontrollsprache: Autorisierung, Rollenkontrolle usw.

GRANT – Gewähren Sie Benutzern Zugriffsrechte

REVOKE – Autorisierung entziehen

4. TCL – Transaktionskontrollsprache

Transaktionskontrollsprache

COMMIT – Abgeschlossene Arbeit speichern

SAVEPOINT – Legt einen Sicherungspunkt in der Transaktion fest, der hierher zurückgesetzt werden kann

ROLLBACK – Rollback

SET TRANSACTION – Transaktionsoptionen ändern

Beispiel: JDBC in Java kapselt die Unterstützung für Transaktionen. Beispielsweise erstellen wir zunächst eine neue Tabelle: 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;

Das erste Beispiel für ein JDBC-Transaktions-Rollback – JDBC-Datenbank-Transaktions-Rollback:

/**
 * 描述: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();
        }
      }
    }
  }
}

Zeile 19: Die Transaktionsisolationsstufe ist auf SERIALIZABLE eingestellt. Der zugrunde liegende Aufruf ist SET TRANSACTION der TCL-Sprache

Zeile 22: Ausführung bestehen, Daten einfügen

Zeile 23: Die Ausführung schlägt fehl, es gibt keinen Datensatz mit Primärschlüssel 4 und es wird direkt eine Ausnahme ausgelöst

Zeile 31: Transaktions-Rollback, gekapselt ist das ROLLBACK der TCL-Anweisung

Das zweite Beispiel für ein JDBC-Transaktions-Rollback – JDBC-Datenbanktransaktions-Rollback, Rollback auf einen bestimmten Speicherpunkt:

/**
 * 描述: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();
        }
      }
    }
  }
}

Ich werde die Duplikate des ersten Beispiels nicht erwähnen.

Zeile 9: Einen Sicherungspunkt deklarieren

Zeile 24: Savepoint gesetzt

Zeile 33: Transaktion auf diesen Sicherungspunkt zurücksetzen

Der obige Code beinhaltet SAVEPOINT in der TCL-Sprache

Zum Schluss noch ein Bild zur Zusammenfassung: (SELECT gehört zu DQL.)

Ich hoffe, dass dieser Artikel für alle hilfreich ist, die SQL lernen.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn