MySQL Database Intro
Sorry, deze pagina heb ik voor mijn werk gemaakt, en is dus in het
Engels. Ook is de pagina mogelijk wat verouderd...
Note: most text on this page date back to 2004, and might be a bit
outdated!
What is MySQL: an open-source SQL
relational database system. According to the web site: The MySQL (R)
software delivers a very fast, multi-threaded, multi-user, and robust SQL
database server. MySQL Server is intended for mission-critical, heavy-load
production systems as well as for embedding into mass-deployed
software. mySQL is often installed by default on e.g. web
servers, and as such is more or less a standard database program for web-based
applications.
What is SQL: Structured Query Language, a standardised way to query/update
relational databases.
What is a relational database: very simply said it is a
table-based database, containing multiple tables with relations between those
tables, plus a query/update mechanism to exploit these relations.
What is MySQL used for? All kind of
database aplications, and especially by web providers: most providers allow you
to create a database on their server to store data. Could be anything:
feedback, articles, web pages, pictures, just think of something.
What can I store in MySQL: nearly all kinds of data,
including binary data, long strings, etc. However, in most cases it is more
appropriate to select the right data type (see section 12 in the
MySQL manual) instead of just dumping binary data, in order to be able to use
operations like date/time comparison etc.
What do I need to access MySQL: MySQL is server-based. You can run a local
server, and/or use the server on the Vega, which is the global
DSP-IC server recently installed by Mircea (Thanks!). If you use an existing
server, there are several possible clients, for example:
- mysqlcc: MySQL Control Centre, a nice GUI-based
interface to MySQL. You can input data, query the database, and (if you have
sufficient rights) alter the database structures.
- mysql: a command-line based interface also very usable for
batch mode (e.g. generating xml or HTML output). Has a few partner programs,
most important mysqlshow (to show meta-information on
databases) and mysqldump (capable of dumping a complete
database as ASCII, HTML or XML). See further down the page for some examples.
- Perl: using the DBI module a powerful but simple to use
interface to MySQL can be used inside Perl scripts. See further down the page
for some example code.
-
Access (Microsoft) is also able to connect to MySQL (through ODBC),
however I have no real experience with this route (nor with Access). Two steps
(optional hints in the manual):
- You need to download and install the MySQL ODBC driver (version
3.51) for windows. To configure the driver: start the Control Panel, select
Administrative Tools, select Data Sources (ODBC), press 'add', select the
'
MySQL ODBC 3.51 driver ', fill in the data for the database you
want to access (for example the name or IP number of the
Server=111.222.33.44 , port=3306 ), press 'Test
Data Source ' to verify settings, press OK (twice).
- Now you can start Access: create a new blanko database and store it
somewhere, then with File/Get External Data/Link Tables you get into the Link
window, at the entry 'Files of Type:' select the '
ODBC
Databases() '. In the now visible 'Select Data Source' window select the
'Machine Data Source' tab, and select your database, click OK. You can now see
a list of tables in your database, select the interesting ones. After OK, they
will appear in your database. Clicking on them will open them.
- How are databases backed up? This is probably still to be
arranged; however making a (reloadable) dump of the database to file is easy,
see below examples of mysqldump command. To be continued...
Can I make new tables and/or databases? Only if you have
the corresponding rights. Contact the system administrator if you want to
create new databases, and the database owner if you want to e.g. add tables to
an existing database.
How to use mysql/mysqlshow/mysqldump
This is not a tutorial (see links above, and esp the manual), just
some examples to get started and to get the flavor.
Show the databases accessible under user evptest
c:> mysqlshow --host=Vega --user=evptest
Shows the tables in database Kees_Test (adding -i gives more details)
c:> mysqlshow --host=Vega --user=evptest Kees_Test *
Shows details on table Operations (field types, etc)
C:> mysqlshow --host=Vega --user=evptest Kees_Test Operations
*
Start the mysql command-line/prompt program using database
Kees_Test; list content of the table called Operations; add new entry (note:
TimeStamp is automatically updated, format yyyymmddhhmmss).
c:> mysql --host=Vega --user=evptest Kees_Test
mysql> select * from Operations;
+---------------+-----------+--------------+----------------+ | OperationName | Encoding | Syntax | TimeStamp | +---------------+-----------+--------------+----------------+ | add | 10101010 | add r1,r2,r3 | 20040611125343 | | sub | 10101011 | sub r1,r2,r3 | 20040611125402 | +---------------+-----------+--------------+----------------+ 3 rows in set (0.00 sec)
mysql> INSERT INTO Operations -> VALUES ('mul', '11110000', 'mul r1,r2,r3', NULL);
mysql> quit
An example of a more complex insert statement (also note the
computation) is
INSERT INTO tbl_name (col1,col2) VALUES
(15,col1*2);
Other interesting statements include the update statement:
UPDATE persondata SET age=age*2, age=age+1 WHERE Name
= "Moerman";
or the multi-table update example
UPDATE items,month SET items.price=month.price WHERE
items.id=month.id; and the select statement to retrieve specific
values only as in
select OperationName, Encoding from Operations where
OperationName = "add"; For more examples, see the syntax section in the
manual.
Note: if you want XML or HTML output, use the --xml or
--html command line option. For example, to get a HTML list of all mnemonics
use: H:\>mysql --host=Vega --user=evptest Kees_Test --html
-e"select Mnemonic from Mnemonics;"
Dump the extire database (ready to reload) on stdout, e.g. for backup
purposes
C:> mysqldump --host=Vega --user=evptest -c Kees_Test
Dumps tables (not create statements) as xml to file
C:> mysqldump --host=Vega --user=evptest -c --xml Kees_Test >
dump.xml
How to use MySQL from Perl
Using MySQL from Perl is very easy (if you know SQL). You will need to have
a few Perl modules installed: the DBI module (generic SQL
database interface) and the DBD-mysql module (mySQL driver).
For Windows both are available from the ActiveState repository (use the
ppm command to install). Documentation (limited) is included
in the DBD-mysql
module.
A sample code fragment:
use DBI(); # note: the mysql driver
will be loaded automatically when opening
# Connect to the database.
my $database = "DBI:mysql:database=Kees_Test;host=Vega;port=3306";
my $dbh = DBI->connect( $database, "mydatabase", "", {'RaiseError' =>
1});
# Open table called 'Operations' to
select all records
# More specific questions are possible, e.g. as in
# SELECT * FROM Operations where Mnemonic = "xor";
my $sth = $dbh->prepare("SELECT * FROM Operations");
$sth->execute();
# print returned records (fields
OperationName and Encoding)
while (my $ref = $sth->fetchrow_hashref()) {
print "Found a row: name =
$ref->{'OperationName'}, encoding = $ref->{'Encoding'}\n";
}
# Insert new
element
$dbh->do('INSERT INTO Operations VALUES ("mul", "10101001", "mul r1, r2",
NULL)');
# Disconnect from the
database.
$dbh->disconnect();
Note: NULL values can in Perl be represented by
undef .
Note: when changing fields, TimeStamp fields are automatically updated (pass
NULL as argument) However, if field value is same as previous, the TimeStamp
field is unaltered.
Very useful: Change entry in database if exists (not changing TimeStamp
field if no actual change !!!), insert if not yet exists. Very useful, as the
timestamp does not alter if the new content is the same as the old
content; so for users it is easy to see what has changed when:
if( !$dbh->do( qq[UPDATE Mnemonics SET ShortDesc="$shortdesc",
PseudoCode="$pseudocode" WHERE mnemonic="$mnemonic";]))
{
$dbh->do(qq[INSERT INTO Mnemonics VALUES ("$mnemonic",
"$shortdesc", "$pseudocode", NULL);]);
}
For more details and examples, refer to the manuals and the Perl DBI
documentation.
SQLite
(2009) For using mySQL, you have to have a mySQL server running
somewhere. In case you make scripts for a web server, this is likely already
the case, but to run it on your own computer can be quite complex. A fast
replacement (and usable without administrator rights) is SQLite. This implements a large set of SQL,
and works without server (it operates directly on SQLite database files). It
has a command line interface for inspections and quick experiments, and has
also for example Perl/DBI bindings. Some command line examples (open the
program with an empty database using the command sqlite3
c:\temp\testbase.sql ):
CREATE TABLE test(index1 INTEGER PRIMARY KEY, name TEXT, text
TEXT);
insert into test values(NULL, 'name1', 'text1');
select * from test;
select name, text from test where name = 'name1';
UPDATE test SET text = 'updated text' WHERE name = 'name1';
.dump test
.quit
The perl example above works as as, with the only
exception of the database connection to DBI: replace the 'my
$database ' statement with:
my $database
= 'dbi:SQLite:dbname=c:\temp\testbase.sql';
Nice for locally testing scripts without a local mySQL server!
Some more hints
- Use single quotes as string delimiters, not double quotes!
- Use back-ticks to use restricted words for e.g. table names (e.g. use
`index` if you want to call a column 'index' ,as it is a reserved
word)
- In SQLite, the command
select * from sqlite_master; shows you
the table structures in your database
|