Go up to the main SLP documents page (md)
This assumes that you have already installed MySQL. On Ubuntu, this typically means installing the 'mysql-server' package.
To start up MySQL, enter mysql -u mst3k -p
from the command line. The -u mst3k
is the user you are logging in as. The -p
tells MySQL to prompt you for a password. If the name of your MySQL user is the same as your Unix user, then you can eliminate the -u mst3k
part entirely. You may also want to specify a starting database: mysql -p foobar
- if you do not, you will have to execute a use foobar;
command (see below) once logged into mysql.
If you would rather not have to enter your MySQL password each time, you can create a .my.cnf
(yes, that's the correct file name) in your Unix user's home directory. It should have two lines:
[client]
password=abcdefg
Be sure the permissions are set properly (chmod 600 .my.cnf
), and you can just run mysql
or mysql foobar
to start the client; the password is read from the .my.cnf file, and thus you are not prompted for it.
To create a database: create database foobar;
. Note that this must be run as the administrative user (typically root).
To see what databases are avaialble: show databases;
. This will show all the databases that you have access to. If you are the root user, then it will show all the databases.
To use a database once logged in: use foobar;
To give a user permission to use a database: grant all on foobar.* to 'userid' identified by 'password';
. Note the foobar.* part as well as the quotes around the userid and password. Some platforms also require that you specify 'userid'@'localhost'
as well as just 'userid', so I usually enter both commands. 'password' is the password you use when you start up mysql. If you already have a password set, you can ignore the identified by 'password'
part.
A sample table creation command looks like the following. This can all be one line or on multiple lines. And the MySQL keywords are capitalized to differentiate them in the examples below, but they can all be lower case as well (MySQL doesn't care about the case of the keywords, but does with user identifiers):
CREATE TABLE example_autoincrement (
id INT,
data VARCHAR(100)
thedate DATETIME,
value DOUBLE
);
Note that there is no comma after the last field in the table.
If you are creating tables for CakePHP, then there are a few additional things you want to put in all your tables: - an id INT
field that automatically increments (each new record has a successively higher value) - a primary key on that id
field. A primary key means that this is the primary way to differentiate one record from another. You can create primary keys out of almost anything, but making them out of an auto-incrementing int field is most common. - a created DATETIME
field that CakePHP will update for you - a modified DATETIME
field that CakePHP will update for you
Thus, a CakePHP table might look like the following:
CREATE TABLE semesters (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title TINYTEXT,
year INT UNSIGNED,
start_month TINYINT UNSIGNED,
end_month TINYINT UNSIGNED,
created DATETIME DEFAULT NULL,
modified DATETIME DEFAULT NULL
) ENGINE=innodb;
The title, year, start_month, and end_month fields would be replaced with the data that you want to hold in your table. Note the 'ENGINE=innodb' part at the end - this is necessary if we want to use foreign keys, which this tutorial is not going over. But putting that in doesn't hurt, and allows the inclusion of foreign keys in the future.
MySQL has a large number of data types
To see the tables that are available: show tables;
. This shows the tables in the current database.
To delete a table: drop table semesters;
. This will delete all the data from that table!
To see the information about a table: describe semesters;
. This shows the default column values, which are used below.
To remove all elements from a talbe: truncate semesters;
. You can do a delete command (see below), but truncate is much faster, as it does not remove each element one-by-one, which is what delete does.
We are assuming the semesters table from above is the table we are pulling data from.
A typical command is: select * from semesters;
. You can specify which data you want to retrieve via a where clause: select * from semesters where year=1989;
. The *
means all columns; you can select individual ones as well: select id, title, year from semesters where year=1989;
.
There are many other options to the select command: http://dev.mysql.com/doc/refman/5.0/en/select.html
You can insert data into the database in two forms:
insert into semesters set year=2012, start_month=3, end_month=12, created=now(), modified=now();
insert into semesters values (null, "Fall 2012", 2012, 8, 12, now(), now()), (null, "Fall 2011", 2011, 8, 12, now(), now());
A bunch of things are happening here: - in the first one, note that only some of the fields are being specified; the others have the default values (which the describe table command displays) - now()
is a function call, and returns the current datetime - the second command inserts multiple rows at once, but all columns in the row must be specified - note that we specify null
for the id, as MySQL will assign an auto-incremented id value for us
To update a row: update semesters set start_month=9 where year=2012;
. MAKE SURE that you specify your where
clause, else it will update EVERY row in your table!
delete from semesters where year=2012;
MAKE SURE that you specify your where
clause, else it will delete EVERY row in your table!
You can also use the truncate command, described above
From the command line (NOT from the MySQL prompt), we will use the mysqldump command:
mysqldump -u mst3k -p foobar > foobar.sql
Note that the options to mysqldump are the same as when you call mysql from the command prompt:
-u mst3k
: specifies the user, but is not necessary if it is the same as your Unix user-p
: specifies to prompt for a password, but is not necessary if you set up your .my.cnf as described abovefoobar
: specifies the database to back up; unlike with the mysql client, this is requiredThis command also redirects the dump to a file (called "foobar.sql").
To restore the database:
cat foobar.sql | mysql -u mst3k -p foobar
Note that this will erase ALL values that currently exist in the tables.
There are a number of more advanced topics that we are not going over in this tutorial; we are just listing them here: