Run MySql without installation

I had to run MySql database without installation and it took a little bit of effort to make it work. Here are the steps I performed for running MySql without going through installation (noinstall):

  1. Download Zip Archive (Community Edition) from http://dev.mysql.com/downloads/mysql/
  2. Unzip the archive and go to the bin folder.
  3. Initialize MySql database: Run the following on Command Prompt (cmd) while being in the bin folder. This creates data folder with database files.
    mysqld --initialize
  4. Start server with unrestricted access to the full database.
    mysqld --console --skip-grant-tables
  5. Reset password for root user
    • Run mysql.exe (MySql client) from the bin folder. This will take you to a prompt (mysql>).
    • Tell the server to load the grant tables so that account management statements work (They are not loaded due –skip-grant-tables parameter to server).
      mysql> FLUSH PRIVILEGES;
    • 
      

      On mysql prompt (mysql>), run the following queries to reset the root password (one of the following will work depending on your version)

      • ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
      • SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
      • UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPass') WHERE User = 'root' AND Host = 'localhost';
        FLUSH PRIVILEGES;
  6. Restart server in normal mode.
    mysqld --console
  7. Connect using client
    mysql -u root -p

    Enter the password (MyNewPass) when prompted

  8. Execute your queries on mysql prompt (mysql>).

Please note that this works for version 5.7, but may or may not apply to other versions.

 

In order to connect to MySql from the application, download the relevant connector from MySql Connectors. For instance, JDBC driver (connector) for connecting from Java application is available at Connector/J.

Code Snippet: PL/SQL Cursor inside Procedure or Anonymous Block

CREATE OR REPLACE PROCEDURE LOAD_DATA AS
/* replace the above line with DECLARE to have anonymous block */

  A_VAR VARCHAR2(30) := 'A Variable';

  CURSOR CUR_ST IS
  SELECT ST_ID, DESCRIPTION, ST_TYPE from SAMPLE_TABLE;
  /* SQL Query for defining cursor */

BEGIN

FOR CUR IN CUR_ST LOOP

  /* Looping... add main logic here */
  IF CUR.ST_TYPE = '1' THEN
    INSERT INTO OTHER_TABLE (OT_ID, DESCRIPTION)
    VALUES(CUR.ST_ID, CUR.DESCRIPTION);
  ELSE
    A_VAR := 'SKIPPING';
  END;

END LOOP;

COMMIT;

EXCEPTION
    /* Do error handling here */
    /* Remove the EXCEPTION block for exceptions
       to show up outside of procedure */
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('No data found!');
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('Error occurred!');
    ROLLBACK;

END LOAD_DATA;

DBMS_OUTPUT.PUT_LINE can be used to write to console. It works if server output is on:
set serveroutput on size 30000;