Presentation is loading. Please wait.

Presentation is loading. Please wait.

CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects.

Similar presentations

Presentation on theme: "CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects."— Presentation transcript:

1 CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects

2 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

3 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.

4 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 Sells GROUP BY bar HAVING 5.00 < AVG(price) )); CREATE ASSERTION NoExpensiveBars CHECK ( NOT EXISTS ( SELECT bar FROM Sells GROUP BY bar HAVING 5.00 < AVG(price) )); SELECT Distinct bar FROM Sells s1 WHERE 5.00 < ( SELECT AVG(price) FROM Sells s2 WHERE s1. bar = Sells(bar, beer, price)

5 More T/F Questions 1.It is possible to convert a SQL statement with subqueries into an equivalent single SQL statement without using subquries.

6 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

7 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- ]

8 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 TableCursor while(1){ } Impedance mismatch problem

9 The Three-Tier Architecture of Database Applications browser network HTTP Web server Application server Database server database Server Forms & Buttons Your business logic is executed here Display query result Client & Server Interaction

10 MySQL + PHP

11 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

12 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

13 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 -u netid –p 3. Choose a database mysql > use ; 4. Create a table “hello” mysql > CREATE TABLE hello (varchar(20)); 5. Insert a tuple mysql > INSERT INTO hello VALUES (‘Hello World!’); 6. Quit MySQL mysql > quit 13 Set up a table

14 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 a web brower 14 Write a PHP program

15 hello_world.php <?php$host = '';$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 ');$query = 'SELECT * FROM hello';$result = mysql_query($query);while ($row = mysql_fetch_array($result)) { echo ”$row[message] ”;}mysql_free_result($result);mysql_close($link);?> 15

16 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 = '’; $x = ‘A host is $host.’ $x = “A message is $host.” – Concatination of strings 'Could not connect: '. mysql_error() 16

17 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

18 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

19 Executing SQL Statements Choose a database mysql_select_db('minami_db') or die ('Could not select database '); Execute a SQL statement $query = 'SELECT * FROM hello'; $result = mysql_query($query); 19

20 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] ”; } 20

21 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

22 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". ISBN: Title: 22

23 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


25 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.

26 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

27 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.

28 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.

29 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: + concatenates strings. createStatement with no argument returns a Statement; with one argument it returns a PreparedStatement.

30 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.

31 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)” );

32 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();

33 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.

34 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.

35 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 */ }

Download ppt "CS411 Database Systems Kazuhiro Minami 07: SQL System Aspects."

Similar presentations

Ads by Google