it-swarm-es.com

¿Cómo dominar realmente MySQL?

He estado usando mysql durante la misma cantidad de tiempo que he estado usando PHP. Sin embargo, me siento 10 veces más seguro en PHP; o cualquier otro lenguaje de programación. Pero parece que no puedo comprender realmente SQL. Quiero decir, puedo seleccionar, actualizar, insertar, eliminar, unirme, etc. pero cuando se trata de cosas más complejas, estoy perdido. Cómo escribir una declaración de selección más complicada, cómo usar los índices correctamente, qué motor usar, etc.

Por alguna razón, realmente encuentro los documentos de mysql difíciles de seguir, pero los de php son fáciles de seguir.

Estoy empezando a pensar que tal vez mi cerebro está conectado de una manera que hace que la programación sea confusa, pero sql. No lo sé. La mayoría de la gente piensa que Regex es muy confuso, pero para mí tiene más sentido científico que cómo construir una declaración SQL. Por favor, no me malinterpretes, no odio SQL, realmente me gusta, solo quiero entenderlo mejor.

¿Cuál es la forma mejor/más rápida de dominar realmente MySQL?

Cuando digo "maestro" no me refiero al gurú entre los gurús, me refiero a lo suficientemente inteligente como para resolver la mayoría de las preguntas que hago en SO yo mismo sin necesidad de ayuda.

13
JD Isaacks

Usarlo

Interiorizar cómo funcionan las bases de datos relacionales es difícil para mucha gente, pero es muy valioso. A medida que trabaje más con SQL, llegará a su cerebro. Sigue esforzándote.

Cuando algo parezca extraño, investiga

En Chrome, configuré este motor de búsqueda para que todo lo que tengo que hacer es escribir "m [consulta de búsqueda]" para buscar los documentos (la búsqueda de dev.mysql.com apesta): {google: baseURL} buscar? {Google: RLZ} {google: acceptSuggestion} {google: originalQueryForSuggestion} sourceid = chrome & ie = {inputEncoding} & q = site: dev.mysql.com/doc/refman/5.1/en+%s

Si los documentos no tienen una respuesta, ingrese a #mysql en freenode y vea si alguien puede brindar alguna información.

¡Leer!

Una vez que comprenda cómo funcionan las bases de datos relacionales, querrá saber un poco más sobre lo que está haciendo MySQL con esas consultas mágicas que está escribiendo. Recomiendo encarecidamente MySQL de alto rendimiento - vale la pena su tiempo.

10
TehShrike

En primer lugar, obtenga un conocimiento profundo de las combinaciones. No solo las uniones interna e izquierda tampoco. Sepa lo que hace una unión cruzada y una unión externa completa. Conozca las circunstancias que le llevarían a elegir un tipo particular de unión. Comprenda que no son intercambiables y que la consulta que usa una combinación izquierda puede devolver resultados diferentes a la de una que usa una combinación interna. (Uno pensaría que sería obvio, pero he leído demasiadas preguntas en las que las personas, al describir su problema, prueban uniones diferentes al azar).

A continuación, comprenda realmente los agregados y cómo funcionan. Mysql le permitirá salirse con la suya sin hacer bys de grupo de forma estándar. Pero tenga la disciplina para definir completamente el grupo por cláusula correctamente. Le ayudará a comprender lo que está haciendo y hará que sus conocimientos sean más fácilmente transferibles a otras bases de datos.

Aprenda lo que hace la declaración de caso.

Al realizar consultas complejas, aprenda a trabajar por partes. Verifique en cada fragmento que tiene los resultados que espera. Entonces, por ejemplo, suponga que necesita escribir una consulta de informes sobre los pedidos que se han devuelto en los últimos 3 meses y el motivo de la devolución, así como la información de contacto del cliente. El primer paso es devolver los pedidos en los últimos tres meses. Una vez que sepa que tiene ese sólido, puede agregar la información sobre el motivo de la devolución. Una vez que tenga ese sólido, puede agregar el cliente que lo devolvió. Una vez que tenga ese sólido, agregue la información de contacto de la persona. En cada etapa, verifique sus resultados y vea si tienen sentido. En este caso, probablemente quiera terminar con solo un registro por pedido devuelto. Si en cualquier etapa intermedia, el número de resultados aumenta o disminuye, sabe que tiene un problema con la consulta. A veces, en los bloques de construcción, querrá ver campos adicionales solo para verificar si la información es correcta. Los coloco en una línea separada y los comento mientras trabajo en el siguiente paso (eliminándolos al final una vez que sé que estoy en lo cierto) para que estén disponibles para ver nuevamente fácilmente si agregar otra arruga hizo que la consulta fuera divertida. No puede realizar consultas complejas correctamente sin una comprensión profunda de cómo deberían verse sus resultados. Pensar que se ve bien porque arrojó algunos resultados casi garantizará que obtendrá resultados incorrectos una buena parte del tiempo.

Aquí hay una lista de algunas cosas básicas que debería poder hacer en SQL sin tener que pensar en ello:

  1. Primero una selección directa sin uniones (y sin selección *) pero con condiciones en la selección
  2. Debe saber cómo combinar dos o más tablas y obtener registros que estén en todas las tablas
  3. Debe saber cómo combinar dos o más tablas y obtener registros que están en todas las tablas, pero que devuelven solo un registro de la tabla con el lado de varios de la relación de uno a varios.
  4. Debería poder obtener los registros en una tabla pero no en una tabla asociada
  5. Debería poder agregar datos para un informe
  6. Debería poder insertar un registro en una tabla
  7. Debería poder actualizar un registro en una tabla
  8. Debería poder eliminar un registro en una tabla
  9. Debería poder insertar un grupo de registros en una tabla sin un cursor
  10. Debería poder actualizar un grupo de registros en una tabla sin un cursor
  11. Debería poder eliminar un grupo de registros en una tabla sin un cursor
  12. Debería poder realizar varias acciones en una transacción y manejar la captura de errores
  13. Debería poder crear una unión de registros y saber cuándo usar UNION vice UNION ALL
  14. Debería poder variar los datos para un campo según algunos criterios (usando CASE)

Una vez que se sienta cómodo con sus conocimientos básicos de SQL, conozca la estructura de su base de datos. Puedo escribir consultas complejas contra las bases de datos muy complicadas que soporto mucho más rápido que otras personas porque entiendo la estructura y no tengo que pensar en dónde se almacenan las cosas. Si comprende la estructura de la tabla y las relaciones de claves externas y dónde se almacenan los valores de búsqueda y qué significan las columnas (no solo su nombre, sino los datos que contienen), entonces puede ser un experto en consultar esa base de datos. Lo primero que hago en cualquier trabajo nuevo es comprender completamente la estructura de la base de datos.

9
HLGEM

En mi opinión, para aprender SQL (y esto es realmente para lo que está preguntando, los detalles de MySQL pueden venir más adelante), debe retirarse del flujo de control de la programación al estilo PHP. Piense específicamente en el paradigma de los lenguajes declarativos:

SQL define QUÉ quieres, no cómo hacerlo. Si puede intentar eliminar mentalmente el último, el primero seguirá con el tiempo. Abstraiga esta capa en su mente y deje que MySQL (u Oracle o lo que sea) se preocupe cómo.

La lógica de la aplicación puede ocurrir en SQL frente al código procedimental/OO en PHP. Por ejemplo, al realizar consultas a la base de datos sobre algo, puede unirse constantemente a una tabla de usuarios y tal vez a una tabla de permisos para garantizar los derechos adecuados en lugar de realizar múltiples consultas previas. La inserción se puede realizar mediante una selección similar (insert into ... select ...) en lugar de valores con nombre para garantizar la validación de los datos.

De todos modos, recomiendo encarecidamente centrarse en primativas de Codd y comprender la selección, proyección, unión, unión y diferencia. Al final del día, los conceptos son sencillos y es probable que pueda lograr el 80% de lo que desea hacer a través de ellos. El resto puede seguir.

3
Jé Queue

La forma más rápida que encontré para "dominar" cualquier cosa fue desafiarme a mí misma con ella. Tome un conjunto de datos y escriba entre ocho y diez cosas diferentes que le gustaría consultar. Para un grupo de estudiantes, es posible que desee encontrar la edad promedio de todos agrupados por el promedio de calificaciones redondeado al número entero más cercano. Luego escriba las consultas para ellos. Comience con una tabla, luego agregue más. Practique uniones de datos y funciones integradas.

2
Josh K