¿Cómo dominar realmente MySQL?

13

He estado usando mysql por 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 entender realmente SQL Quiero decir, puedo seleccionar, actualizar, insertar, eliminar, unir, etc. pero cuando se trata de cosas más complejas, estoy perdido. Cómo escribir una declaración select más complicada, cómo usar índices correctamente, qué motor usar, etc.

Por alguna razón, realmente encuentro que los documentos mysql son difíciles de seguir, pero los 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 desde entonces. 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 malinterpreten, no odio SQL, realmente me gusta, solo quiero entenderlo mejor.

¿Cuál es la mejor / más rápida forma 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 sobre SO sin necesidad de ayuda.

JD Isaacks
fuente
2
¿Estás hablando de SQL o MySQL, porque pueden ser cosas muy diferentes? Configurar y administrar la replicación es una tarea muy diferente de escribir una consulta sql complicada. Sospecho que esto también es una función del tiempo. Es casi seguro que ha pasado mucho más tiempo escribiendo PHP que SQL, incluso si los ha estado utilizando durante "la misma cantidad de tiempo".
Steven Evers
@SnOrfus Tiene un buen punto sobre escribir más código en PHP. MySQL es el único lenguaje de base de datos relacional que he usado. cuando dije "SQL" solo me refería a ese tipo de lenguaje en general.
JD Isaacks
Haz cosas que sean útiles. Explore los diferentes problemas que puede encontrar en el mundo real. De esta manera, lo guiará a explorar escenarios que son más complejos que la teoría de los libros de texto. Pruebe cosas en la consola y vea si puede obtener los resultados que desea sin usar PHP. Por ejemplo, la clase de introducción gratuita a la base de datos que lanzó Stanford tiene algunos ejercicios interesantes relacionados con las redes sociales.
James P.
Mucha gente odia PHP (por varias razones, algunas muy buenas), pero su documentación es excelente. Una razón por la que encuentra que los documentos PHP son más fáciles de seguir que los documentos MySQL no es la naturaleza de los lenguajes sino la naturaleza de la documentación.
TRiG

Respuestas:

10

Úsalo

Internalizar cómo funcionan las bases de datos relacionales es difícil para muchas personas, pero es muy valioso. A medida que trabaje más con SQL, se abrirá paso en su cerebro. Sigue empujándote a ti mismo.

Cuando algo parece extraño, investiga

En Chrome, configuré este motor de búsqueda, así 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 proporcionar alguna información.

¡Leer!

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

TehShrike
fuente
1
Bueno, la buena noticia es que ya tengo el libro que me recomiendan, pero todavía no lo he revisado. ¡Gracias! +1 para obtener instrucciones sobre cómo configurar la búsqueda de Chrome.
JD Isaacks
Tengo el libro, simplemente no lo he leído todavía.
crosenblum
@tehShrike, ¿cómo hiciste eso en Chrome?
jaybny
@jaybny haz clic derecho en la barra de direcciones y ve a "editar motores de búsqueda"
TehShrike
9

En primer lugar, obtenga una comprensión profunda de las uniones. No solo se une el interior y el izquierdo. Sepa lo que hace una unión cruzada y una unión externa completa. Conozca las circunstancias que le harían 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 los de una combinación interna. (Uno podría pensar que sería obvio, pero he leído demasiadas preguntas en las que las personas al describir su problema, de alguna manera intentan al azar diferentes combinaciones).

A continuación, realmente entiendo los agregados y cómo funcionan. Mysql le permitirá salirse con la suya al no hacer bys grupales de manera estándar. Pero tenga la disciplina para definir completamente al grupo mediante una cláusula adecuada. Le ayudará a comprender lo que está haciendo y hará que su conocimiento sea más fácilmente transferible a otras bases de datos.

Aprenda lo que hace la declaración del caso.

Al hacer consultas complejas, aprenda a trabajar en trozos. Verifique en cada fragmento que tenga los resultados que espera. Entonces, por ejemplo, supongamos 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 obtener los pedidos devueltos 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 pongo en una línea separada y los comento a medida que avanzo en el siguiente paso (eliminarlos al final una vez que sé que estoy en lo cierto) para que estén disponibles para volver a verlos 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 ser sus resultados. Pensar que se ve bien porque devolvió algunos resultados casi garantizará que tenga resultados incorrectos una buena parte del tiempo. m a la derecha) para que estén disponibles para volver a ver 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 ser sus resultados. Pensar que se ve bien porque devolvió algunos resultados casi garantizará que tenga resultados incorrectos una buena parte del tiempo. m a la derecha) para que estén disponibles para volver a ver 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 ser sus resultados. Pensar que se ve bien porque devolvió algunos resultados casi garantizará que tenga 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 pensarlo:

  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 devuelva solo un registro de la tabla con el lado múltiple de la relación uno a muchos
  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 cursor
  10. Debería poder actualizar un grupo de registros en una tabla sin cursor
  11. Debería poder eliminar un grupo de registros en una tabla sin cursor
  12. Debería poder realizar múltiples acciones en una transacción y manejar la captura de errores
  13. Debe 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 en función de algunos criterios (utilizando CASE)

Una vez que se sienta cómodo con su conocimiento básico de SQL, conozca la estructura de su base de datos. Puedo escribir consultas complejas contra los dbs muy complicados que soporto mucho más rápido que otras personas porque entiendo la estructura y no tengo que pensar dónde están almacenadas las cosas. Si comprende la estructura de la tabla y las relaciones de clave externa y dónde se almacenan los valores de búsqueda y qué significan las columnas (no solo su nombre, sino qué datos se encuentran en ellas), entonces puede ser experto en consultar esa base de datos. Lo primero que hago en cualquier trabajo nuevo es comprender a fondo la estructura db.

HLGEM
fuente
3

En mi opinión, para aprender SQL (y esto es realmente por lo que está preguntando, los detalles de MySQL pueden venir más adelante), debe eliminarse del flujo de control de la programación al estilo PHP. Piensa 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á a tiempo. Resuma esta capa en su mente y deje que MySQL (u Oracle o lo que sea) se preocupe por cómo .

La lógica de la aplicación puede ocurrir en SQL vs código procesal / OO en PHP. Por ejemplo, cuando realiza consultas a la base de datos por algo, puede unirse de manera consistente en una tabla de usuario y tal vez en una tabla de permisos para garantizar los derechos adecuados en lugar de realizar múltiples consultas previas. La inserción se puede realizar a través de 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 centrarse en las primitivas 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 quiere hacer a través de ellos. El resto puede seguir.

Jé Queue
fuente
¡+1 para el segundo párrafo, un gran consejo y nunca lo pensé de esa manera!
JD Isaacks
2

La forma más rápida en que encontré para "dominar" algo fue desafiarme a mí mismo con eso. Tome un conjunto de datos y escriba entre ocho y diez cosas diferentes que le gustaría consultar. Un grupo de estudiantes que tal vez desee encontrar la edad promedio de todos los grupos agrupados por el promedio de calificaciones redondeado al número entero más cercano. Luego escribe las consultas para ellos. Comience con una tabla, luego agregue más. Practique uniones de datos y funciones integradas.

Josh K
fuente