"Comandos SQL (incluyendo oraciones de ejemplo) versión bien organizada (4)"
14 objetos de base de datos
14.1 Tabla
1. Crea una tabla
CREATE TABLE OrderItems
(
order_num INTEGER NOT NULL,
Order_date DATETIME NOT NULL,
Cust_id CHAR(10) NOT NULL,
Quantity INTEGER NOT NULL DAFAULT 1, -------指定默认值
)
2. Actualizar tabla
ALTER TABLE Vendors ADD vend_phone CHAR(20) -------给Vendors表增加一个名为vend_phone的列,数据类型为CHAR
3. Eliminar tabla
DROP TABLE CustCopy
4. Cambiar el nombre de la tabla
DB2/MariaDB/MySQL/Oracle/PostgreSQL
RENAME TABLE DB2INST1.TBL_BANKCODE20170822 TO TBL_BANKCODE
<注意1>重命名表时,源表不能在任何现有定义(视图或具体化查询表)、触发器、SQL函数或约束中引用。它也不能具有任何生成列(标识列除外),或者不能是父表或从属表。目录条目更新以反映新表名。
<注意2>后面的表不能加schame。
servidor SQL
sp_rename存储过程
SQLite
ALTER TABLE语句
14.2 Vistas
1. Crear una vista
CREATE VIEW ProductCustomers AS
SELECT cust_name,cust_contact,prod_id
FROM Customers,Orders,OrderItems
WHERE Customers.cust_id=Orders.cust_id
AND OrderItems.order_num=Orders.order_num;
2. Las vistas, como las tablas, deben tener nombres únicos.
14.3 Procedimientos almacenados
14.3.1 Concepto
definición | ilustrar |
---|---|
definición | Un procedimiento almacenado es una o más declaraciones SQL guardadas para su uso posterior. |
ilustrar | Piense en los procedimientos almacenados como archivos por lotes, pero no se limitan al procesamiento por lotes. |
ilustrar | Ventajas y desventajas de los procedimientos almacenados Ventaja 1: encapsular el procesamiento en unidades simples puede simplificar operaciones complejas. 2- No requiere el establecimiento repetido de una serie de pasos de procesamiento, lo que garantiza la consistencia de los datos. Los desarrolladores utilizan el mismo procedimiento almacenado para garantizar la coherencia del código y evitar errores. 3- Simplificar la gestión de cambios. Es decir, si cambia el nombre de la tabla, el nombre de la columna, etc., solo se debe cambiar el código del procedimiento almacenado. 4-El procedimiento almacenado se almacena en forma compilada, lo que puede reducir la carga de trabajo requerida para que el DBMS procese los comandos y mejore el rendimiento. Desventaja 1: la sintaxis del procedimiento almacenado es diferente en diferentes DBMS, escribir un procedimiento almacenado que sea realmente portátil es casi imposible. Sin embargo, la autoinvocación del procedimiento almacenado (el nombre y cómo se pasan los datos) puede seguir siendo relativamente portátil. Si se requiere la migración a otro DBMS, al menos no es necesario mover el código de la aplicación del cliente. 2- Escribir procedimientos almacenados es más complicado que escribir declaraciones SQL, lo que requiere mayores habilidades y una experiencia más rica. |
14.3.2 Creación de procedimientos almacenados
CREATE OR REPLACE PROCEDURE "WHJH"."PR_UPDATE_LAST_STATE" ( )
BEGIN
--6、开始
CALL WHJH.PRO_LOG('PR_HANDLE_CHECK_RESULT',1,9,'更新错误/疑问正式表中的“最终数据状态”');
--单位基本情况信息表
CALL WHJH.PRO_LOG('PR_HANDLE_CHECK_RESULT',1,91,'更新单位表错误/疑问正式表中的“最终数据状态”');
UPDATE WHJH.TBL_BIZCHECK_CUSTINFO_DOU_OFF T SET (LAST_STATE,DEALDATE,DEALTYPE) = (SELECT LAST_STATE,CURRENT DATE,'A' FROM WHJH.TBL_LAST_STATE_TMP A WHERE T.CUSTCODE = A.DATANO fetch first 1 rows only)
where exists(SELECT 1 FROM WHJH.TBL_LAST_STATE_TMP A WHERE T.CUSTCODE = A.DATANO);
commit;
END;
14.3.2 Llamar a procedimientos almacenados
CALL WHJH.PRO_LOG('PR_HANDLE_CHECK_RESULT',1,9,'更新错误/疑问正式表中的“最终数据状态”');
14.3.3 Método de llamada en la herramienta DbVisualizer
Descripción: Ejecuta el procedimiento almacenado directamente en la herramienta.
Formato:
--/
存储过程
/
Aviso:
1 No se puede agregar después de FIN; símbolo
2 CREAR O REEMPLAZAR EL PROCEDIMIENTO "WHJH". "PR_PER_TIMELESS" ( ) Para eliminar O REEMPLAZAR
3 Hacer una copia de seguridad del antiguo procedimiento almacenado
4 Eliminar el antiguo procedimiento almacenado y luego crear un nuevo procedimiento almacenado
5 Procedimiento almacenado: Procedimientos almacenados
6 La segmentación de procedimientos almacenados solo se puede ejecutar con scripts
14.3.3 Método de llamada de script de línea de mandatos de DB2
db2 -td@ -vf 1.sql
Aviso:
1 La ejecución de sql debe estar conectada a la base de datos, y cada procedimiento almacenado está separado por @.
Se pueden ejecutar 2 procedimientos almacenados segmentados. Ejemplo: P2:COMENZAR
14.3.4 Dos procedimientos almacenados en DB2 informan errores.
Error 1: falta de permiso. Falta el permiso para el método.
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0440N No authorized routine named "FN_USDREATE" of type "FUNCTION" having
compatible arguments was found. LINE NUMBER=109. SQLSTATE=42884
Error 2: el procedimiento almacenado que se va a crear ya existe y se informa de un error cuando se vuelve a ejecutar.
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0454N The signature provided in the definition for routine
"TYCJ.SP_DIS_CFA" matches the signature of some other routine that already
exists in the schema or module. LINE NUMBER=12. SQLSTATE=42723
15 Procesamiento de transacciones
15.1 TRANSACCIÓN
definición:
Transacción se refiere a un conjunto de declaraciones SQL;
el procesamiento de transacciones se utiliza para administrar operaciones SQL que deben ejecutarse en lotes para garantizar que la base de datos no contenga resultados de operaciones incompletos.
Ejemplo:
base de datos | Formato |
---|---|
servidor SQL | COMENZAR TRANSACCIÓN ... COMPROMETER TRANSACCIÓN |
MariaDB y MySQL | INICIAR TRANSACCIÓN … |
Oráculo | FIJAR TRANSACCIÓN … |
postgresql | COMENZAR … |
15.2 RETROCESO
Definición: Revertir se refiere al proceso de deshacer una declaración SQL específica;
Explicación: el procesamiento de transacciones se utiliza para administrar las declaraciones INSERT/UPDATE/DELETE, y no puede revertir las declaraciones SELECT, ni puede revertir las operaciones CREATE o DROP.
Ejemplo:
DELETE FROM Orders;
ROLLBACK;
15.3 COMPROMISO
Definición: compromiso (commit) se refiere a no escribir los resultados de la declaración SQL almacenada en la tabla de la base de datos;
Nota: Generalmente, las declaraciones SQL se ejecutan y escriben directamente para la tabla de la base de datos, que es una confirmación implícita (compromiso implícito), es decir, se realiza automáticamente cuando se confirma la operación.
Explicación: en el bloque de procesamiento de transacciones, la confirmación no se realizará de forma implícita y se debe utilizar COMMIT para realizar una confirmación explícita.
Ejemplo:
base de datos | Formato |
---|---|
servidor SQL | COMENZAR TRANSACCIÓN ELIMINAR artículos de pedido WHERE order_num=12345 ELIMINAR pedido WHERE order_num=12345 COMPROMETER TRANSACCIÓN |
Oráculo | SET TRANSACTION DELETE OrderItems WHERE order_num=12345 DELETE Order WHERE order_num=12345 COMMIT |
15.4 PUNTO DE GUARDAR
Definición: SAVEPOINT se refiere a un marcador de posición temporal (marcador de posición) establecido en una transacción, que se puede revertir (diferente de revertir la transacción completa).
Descripción: también conocido como marcador de posición.
Ejemplo: Crear un punto de retención (marcador de posición) delete1
1.
Crear servidor SQL
SAVE TRANSACTION delete1
Retroceder
ROLLBACK TRANSACTION delete1
entero
BEGIN TRANSACTION
INSERT INTO Customers(cust_id,cust_name) VALUES('1000000010','Toys Emporium');
SAVE TRANSACTION StartOrder;
INSERT INTO Orders(order_num,order_date,cust_id) VALUES(20100,'2001/12/1','1000000010');
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
INSERT INTO OrderItems(order_num,order_item,prod_id,quantity,item_price) VALUES(20100,1,'BR01',100,5.49);
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
INSERT INTO OrderItems(order_num,order_item,prod_id,quantity,item_price) VALUES(20100,2,'BR03',100,10.99);
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
COMMIT TRANSACTION
2. Creación de MariaDB, MySQL y Oracle
SACEPOINT delete1
Retroceder
ROLLBACK TO delete1