cs411 database systems kazuhiro minami 07: sql system aspects

35
CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Upload: justina-marshall

Post on 26-Dec-2015

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

CS411Database Systems

Kazuhiro Minami

07: SQL System Aspects

Page 2: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Announcements

• Midterm exam on Oct. 13 next Tuesday– 3:30pm – 4:45pm– Bring your UIUC photo ID– Topics:

• E/R modeling

• Relational schema design

• RA

• SQL

2

Page 3: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

T/F Questions on SQL Constraints

1. If we declare that an attribute A is UNIQUE, we cannot have two tuples where the attribute A has a NULL value.

2. Insertion in SQL supports the bag semantics.

3. There is no way to define a primary key containing multiple attributes in SQL.

4. If we execute an UPDATE-SET-WHERE statement, every time the DBMS finds a tuple satisfying the WHERE conditions, the values of that tuple are updated immediately.

5. Every foreign key must be a primary key of the relation.

6. It is possible to enforce a foreign-key constraint by defining a tuple-based CHECK.

Page 4: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

More T/F Questions

1. It is possible to convert a SQL statement with GROUP BY clause into an equivalent single SQL statement without GROUP BY clause by using subqueries.

CREATE ASSERTION NoExpensiveBars CHECK (NOT EXISTS (

SELECT bar FROM SellsGROUP BY barHAVING 5.00 < AVG(price)

));

CREATE ASSERTION NoExpensiveBars CHECK (NOT EXISTS (

SELECT bar FROM SellsGROUP BY barHAVING 5.00 < AVG(price)

));

SELECT Distinct bar

FROM Sells s1

WHERE 5.00 < (

SELECT AVG(price)

FROM Sells s2

WHERE s1. bar = s2.bar)

Sells(bar, beer, price)

Page 5: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

More T/F Questions

1. It is possible to convert a SQL statement with subqueries into an equivalent single SQL statement without using subquries.

Page 6: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

6

System Aspects of SQL (Chapter 9: Four more ways to make SQL calls from outside the DBMS)

Call-Level Interface

PHP

Java Database Connectivity

Stored procedures

Embedded SQL

Page 7: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Connecting SQL to the Host Language

• Outside – API Approach:

• Vendor specific libraries[80’s- ] – MySQL API for PHP

• Open interfaces [90’s - ] – JDBC, ODBC

• Embedded SQL [70’s- ] • Embedded SQL for C/C++. • Not widely used.

• Inside – Stored procedures/functions: [80’s- ]

Page 8: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

SQL/Host Language Interface (CLI)

Function call SQL

Library

Host language program

SQL stmt

DBMS

Prepare SQL statements

from user inputs

Fetch rows

from the cursor

TableCursorwhile(1){

} Impedance

mismatch

problem

Page 9: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

The Three-Tier Architecture of Database Applications

browser

networkHTTP

Web server

Applicationserver

Database server

database

Server

Forms &

Buttons

Your business logic

is executed here

Display

query result

Client &

Server

Interaction

Page 10: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

MySQL + PHP

Page 11: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

What is PHP?

• Stands for Hypertext Preprocessor

• A server-side scripting language

• PHP scripts are executed on the server

• Supports many databases (MysQL, Infomix, Oracle, etc.)

11

Page 12: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

What is a PHP file?

• Contain text, HTML tags and scripts

• PHP files are returned to a browser as plain HTML

• Have a file extension of “.php”

12

Page 13: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Steps for writing a DB application

1. SSH to a csil Linux machine (e.g., csil-linux-ts1)

2. Login to MySQL server% mysql -h csil-projects.cs.uiuc.edu -u netid –p

3. Choose a databasemysql > use <your database>;

4. Create a table “hello”mysql > CREATE TABLE hello (varchar(20));

5. Insert a tuplemysql > INSERT INTO hello VALUES (‘Hello World!’);

6. Quit MySQLmysql > quit

13

Set up a table

Page 14: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Steps for writing a DB application

1. Go to the directory ~/csil-projects/public_html

% cd csil-projects/public_html

2. Write hello_world.php

3. Open http://csil-projects.cs.uiuc.edu/~username/hello_world.php with a web brower

14

Write a PHP program

Page 15: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

hello_world.php<html>

<body>

<?php

$host = 'csil-projects.cs.uiuc.edu';

$user = 'minami'; $password = ’password';

$link = mysql_connect($host, $user, $password) or die ('Could not connect: ' . mysql_error());

mysql_select_db('minami_db') or die ('Could not select database<br>');

$query = 'SELECT * FROM hello';

$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {

echo ”$row[message]<br>”;

}

mysql_free_result($result);

mysql_close($link);

?>

</body>

</html>15

Page 16: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

PHP Basics• All PHP code exist inside HTML text

<?php PHP code goes here

?>

• Variables– Untyped and need not be declared

– Begins with ‘$’

• Strings – Surrounded by either single or double quotes

• $host = 'csil-projects.cs.uiuc.edu’;

• $x = ‘A host is $host.’

• $x = “A message is $host.”

– Concatination of strings• 'Could not connect: ' . mysql_error()

16

Page 17: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

PHP Basics (Cont.)

• Arrays– Ordinary arrays

• $a = array(30, 20, 10, 0) with $a[0] equal to 30, $a[1] equal to 20 and so on

– Associative arrays

• $seasons = array(‘spring’ => ‘warm’,

‘summer’ => ‘hot’,

‘fall’ => ‘warm’,

‘winter’ => ‘cold’);

Then, seasons[‘summer’] has the value ‘hot’.

17

Page 18: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Creating a Database Connection

• Before you can access data in a database, you must create a connection to the database

• Syntax: mysql_connect(servername, username, password);

• Example:<?php

$con = mysql_connect("localhost",”user",”pwd");

if (!$con)  {  die('Could not connect: ' . mysql_error());  }// some code

?>

18

Page 19: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Executing SQL Statements

• Choose a database

mysql_select_db('minami_db')

or die ('Could not select database<br>');

• Execute a SQL statement

$query = 'SELECT * FROM hello';

$result = mysql_query($query);

19

Page 20: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Cursor Operations: Fetching results

• Use the mysql_fetch_array() function to return the first row from the recordset as an array.

• Each call to mysql_fetch_array() returns the next row in the recordset.

• The while loop loops through all the records in the recordset.

• To refer to the value of “message” attribute, we use the PHP $row variable ($row[message]).

while ($row = mysql_fetch_array($result)) {

echo ”$row[message]<br>”;

}

20

Page 21: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Loading Data From a file

1. Get data by crawling on the web

2. Parse and format data with Perl, awk, or other languages

3. Execute a mysql LOAD command below

mysql > LOAD DATA LOCAL INFILE ‘importfile.csv' INTO TABLE table_name FIELDS TERMINATED BY ','

21

Page 22: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Insert Data From a Form Into a Database

• When a user clicks the submit button in the HTML form, the form data is sent to "insert.php".

<html>

<form action="insert.php" method="post">

ISBN: <input type="text" name="isbn" />

Title: <input type="text" name="bname" />

<input type="submit" / value="Add">

</form>

</html>22

Page 23: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Insert Data From a Form Into a Database

• The "insert.php" file connects to a database, and retrieves the values from the form with the PHP $_POST variables.

$book = $_POST["bname"];

$isbn = $_POST["isbn"];

$sql = "INSERT INTO book(isbn, name) VALUES ($isbn, '$book')";

mysql_query($sql))

23

Page 24: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

JDBC

Page 25: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

25

All these methods follow the basic PHP paradigm

1. Connect to a DB server.

2. Say what database you want to use.

3. Assemble a string containing an SQL statement.

4. Get the DBMS to prepare a plan for executing the statement.

5. Execute the statement.

6. Extract the results into variables in the local programming language.

Page 26: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

JDBC

• Java Database Connectivity (JDBC) is a library similar to SQL/CLI, but with Java as the host language.

• JDBC/CLI differences are often related to the object-oriented style of Java, but there are other differences.

The brainchild of a former UIUC undergrad

Page 27: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Connections

• A connection object is obtained from the environment in a somewhat implementation-dependent way.

• We’ll start by assuming we have myCon, a connection object.

Page 28: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Statements

• JDBC provides two classes:1. Statement = an object that can accept a string that is

an SQL statement and can execute such a string.

2. PreparedStatement = an object that has an associated SQL statement ready to execute.

Page 29: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Creating Statements

• The Connection class has methods to create Statements and PreparedStatements.

Statement stat1 = myCon.createStatement();

PreparedStatement stat2 =

myCon.createStatement(

“SELECT beer, price FROM Sells” +

“WHERE bar = ‘Joe’’s Bar’”

);

Java trick: +concatenatesstrings.

createStatement with no argument returnsa Statement; with one argument it returnsa PreparedStatement.

Page 30: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Executing SQL Statements

• JDBC distinguishes queries from modifications, which it calls “updates.”

• Statement and PreparedStatement each have methods executeQuery and executeUpdate.– For Statements, these methods have one

argument: the query or modification to be executed.

– For PreparedStatements: no argument.

Page 31: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Example: Update

• stat1 is a Statement.

• We can use it to insert a tuple as:

stat1.executeUpdate(

“INSERT INTO Sells” +

“VALUES(‘Brass Rail’, ‘Bud’, 3.00)”

);

Page 32: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Example: Query

• stat2 is a PreparedStatement holding the query “SELECT beer, price FROM Sells WHERE bar = ‘Joe’’s Bar’”.

• executeQuery returns an object of class ResultSet --- we’ll examine it later.

• The query:

ResultSet Menu = stat2.executeQuery();

Page 33: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Accessing the ResultSet

• An object of type ResultSet is something like a cursor.

• Method Next() advances the “cursor” to the next tuple.– The first time Next() is applied, it gets the first tuple.– If there are no more tuples, Next() returns the value

FALSE.

Page 34: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Accessing Components of Tuples

• When a ResultSet is referring to a tuple, we can get the components of that tuple by applying certain methods to the ResultSet.

• Method getX (i ), where X is some type, and i is the component number, returns the value of that component.– The value must have type X.

Page 35: CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

Example: Accessing Components

• Menu is the ResultSet for the query “SELECT beer, price FROM Sells WHERE bar = ‘Joe’’s Bar’”.

• Access the beer and price from each tuple by:while ( Menu.Next() ) {theBeer = Menu.getString(1);thePrice = Menu.getFloat(2);

/* do something with theBeer and thePrice */

}