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.