Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
sql [2024/12/18 13:33] lmachucasql [2025/06/16 19:14] (actual) lmachuca
Línea 7: Línea 7:
  
 =====Expresiones DDL===== =====Expresiones DDL=====
 +
  
 ==== Schemas ==== ==== Schemas ====
 Un schema es una unidad lógica estructural que reúne tablas, vistas y funciones. Un schema está bien definido en SQ93 y en PostgreSQL; en MySQL, un schema es equivalente a una base de datos. Un schema es una unidad lógica estructural que reúne tablas, vistas y funciones. Un schema está bien definido en SQ93 y en PostgreSQL; en MySQL, un schema es equivalente a una base de datos.
 +
 +<code sql>
 +CREATE SCHEMA helpcomschema OWNER usuario; -- crear un schema
 +GRANT USAGE ON SCHEMA helpcomschema TO usuario2; -- permitir conectar
 +DROP SCHEMA helpcomschema; -- bajar un schema si no hay dependencias
 +DROP SCHEMA helpcomschema CASCADE; -- bajar un schema y todos sus objetos.
 +</code>
 +
 +
 +En PostgreSQL se muestra los schemas de una conexión con ''\dn'' y los schemas foráneos con ''\det+''.
 +
 +En SQLite y MySQL no existe una forma estandarizada de mostrar los schemas de una conexión.
  
 ==== Tablas ==== ==== Tablas ====
Línea 28: Línea 41:
 Por ejemplo: Por ejemplo:
  
-<code mysql>+<code sql>
 CREATE TABLE libro ( CREATE TABLE libro (
-  isbn VARCHAR(20) NOT NULL, +  isbn VARCHAR(20) NOT NULL UNIQUE
-  titulo VARCHAR(80) NOT NULL, +  titulo TEXT NOT NULL, 
-  autor INTEGER, +  autor_id INTEGER, 
-  edicion INTEGER, +  edicion_id INTEGER, 
-  anyo INTEGER+  "año" SMALLINT UNSIGNED,
   hardprint BOOLEAN,   hardprint BOOLEAN,
   hardcover BOOLEAN,   hardcover BOOLEAN,
Línea 44: Línea 57:
 <code> <code>
                         Table "public.libro"                         Table "public.libro"
-  Column   |         Type          | Collation | Nullable | Default  +  Column    |         Type          | Collation | Nullable | Default  
------------+-----------------------+-----------+----------+--------- +------------+-----------------------+-----------+----------+--------- 
- isbn      | character varying(20) |           | not null |  + isbn       | character varying(20) |           | not null |  
- titulo    character varying(85) |                    |  + titulo     text                  |                    |  
- author    | integer                                  |  + author_id  | integer                                  |  
- edicion   | integer                                  |  + edicion_id | integer                                  |  
- anyo      integer               |                    |  + año        smallint unsigned     |                    |  
- hardprint | boolean                                  |  + hardprint  | boolean                                  |  
- hardcover | boolean                                  | + hardcover  | boolean                                  | 
 Indexes: Indexes:
     "libro_pkey" PRIMARY KEY, btree (isbn)     "libro_pkey" PRIMARY KEY, btree (isbn)
Línea 61: Línea 74:
  
 En MySQL es posible recuperar la sentencia que creó una tabla con ''SHOW CREATE TABLE tabla''. En MySQL es posible recuperar la sentencia que creó una tabla con ''SHOW CREATE TABLE tabla''.
 +
 +En PostgreSQL, SQLite, etc, y en SQ92 no existe una sentencia directa para observar el schema. Aunque la tabla mostrada anteriormente se puede componer usando los registros del schema de sistema ''information_schema'':
 +
 +<code sql>
 +select column_name,data_type,column_default as "def?",is_nullable as "null?", (case when data_type like '%character%' then character_maximum_length when data_type like '%int%' then numeric_precision else '0' end ) as "variable", generation_expression 
 +from information_schema.columns 
 +where table_catalog='database' and table_schema='helpcomschema' and table_name='libro';
 +</code>
 +
 +
 +Lo que resulta en la siguiente salida:
 +
 +<file>
 + column_name |     data_type     | def? | null? | variable | generation_expression 
 +-------------+-------------------+------+-------+----------+-----------------------
 + isbn        | character varying |      | NO    |       20 | 
 + titulo      | text              |      | NO    |        0 | 
 + autor_id    | integer                | YES         32 | 
 + edicion_id  | integer                | YES         32 | 
 + año         | smallint          |      | YES         16 | 
 + hardprint   | boolean                | YES          0 | 
 + hardcover   | boolean                | YES          0 | 
 +
 +</file>
  
  
-En lenguaje SQL no hay una forma estandarizada para listar tablas. En distintos motores existen distintos mecanismos. 
  
 **Mostrar tablas en el schema:** **Mostrar tablas en el schema:**
  
-  * Postgres: ''\dt'' y similares.+En lenguaje SQL no hay una forma estandarizada para listar tablas. En distintos motores existen distintos mecanismos. 
 + 
 +  * Postgres: ''\dt'' , ''\det'' y similares.
   * MySQL: ''show tables;'' y similares.   * MySQL: ''show tables;'' y similares.
-  * SQite: ????+  * SQite: ''.tables''
 + 
 +En SQL92 se puede obtener una vista generalizada de tablas de un schema consultando ''information_schema.tables'': 
 + 
 +<code sql> 
 +select table_name, table_type  
 +from information_schema.tables  
 +where table_catalog='mibdd' and table_schema='helpcomschema'; 
 +</code> 
 + 
 +Las tablas con tipo ''BASE TYPE'' son creadas con ''CREATE TABLE''. Objetos de otros tipos, como ''LOCAL TABLE'', son creados por otras instrucciones. 
 + 
 +**Eliminar una tabla** 
 + 
 +<code sql> 
 +DROP TABLE libro; -- eliminar si no hay depedencias 
 +DROP TABLE libro CASCADE; -- eliminar la tabla, y todas sus filas y tablas dependientes. 
 +</code>
  
  
Línea 85: Línea 140:
  
 Para que una vista esté definida, la consulta debe ser resoluble al momento de crear la vista, ergo todos los nombres, funciones y schemas usados en la vista deben existir. Para que una vista esté definida, la consulta debe ser resoluble al momento de crear la vista, ergo todos los nombres, funciones y schemas usados en la vista deben existir.
 +
 +**Eliminar una vista**
 +
 +<code sql>
 +DROP VIEW vista;
 +</code>
 +
  
 ==== Funciones ==== ==== Funciones ====
  
-TBD+:FIXME: TBD 
 + 
 +==== Tipos de Datos ==== 
 + 
 +Los siguientes tipos de datos son globales en SQL: 
 + 
 +{| class="mwtable inline zebra" 
 +|- 
 +! INTEGER || Un número entero, con signo, de hasta 32 o 64 bits. || ''12345'' 
 +|- 
 +! REAL  || Un número flotante en rango de IEEE754 ''double'' || ''186354.01921'' 
 +|- 
 +! CHAR(n)  || Un array de exactamente //n// bytes.  || ''CHAR(12) : "abcdefghij  "''  
 +|- 
 +! TEXT  || Un blob de tamaño variable, \\ parseado como texto **en el collation de la tabla**. || ''"Hola Mundo"'' 
 +|- 
 +! BLOB  || Un blob tratado como un binario. || 
 +|- 
 +|} 
 + 
 +Cada motor agrega sus tipos de datos propios. Algunos tipos que son bastante comunes son ''VARCHAR(n)'' (un array de tamaño dinámico de caracteres parseado como texto); ''DATETIME'', ''DATE'' y ''TIME'' (estampas de fecha y hora); ''DECIMAL(m,d)'' (un número de punto flotante de //d// decimales) y ''ENUM'' (variable que toma valores dentro de una lista de valores discretos). 
 + 
 +  
 +==== UDL ==== 
 + 
 +:FIXME: TBD 
  
 ===== CRUD ===== ===== CRUD =====
sql.1734528825.txt.gz · Última modificación: 2024/12/18 13:33 por lmachuca
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0