Es mi primera vez tratando de insertar la información en una base de datos mysql con un ejecutable .sh archivo.

Estoy usando el siguiente script de bash, pero no está funcionando. Es evidente que la mayoría de las variables a continuación han sido reemplazados y simplificado para facilitar su comprensión.

#!/bin/bash

mysql -D mydbname -u mydbuser -p mydbpass <<EOF
INSERT INTO mytable (mycolumn) VALUES ('myvalue') WHERE id = '13';

exit;

Se puede ver que solo quiero insertar mi valor en la fila donde id = 13 y esta fila no existe.

Creo que no soy el formato de la consulta correctamente soy yo?

EDIT : después de Aceptar las sugerencias de abajo ahora tengo esto, pero aún así no funciona?

#!/bin/bash
mysql -D mydbname -u mydbuser -p mydbpass <<EOF
UPDATE mytable SET mycolumn = 'myvalue' WHERE id = '13';
exit;
  • Mezcla de inserción y actualización de la sintaxis. Que no funcionan.
  • La consulta en sí es malo. INSERT no tiene WHERE cláusula
  • Doh! Por supuesto que tienes razón.. Gran descuido de mi parte.. Siento muy tonto ahora 🙁
InformationsquelleAutor Grant | 2015-02-11

3 Comentarios

  1. 6

    Encontrado la respuesta después de un poco de ensayo y error.

    Sólo en caso de que alguien más está mirando para hacer la misma cosa es :

    #!/bin/bash
    
    mysql -u username -puserpass dbname -e "UPDATE mytable SET mycolumn = 'myvalue' WHERE id='myid'";

    Tenga en cuenta que no hay ningún espacio entre el-p y su contraseña -puserpass si pones un espacio no -p userpass se le pedirá la contraseña.

    Espero que ayude a alguien 😉

    • El heredoc método funciona bien si utiliza SQL apropiado y la sintaxis de bash. Pero en tanto que el enfoque y la de arriba son más ineficientes cuando se desea ejecutar varias instrucciones y no funciona para las transacciones. En tales escenarios, la tubería de la salida de un script en bash para mysql entrada será más eficiente y de soporte de las transacciones.
    • re: «la tubería de la salida de un script en bash para mysql entrada será más eficiente y de apoyo a las transacciones». Tal vez debería dar un ejemplo.
  2. 0

    Su consulta no funciona ya que no se han escrito EF al final de la secuencia de comandos. Ver mi ejemplo a continuación.

    #!/bin/bash
    
    mysql -u root -ppassword DB_NAME <<EOF
    SELECT * FROM CUSTOMERS WHERE NAME='YOURNAME';
    SELECT * FROM ANOTHER_TABLE WHERE SOMETHING_ELSE;
    ... more queries
    EOF

    Tenga en cuenta que el -ppassword argumento puede ser omitido si la conexión no requiere una contraseña.

Dejar respuesta

Please enter your comment!
Please enter your name here