Mi experiencia al usar mysql y oracle-difference

Es muy conveniente usar una clave primaria de incremento automático en mysql. Solo necesita agregar la palabra clave auto_increment al crear una tabla. Los ejemplos son los siguientes:

crear tabla tb1 (id int (11) unsigned not null auto_increment);

Pero en Oracle es diferente, necesita usar otro concepto: número de serie; simplemente podemos entenderlo como una tabla con una sola columna, esta tabla proporciona un método nextval para ayudarnos a generar una identificación auto-incremental, la muestra es la siguiente :

Copie el código
  - 1. Cree una tabla común
  cree la tabla tb1 (el número de identificación no sea nulo);
  - 2. Cree una secuencia, con muchos parámetros, consulte los datos
  usted mismo cree la secuencia seq_tb1 incremente en 1 comience con 1 minvalue 1 maxvalue 999999999
  - 3. Inserte usando
  insert en valores tb1 (id) (seq_tb1.nextval)
Copie el código Como
  puede ver, la operación de Oracle es obviamente mucho más. Por supuesto, el atributo de autoincremento no se proporciona en muchas bases de datos, especialmente para las bases de datos distribuidas. Por tanto, para apoyar esta función, los desvíos son inevitables.

Volver arriba
2. Crear un índice
  El propósito de un índice es, naturalmente, mejorar la eficiencia de las consultas. Si desea agregar un índice en mysql, puede operarlo durante la creación de la tabla o cambiarlo más tarde; los ejemplos son los siguientes:

-- 1. 建表时指定
create table tb1 (username varchar(50), index username (username));
-- 2. 后期更改
alter table tb1 add index username (usrrname);

Pero en Oracle es diferente, solo se puede operar después de que se construye la tabla; los ejemplos son los siguientes:

CREATE INDEX tb1_username ON tb1(username);

Parece que la diferencia no es grande, pero el índice de Oracle es global, es decir, los nombres de índice de todas las tablas no se pueden repetir. Por ejemplo, todos tienen un índice de id, pero no todos pueden llamarse id. Además, cuando Oracle crea una tabla, no se puede hacer en un solo paso. De hecho, toma n pasos: construir tabla sql + n comentario sql + clave primaria sql + n índice sql + construir número de serie sql +. . . En resumen, ¡te emborrachará!

Volver al principio
3. Comentarios de la tabla de campos Cuando
  construimos una tabla, todos debemos comentar, de lo contrario ni siquiera sabremos su significado en dos días. Especifique directamente al crear una tabla o agregar un campo en mysql, por ejemplo:

-- 1. 建表时指定
create table tb1(username varchar(50) comment '用户名标识') comment '测试建表';
-- 2. 修改表结构时指定
alter table tb1 add column nickname varchar (100) '昵称';

El Oracle es diferente, solo se puede anotar después de que se crea la tabla y se crea el campo; el ejemplo es el siguiente:

Copie el código
- Nota al
comentario de la tabla en la tabla tb1 es 'prueba de tabla construida';
-
comentario de anotación de campo en tb1.nombre de usuario es 'identidad de nombre de usuario';
- elimine la tabla de comentarios, en blanco
- elimine las notas de la columna,
copie en blanco el código
  que no estoy diciendo No está bien diseñado, pero se siente demasiado molesto.

Volver arriba
4. La paginación de realización de
  paginación se usa generalmente para la visualización de varias páginas de datos de lista, o para usar varios datos en el total. La paginación en mysql usa limit, que también es la elección de la mayoría de las bases de datos. Los ejemplos son los siguientes:

select username from tb1 limit 50, 100;

En Oracle, es diferente. Utiliza números de fila para localizar registros y generalmente requiere el uso de subconsultas anidadas; los ejemplos son los siguientes:

select * from (select t.*,rownum num from tb1 t where rownum<=100 ) where num>50

No sé cómo el rendimiento es mejor que el límite, es molesto escribir de todos modos.

Volver arriba
5. Plan de ejecución de
  consultas Plan de ejecución de consultas, puede ver qué declaraciones necesitan optimizarse, este trabajo es bastante profesional. Pero si desea ver la situación brevemente, puede hacer esto en mysql:

explain select * from tb1 where username='xx' order by id limit 10;

Para ver el plan de ejecución en Oracle, debe utilizar las herramientas o escribirlo usted mismo. El ejemplo es el siguiente:

-- 1. 执行查询执行计划语句
explain plan for select * from tb1 where username='xx';
-- 2. 查看执行计划结果
select * from table(dbms_xplan.display());

Oracle tiene muchas otras formas de ver el plan de ejecución, sin mencionarlas. No hay nada bueno o malo, solo revísalo.

Volver arriba
6. Herramientas de visualización del lado del cliente En pocas
  palabras, mysql tiene muchas herramientas, como sqlyog, navicat y mysqlworkbench. . .

También hay muchos archivos de oráculo, plsql, navicat. . .

La diferencia en operaciones específicas es comprensible en base a la diferencia en las herramientas del cliente.

Volver arriba
7. Procesamiento de
  texto ultralargo En mysql, los tipos de texto y texto largo se utilizan para procesar texto ultralargo, que no es muy diferente de otros campos (excepto que no se pueden construir índices válidos)

En Oracle, el tipo CLOB se usa para almacenar caracteres muy largos, pero tiene muchas restricciones. Las consultas comunes no pueden mostrar clobs, restricciones de punto y coma, etc. Pero puede contener datos G.

   可能更多需要考虑存储结构异样等问题吧!

Volver arriba
8. La consulta de campo de
  fecha admite fecha, marca de tiempo y otros tipos de datos de fecha.

mysql admite el uso directo de cadenas de fechas para el filtrado de condiciones, el formato predeterminado es: aaaa-MM-dd HH: ii: ss Por ejemplo:

select * from tb1 where dt>'2020-09-13 12:15:01';

Oracle es más estricto y los requisitos deben tener un formato de cadena de fecha anterior para comparar;

select * from tb1 where dt>to_date('2020-09-13 12:15:01', 'yyyy-MM-dd hi24:mi:ss');

Aunque agregar un formato de este tipo no es complicado, siempre resulta incómodo. Después de todo, en más del 90% de los casos, solo necesito verificar este formato, es un pecado escribir tantas cadenas. . .

Volver arriba
9. Modificar el tipo de campo
  A veces, el campo de la tabla falla cuando se usa y necesita cambiar a un tipo de almacenamiento, así que cambie el tipo de datos. Modifique el tipo de campo en mysql, simplemente cámbielo directamente, pero puede fallar.

alter table tb1 change column f1_old f1_new int(11) comment 'xxx';

En Oracle, se maneja de acuerdo con la situación. El campo vacío se cambia directamente y no se permite modificar el tipo de campo de valor. Si se fuerza a cambiar, será bastante problemático, como sigue:

Copiar código
-modificar el tipo de campo vacío, puede modificarlo a voluntad.
Alterar tabla tb1 modificar (f1_old número);
- modificar el tipo de campo no vacío, coincidencia y discrepancia por tipo
-si el tipo coincide, puede cambiarlo directamente, como nchar (20) -> nvarchar (20) -De
lo
contrario, no está permitido modificar, y solo puede crear activamente nuevos campos y reemplazarlos. La clave es que es posible que no pueda modificar la tabla tb1 cambiar el nombre de la columna a name_tmp;
/ Agregar un nombre de campo con el mismo nombre que el nombre del campo original /
modificar la tabla tb1 agregar nombre VARCHAR2 (40);
/ actualización original de los datos del campo name_tmp al nombre del campo agregado, puede considerarse probable que falle /
actualizar TB1 SET name = TRIM (name_tmp);
/ actualización finalizada, eliminando el campo original name_tmp /
ALTER Table TB1 drop column name_tmp;
código duplicado
  Obviamente, el enfoque de Oracle es más riguroso y no permite cambiar el nombre del campo, y el tipo debe ser correcto, oye, pero siempre me siento incómodo;

Volver arriba
10. Agrupar por agregación
  group by puede desduplicar algunos datos de acuerdo con un determinado campo y agregar datos según sea necesario, mysql y oracle son similares, la diferencia es que Oracle no permite devolver otros campos que no sean group by (o no se pueden describir con precisión Field), y mysql devolverá aleatoriamente un grupo por valor de campo. mysql es el siguiente:

select username, avg(score), grade from tb1 group by grade;

Oracle requiere que se determine un cierto valor:

select max(username), avg(score), grade from tb1 group by grade;

Parece que Oracle es más riguroso.

Volver arriba
11. Creación de la tabla
  de particiones El propósito de la tabla de particiones es mejorar la velocidad de las consultas y facilitar la gestión del aislamiento.

MySQL crea una tabla particionada. Mysql no puede crear particiones automáticamente y requiere que el campo de la partición sea parte de la clave principal. Si desea crear una partición automáticamente, debe usar el evento de evento mysql para crear una partición automáticamente. Los ejemplos son los siguientes:

复制 代码
crear tabla tb1 (
id int (11),
day datetime not null
prmary key (id, day)
)
PARTICIÓN POR RANGO (TO_SECONDS (día))
(PARTICIÓN p20200912 VALORES MENOS DE (TO_SECONDS ('20200912')) ENGINE = InnoDB ,
PARTICIÓN p20200913 VALORES MENOS DE (TO_SECONDS ('20200913')) MOTOR = InnoDB);
复制 代码

Crea una tabla de particiones en Oracle

Copie el código
Create Table TB1 (
ID NUMBER (20 is) Not null,
the create_time DATE
)
the PARTITION BY the RANGE (CREATE_TIME) the INTERVAL (NUMTODSINTERVAL (. 1, 'Day'))
(Partición part_t01 valores menos Dentro del último (TO_DATE ('2020-09-12') , 'aaaa-mm-dd')));
Copiar código
  Obviamente, el soporte de Oracle es mejor.

Volver arriba
12. Uso con as
  Cuando se hace un análisis de datos a gran escala sql, con as sql es muy útil. No es compatible con la versión anterior de mysql. Solo puede escribir tablas temporales para que las procese usted mismo.

Y Oracle admite esta sintaxis general:

Copie el código
con AS A (
SELECT * WHERE dt = from TB1 '20, 200,912 '
),
B AS (
SELECT * WHERE dt = from TB2 '20, 200,912'
)
SELECT a.id AID, b.id Bid from the Join A B ON a.pid = b.id;
copiar código

Volver arriba
13. Soporte de transacciones
  En RDB, normalmente transacción se refiere a la atomicidad, consistencia, aislamiento y durabilidad de un lote de operaciones (ACID). En términos generales, el rendimiento de mysql y oracle es el mismo.

MySQL se divide en motores de almacenamiento, como innodb y myisam. Cada motor tiene diferentes capacidades de soporte de transacciones, diferentes principios y diferentes implementaciones de bloqueo. Por ejemplo, innodb bloquea filas y myisam bloquea tablas.

Puede especificar el número de ranuras de transacción al crear una tabla en Oracle

-- 建表时指定事务槽数
create table t3 (id int, num int ) INITRANS 6;
-- 创建索引时指定事务槽数
create unique index tb1_username_idx on tb1 (username) initrans 6;

Volver al principio
14. Consulta de información de proceso
  consulta las tareas en ejecución, que se pueden utilizar para consultar herramientas de consulta lenta.

Puede usar show full processlist directamente en mysql; pero la consulta con condiciones necesita buscar en la tabla:

show full processlist;
select * from information_schema.`PROCESSLIST` where duration > 5;

información del proceso de Oracle:

Copie el código
SELECT b.sid oracleID,
b.username Oracle user,
b.serial #,
spid operating system ID,
paddr,
sql_text SQL en ejecución,
b.machine computer name
FROM v processa, v process a, vp r a c y s s a ,v sesión b, v $ sqlarea c
DONDE a.addr = b.paddr
AND b.sql_hash_value = c.hash_value;
亚马逊 测评 www.yisuping.com

Supongo que te gusta

Origin blog.csdn.net/weixin_45032957/article/details/108575883
Recomendado
Clasificación