BITS: Introduction to relational databases and MySQL - Schema design

  • 1,639 views
Uploaded on

BITS training: Introduction to relational databases and MySQL - Module 3: Schema design. …

BITS training: Introduction to relational databases and MySQL - Module 3: Schema design.

See http://www.bits.vib.be/index.php?option=com_content&view=article&id=17204047:green-basics-of-databases&catid=81:training-pages&Itemid=190

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,639
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
42
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Introduction to MySQL● Introduction● Installation● SQL● Schema design● PerlBITS/VIB Bioinformatics Training – Jun 29, 2011 – Luc Ducazu <luc@daphnia.com>
  • 2. Database schema● Although you can execute DDL commands from  the MySQL monitor directly, this is not often  done● There are tools that allow you to design a schema  graphically and generate the CREATE TABLE ...  statements ● Examples: – MySQL workbench – Dia
  • 3. MySQL workbench● Available as a standard package on some Linux  distros (eg Fedora) ● Available as Windows MSI, Linux DEB or RPM  package or source archive from  http://dev.mysql.com/downloads/workbench/● To install a DEB package: # dpkg ­i package.deb● To install a RPM package: # rpm ­Uvh package.rpm
  • 4. MySQL workbench ­ demo
  • 5. Database schema● Once the schema is designed, MySQL workbench  can generate a script containing all SQL  statements to create the tables and other objects: File ­>  Export ­>  Forward Engineer SQL CREATE Script● This script can be executed as usual from the  MySQL monitor
  • 6. Inserting rows● To populate tables, use the INSERT SQL  statement: mysql> insert into tbl        (col1, col2, ...)         values        (val1, val2, ...) [,        (valx, valy, ...) , ...]● With: – tbl the name of the table – col1, col2, ... a list (subset) of column names – val1 value for col1 – val2 value for col2
  • 7. Inserting rows ­ examples● Example (biodb version 1) insert into modorg (id, class, genus, species,  nchr, gsize, draft) values (1, “Bacteria”, “Escherichia”, “coli”,  1, 4.639, “1997­09­05 00:00:00”)● Note that strings and dates have to be properly  quoted
  • 8. Inserting rows● You can leave out the column list if – a value is given for all columns – the values are specified in the order dictated by the  schema mysql> insert into tbl        values        (val1, val2, ...) [,        (valx, valy, ...) , ...]
  • 9. Changing rows● To change one or more rows, use the UPDATE  SQL statement: mysql> update tbl set col1=expr1 [, col2=expr2, ...] [where cond]● With: – tbl the name of the table – col1 the column to change – expr1 the new value  – cond the row filter ­ if unspecified, all rows of the  table will be updated
  • 10. Changing rows ­ examples● To change the C elegans number of  chromosomes to 7: update modorg set nchr = 7 where genus = “caenorhabditis”   and species = “elegans”;● To change the draft date to the current date: update modorg set draft = now();
  • 11. Deleting rows● To remove rows, you use the DELETE SQL  statement: delete from tbl [where cond]● With: – tbl the name of the table – cond the row filter ­ if unspecified, all rows of the  table will be deleted – note: since you can only remove entire rows, there is  no need to specify column names
  • 12. Deleting rows ­ examples● To remove all in model organisms with a genome  publishing date before 2000: delete from modorg where year(draft) < 2000;
  • 13. Introduction to MySQL● Introduction● Installation● SQL● Schema design● PerlBITS/VIB Bioinformatics Training – Jun 29, 2011 – Luc Ducazu <luc@daphnia.com>
  • 14. Perl● Perl is a scripting language that has excellent text  manipulation capabilities● Many biological databases are available as flat  text files● Perl is very handy in the automation of the  population of MySQL databases
  • 15. Automated population● There are basically two ways Perl can help to  insert data into tables: – The Perl script generates USE, INSERT, ... SQL  statements. You can than execute these statements  using the MySQL monitor: $ perl myscript.pl | mysql – The Perl script connects to the database and executes  SQL statements directly: DBI
  • 16. Perl DBI● Perl DBI provides a programming interface that  abstracts most of the RDBMS specifics● In principle it should be possible to port scripts,  written for other RDBMSs (like PostgreSQL), to  MySQL with only minimal effort: all you have to  do is change the connection string● Packages to install (Ubuntu) – libdbi­perl: Perl DBI – libdbd­mysql­perl: MySQL driver for DBI
  • 17. Perl DBI ­ connecting● Here is a minimal program: #!/usr/bin/perl ­w use strict; use DBI; my $dbh = DBI­>connect(      “DBI:mysql:host=localhost;database=biodb”,      “user”,      “password”) or die; ... $dbh­>disconnect();
  • 18. Perl DBI ­ connecting● Some highlights: – use DBI; Load Perl DBI library – DBI­>connect(connection string); Connect to a database ● it is a MySQL database server ● the DB server is running on the local machine ● you can provide the name of the database ● you can provide a user name and password The connect() function returns ● a database handle ($dbh) on success ● false on failure – $dbh­>disconnect() to clean up resources
  • 19. Perl DBI ● To execute a SQL statement that does not return a  result set, eg INSERT, DELETE, use do(): my $n = $dbh­>do(stmt);● This function – requires a valid database handle – returns the number of rows affected, if no rows are  affected, a special value is returned: 0E0 (evaluates  true) – false in case of an error● You can use execute() as well
  • 20. Perl DBI ● To execute a SQL statement that returns a result  set, eg SELECT use the following recipe: 1. Prepare a statement: my $sth = $dbh­>prepare(stmt); 2. Send the query to the database server: $sth­>execute(); 3. Read the result, row by row: my @row = $sth­>fetchrow_array(); my $ref = $sth­>fetchrow_hashref(); 4. Clean up resources: $sth­>finish();
  • 21. Perl DBI ­ examples● To list all classes in modorg: ... my $qry = “select distinct class ”         . “from modorg ”          . “order by class”; my $sth = $dbh­>prepare($qry); $sth­>execute(); while(my @row = $sth­>fetchrow_array()) {    print “$row[0]n”; }; $sth­>finish(); ...
  • 22. Perl DBI ­ examples● To list all organisms in modorg: ... my $qry = “select genus, species ”         . “from modorg ”          . “order by genus”; my $sth = $dbh­>prepare($qry); $sth­>execute(); while(my $ref = $sth­>fetchrow_hashref()) {    print $ref­>{“genus”} . “ “         . $ref­>{“species”} . “n”; }; $sth­>finish(); ...
  • 23. Perl DBI ­ examples● To insert a bunch of rows into modorg: ... my $qry = “insert into modorg ”         . “(id, class, genus, species) ”          . “values (?, ?, ?, ?)”; my $sth = $dbh­>prepare($qry); $sth­>execute(11, “Mammels”,        “Sus”, “scrofa”); ...
  • 24. Quoting● Never allow arbitrary user input in SQL  statements