* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download MySQL: Part II - Oxford University ICT Forum
Concurrency control wikipedia , lookup
Extensible Storage Engine wikipedia , lookup
Microsoft Access wikipedia , lookup
Microsoft SQL Server wikipedia , lookup
Relational model wikipedia , lookup
Microsoft Jet Database Engine wikipedia , lookup
Clusterpoint wikipedia , lookup
Developing MySQL Database Applications 6th IT Support Staff Conference Andrew Slater (IT Support Officer: Phonetics & Modern Languages) and John Ireland (Computing Manager, Jesus College) Workshop Synopsis • • • • • • • Introduction to MySQL Open Database Connectivity (ODBC) Home-cooking: writing clients Interacting with the web / PHP Other APIs explained Illustration: college noticeboard Links and references What IS MySQL? Welcome to MySQL • Relational Database Management System (RDBMS) • Open source (GNU Public License) • MySQL server: Windows 9x/NT/2000, Linux, Solaris, OS/2, BSD… • Clients can be different platforms, both via legacy interfaces and open standards (e.g. ODBC) www.mysql.com Features and Compliance • ANSI SQL92 (almost!) except: – Sub-select SELECT * FROM table1 WHERE id IN (SELECT id FROM table2); – SELECT INTO table… • • • • Multi-threaded (good multi-processor performance) Handles large files (e.g. 200GB) efficiently Flexible security model Highly optimised JOINs Performance / Benchmarks • • • • Comparison of competing DBMSs Identical hardware for each test Same platform / OS for each test Graphs shown are summary from MySQL web site MySQL / PostgreSQL MySQL / Access 2000 Smart Datatypes • AUTONUMBER fields are available: a non-revisiting incremental field. – In MySQL you can set the value of an AUTONUMBER field (but beware the consequences). • First TIMESTAMP field is automatically set to current date/time whenever record is updated – Last change time can be a very useful per-record property. – Format is ‘YYYYmmddHHMMSS’, e.g. 20010621142532 Security (1) • Username / password (and optionally client hostname) checked before any commands are accepted; • Different access for each operation (SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, …) • Access is allow / deny at a global, database, table or column level MySQL CLIENT HOST USERNAME PASSWORD DATABASE. TABLE Security (2) • For given SQL statement, permissions are sum of: – global ‘user’ permissions; – permissions specific to table or column; – database (i.e. ‘all tables’) restricted by host. PER-DATABASE PER-USER PER-HOST PER-REQUEST PRIVILEGE PER-TABLE PER-COLUMN Open Database Connectivity ODBC Overview • ODBC provides the application with a standard interface to different DBMS APPLICATION ODBC ODBC Driver MySQL MySQL DATA Centralised Data • Local application has access to data via operating system (e.g. local files, shared drives, UNC path) • ODBC gives access to data held elsewhere, with benefits such as information-centric locking and security LOCAL APPN ODBC NETWORK ODBC REMOTE DATABASE Using MyODBC • Small, free download from www.mysql.com; • Install adds ‘MySQL’ to options in control panel (ODBC applet); • Create a ‘Data Source Name’ for each MySQL database. MS Access Connectivity Link tables from external databases (e.g. other Access *.mdb files or ODBC source) Linked data appears as just another table (even DLookup) MS Access and MySQL • Generally good, fast integration (especially compared to Access with data on shared drive) • Occasional (documented) caveats, e.g. saving a new record can show all fields as #DELETED (use TIMESTAMP) • ‘Find first’ operation can be very slow • Transaction support and roll-back recently added • No direct OLE support, but simple work around available Home-cooked Clients: the Application Programming Interface Why Write Clients? A client is simply the user interface: we already write these! • Choice of tools to generate the UI: this choice should not affect the user; • Each tool has (subtly) different emphasis; • Clients can interact directly with MySQL for speed / memory benefits. Tools to write clients VBA / Access Foxpro Crystal reports ASP / PHP / CGI C / C++ / PERL Java Application Programming Interface • • • • • Key features MySQL functions Form processing Session handling Demos What’s PHP? PHP: Hypertext Pre-processor • “A scripting language that generates dynamic content for the web.” • Developed by Rasmus Lerdorf (1994) Key features • • • • • server-side scripting language tight integration with MySQL available as an Apache module cross-platform open source and free! Usage stats (source Netcraft, April 2001) Number of web sites using PHP Total (domains): 6,156,321 IP addresses: 914,146 Apache Module Usage (Source: E-soft Inc., April 2001) Number of Apache web servers PHP, Apache and MySQL 1 6 Browser Applications: Speech Database (Phonetics) Admissions Database (Modern Languages) How do I get it? http://uk.php.net/downloads.php – – – – complete source code win32 binaries [linux RPMs from Redhat] excellent on-line documentation FAQs, recommended books etc. “Teach Yourself PHP4 in 24 Hours” Matt Zandstra,SAMS publishing, 1999 Configure the web server Changes to httpd.conf: • AddType application/x-httpd-php .php • DirectoryIndex index.html index.php Restart the web server, and check it works! Syntax • • • • syntax resembles C some elements borrowed from Java, perl user defined functions / include files choice of tag styles: <?php … ?> <? … ?> <% … %> <script language=“php”> …</script> welcome.php <html> <h1>6th ITSSC</h1> <?php echo “Hello ITSSC delegates!”; ?> <hr> <?php $time = date(“H:i:s”); printf(“The time is now %s”,$time); ?> </html> MySQL functions PHP has functions that allow you to: • connect to the database server • run queries • process query results • handle errors etc. Connecting to MySQL mysql_connect(hostname, username, pw) $link = mysql_connect(“localhost”, “webuser”, “mypassword”); or die (“Oops - couldn’t connect”); Selecting a database mysql_select_db(database_name [, link_id]) mysql_select_db(“admissions”) or die (“Can’t select admissions!”); Running a query mysql_query(query) $result = mysql_query("SELECT lcode from languages where lname =’French’ "); N.B. A successful query says nothing about number of rows returned! Processing query results • mysql_fetch_row(result_id) • mysql_fetch_array (result_id) while ($row = mysql_fetch_array ($result)) { printf (“%s %s\n”, $row[“surname”], $row[“firstname”]); } Form processing • Web databases often use forms as part of the user interface • Form data variables automatically generate PHP variables of the same name Simple form myform.html <form action = "process.php"> Please type your name: <input type = text name ="user"> </form> process.php <?php echo “Hello $user!”; ?> Speech database “English Intonation in the British Isles” Grabe, Nolan, Post (ESRC grant) – 40 hours of speech – 9 dialects of British English What are sessions? HTTP: a stateless protocol Client 1 Web server Client 2 Joe Mary 1 3 5 2 4 6 Why do we need sessions? A SESSION associates DATA with a USER for duration of their entire visit •e-commerce •CUSTOM web pages for different users (users can log in to web database) How to store session info 1. Cookies Cookies store client-specific data on the client N.B. client may reject cookie! Security issues? Max cookie size 4k 2. Session files •Sessions store client-specific data on the server •Sessions are tagged with a unique session id Session ids Web server Joe Mary 37 95 37 95 Session ID Session ID Session management PHP4 includes functions to: • manage session data on the server • generate random session ID to identify user • saves session ID: either or with a cookie (N.B. session ID only) in the query string Starting a session session_start() 1. create session file in /tmp on the server 2. sends a cookie called PHPSESSID to the client (client may refuse it) Set-Cookie: PHPSESSID=8d8e5a520c56e0a2e5751ae7b8c8273e; path=/ Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Resuming a session session_start() An existing session is resumed if: • client sends cookie with session id or • session id was passed in the query string http://mysite.com/mypage.html?PHPSESSID=xyz123 Registering variables session_register(variable_name) •session_register registers the variable for use in the current session •changes are automatically reflected in the session file session_register(“college_name”); session_register(“product1”); Ending sessions session_destroy() Ends current session (Gotcha: variables remain available in current script, until the script reloaded) session_unset() Wipes all currently registered variables Sessions example <? php session_start(); session_register(‘counter’); // initialise a session // register variable $counter++; // increment counter echo (“You have visited this page $counter times”); ?> • Modern Languages Admissions Database Andrew Slater, Chris Turner, 2000 Used by colleges-based ML tutors to track admissions process Sessions used to provide college-specific views of candidates / access rights Other MySQL APIs • MySQL ships with APIs for several common languages: – C / C++ – PERL / PHP – Java; • Each API provides the same core functions such as: – connect(), select_db(), query(), store_result(), close(); • Data types heavily dependent on language: – garbage collection in Java – query results returned as associative array in PERL – lots of pointers in C. Linux Client in C • Install mysqlclient-3.2.23-1.i386.rpm • Enter and compile code (add error checking etc.) #include <stdio.h> #include <mysql.h> int main() { MYSQL mdbi, *mdb = &mdbi; MYSQL_RESULT *res; MYSQL_ROW *row; const char *host, *db, *user, *pwd; int ii, nrows; /* . . . Input values for host, user, pwd, db */ Linux Client: MySQL Core mdb = mysql_connect(mdb, host, user, pwd); mysql_select_db(mdb, db); mysql_query(mdb, “SELECT * FROM Table”); res = mysql_store_result(mdb); nrows = mysql_num_rows(res); for (ii = 0; ii < nrows; ii++) { row = mysql_fetch_row(res); printf(“%5d: %s\n”, atoi(row[0]), row[2]); } mysql_free_result(res); mysql_close(mdb); return 0; } • Compile: gcc • Ready to run! -o sample sample.c -lmysqlclient Example: Jesus College Noticeboard • Central MySQL database of ‘articles’ – ‘Message Of The Day’ articles – Announcements (read-once) – News articles (with automatic index listing) • MS Access front-end: familiar to administrative staff • Integrated into website (notices and news board) • Client added to system-wide UNIX login scripts • Plans for Windows login client Ex: System Overview Web Server UNIX Server MS Access (admin) MySQL Server UNIX Server FIREWALL MS Access (admin) UNIX Server Ex: MS Access front end Ex: Web integration Ex: UNIX client at login More Information... Extensive MySQL documentation at www.mysql.com Teach yourself PHP in 24 hours, Matt Zandstra, SAMS 1999 MySQL manual, Paul DuBois, NewRiders 1999 Other PHP books (e.g. O’Reilly, WROX Press) [email protected] [email protected]