Update an existing record

UPDATE tbl_name SET col_name = value WHERE what_record_to_update;

Delete an existing record

DELETE FROM tbl_name WHERE which_records_to_delete;

Create users

CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';

CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';

CREATE USER 'admin'@'localhost';

Grant access

GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' WITH GRANT OPTION;

GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';

Two of the accounts have a user name of monty and a password of some_pass. Both accounts are superuser accounts with full privileges to do anything. One account ('monty'@'localhost') can be used only when connecting from the local host. The other ('monty'@'%') can be used to connect from any other host.

One account has a user name of admin and no password. This account can be used only by connecting from the local host.

To check the privileges for an account, use SHOW GRANTS:

SHOW GRANTS FOR 'admin'@'localhost';

To check the MySQL server's listen address use netstat as root:

netstat -tlnp

To make MySQL listen on all available IP addresses, edit /etc/mysql/my.cnf and comment out the line:

#bind-address = 127.0.0.1

Global attributes: NULL or NOT NULL, DEFAULT default_value
Exception: No DEFAULT for TIMESTAMP, BLOB, & TEXT
and any AUTO_INCREMENT column.
Column type Allowed Attributes Default value
TINYINT
SMALLINT
MEDIUMINT
INT
BIGINT
AUTO_INCREMENT
UNSIGNED
ZEROFILL
(in lieu of explicit DEFAULT
attribute in type spec)
NULL if column can be NULL
or 0 if NOT NULL
FLOAT
DOUBLE
DECIMAL
UNSIGNED
ZEROFILL
NULL or 0
CHAR
VARCHAR
BINARY
CHARACTER SET
NULL or ""
TINYBLOB
BLOB
MEDIUMBLOB
LONGBLOB
None NULL or ""
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
CHARACTER SET NULL or ""
ENUM None NULL or first enumeration
SET None NULL or ""
DATE None NULL or '0000-00-00'
TIME None NULL or '00:00:00'
DATETIME None NULL or '0000-00-00 00:00:00'
TIMESTAMP None Current date and time for the first
TIMESTAMP column 0 for any others.
Setting to NULL sets to current
date and time
YEAR None NULL or 0000 or 00

Accessing mysql from the shell, returning results to the shell

me@my:~ $ x="1"; while read a; do echo $x - $a; let x++; done < <(mysql -sse 'show databases')
1 - information_schema
2 - mysql
me@my:~ $

The query string is based on having a ~/.my.cnf file so that variables like host, user, and password do not have to be included.

The two silent options (-s) turn off both column headings, and the ascii boxes.
The -e option means execute the query and quit. The query string should be enclosed in single quotes to protect it from the shell.
Multiple queries, separated by semicolons are allowed.
The < <(command) shell construct lets you redirect the command output into the while block.
The space between the parenthesis is mandatory.

To simply run a command from the shell as if you were at a mysql prompt:

mysql -e 'show databases'

See also Bash and MySQL

Accessing mysql from PHP, returning results to PHP

Connect to the mysql server:

$dbh = @mysql_connect($msq_host,$msq_user,$msq_pass) OR die("Connect failed");

Select the database:

mysql_select_db($msq_db,$dbh) OR die(MYSQL_ERROR());

Disconnect from the mysql server:

mysql_close($dbh);

There are two types of queries; those that don't return a result set (i.e. DELETE, INSERT, REPLACE, UPDATE, etc) and those that do.

For queries that don't return a result set

$result_id = mysql_query("DELETE FROM tbl WHERE fld='value'");
if (!$result_id)
  print "Query failed\n";
elseif (mysql_affected_rows() < 1)
  print "No records were deleted\n";
else
  print mysql_affected_rows()." records were deleted\n";

For queries that do return a result set

There are two types of these. Those that return only one row, and those that return multiple rows.

$result_id = mysql_query("SELECT COUNT(*) FROM tbl");
if (!$result_id || !($row = mysql_fetch_row ($result_id)))
  print "Query failed\n";
else
  print ("The table has $row[0] records\n");
$result_id = mysql_query("SELECT * FROM tbl");
if (!$result_id)
  print ("Query failed\n");
else {
  printf ("Number of records: %d\n", mysql_num_rows ($result_id));
  # Fetch each row in result set
  while ($row = mysql_fetch_row ($result_id)) {
    for ($i = 0; $i < mysql_num_fields ($result_id); $i++) {
      if ($i > 0)
        print(",");
      print ($row($i));
    }
    print ("\n");
  )
  mysql_free_result ($result_id);
}

Or, if you prefer to die:

$result_id = mysql_query("SELECT * FROM tbl") OR die ("Query failed");
while ($row = mysql_fetch_row ($result_id)) {
  for ($i = 0; $i < mysql_num_fields ($result_id); $i++) {
    if ($i > 0)
      print(",");
    print ($row($i));
  }
  print ("\n");
)
mysql_free_result ($result_id);

Or if you don't like for loops, and want to list:

$query = "SELECT * FROM tbl";
$result_id = mysql_query($query) OR die ("Query failed");
while (list ($fld1,$fld2,...) = mysql_fetch_row ($result_id))
  printf ("$s $s ...\n", $fld1, $fld2,...);
mysql_free_result ($result_id);

Row-Fetching Functions

Testing for NULL

NULL values in PHP are unset values.

$query = "SELECT * FROM tbl";
$result_id = mysql_query($query) OR die ("Query failed");
while (list ($fld1,$fld2,...) = mysql_fetch_row ($result_id))
  if (isset($fld1))
    printf ("%s %s ...\n", $fld1, $fld2,...);
mysql_free_result ($result_id);

Handling Quoting Issues

First create a function to select one of several possible mechanisms:

function quote_value ($str) {
  if (!isset ($str))
    return ("NULL");
  if (function_exists ("mysql_real_escape_string"))
    return ("'" . mysql_real_escape_string ($str) . "'");
  if (function_exists ("mysql__escape_string"))
    return ("'" . mysql_escape_string ($str) . "'");
  return ("'" . addslashes ("str") . "'");
}

NOTE: If the quotes above are hard to read they are a single quote inside double quotes (" ' " with no spaces).

Now insert directly into the query without quotes:

$last = quote_value ("O'Malley");
$first = quote_value ("Brian");
$exp = quote_value ("2010-04-13");
$query = "INSERT INTO tbl (last, first, expiration) VALUES ($last, $first, $exp)";

Send mail to the Webmaster

logo This site best viewed with a browser
Warning: This is a Debian centric site
Many thanks to Debra and Ian Murdock for making Debian possible
First created Dec 14, 2008 ~ Last revised April 15, 2010

Valid XHTML 1.0 Strict Valid CSS!