my sql regis_handsonlab

37
<Insert Picture Here> MySQL: Regis Hands On Lab Keith Larson [email protected] MySQL Community Manager

Upload: sqlhjalp

Post on 06-May-2015

291 views

Category:

Technology


0 download

DESCRIPTION

MySQL Hands on Lab @ RMOUG labs 2011

TRANSCRIPT

Page 1: My sql regis_handsonlab

<Insert Picture Here>

MySQL: Regis Hands On Lab Keith Larson [email protected] MySQL Community Manager

Page 2: My sql regis_handsonlab

The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions.

The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.

Safe Harbor Statement

Page 3: My sql regis_handsonlab

tar -xvf MySQL-5.5.16-1.rhel5.x86_64.tar

rpm -i MySQL-server-5.5.16-1.rhel5.x86_64.rpm

It will prompt you with setting passwords but I will show that soon.

MySQL Installation

Page 4: My sql regis_handsonlab

http://dev.mysql.com/doc/index-other.html

wget http://downloads.mysql.com/docs/world_innodb.sql.gz

wget launchpad.net/test-db/employees-db-1/1.0.6/+download/employees_db-dump-files-1.0.5.tar.bz2

MySQL Test Data

Page 5: My sql regis_handsonlab

-bash-3.2$ mysql mysql> create database world; ERROR 1044 (42000): Access denied for user ''@'localhost' to

database 'world' mysql> exit

mysql -u root

mysql> CREATE DATABASE world; mysql>exit;

mysql -u root world < world_innodb.sql

MySQL Denied

Page 6: My sql regis_handsonlab

-bash-3.2$ mysqladmin -u root password brad

-bash-3.2$ mysql -u root world ERROR 1045 (28000): Access denied for user

'root'@'localhost' (using password: NO)

-bash-3.2$ mysql -u root world -p Enter password:

MySQL Set Root Password

Page 7: My sql regis_handsonlab

http://dev.mysql.com/doc/refman/5.5/en/grant.html

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass'; mysql> GRANT ALTER, CREATE VIEW, CREATE, DELETE, DROP, GRANT

OPTION, INDEX, INSERT, SELECT, SHOW VIEW, TRIGGER, UPDATE ON *.* TO 'monty'@'localhost'

WITH GRANT OPTION;

mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass'; mysql> GRANT ALTER, CREATE VIEW, CREATE, DELETE, DROP, GRANT

OPTION, INDEX, INSERT, SELECT, SHOW VIEW, TRIGGER, UPDATE ON *.* TO 'monty'@'%'

WITH GRANT OPTION;

mysql> flush privileges ;

MySQL New Users

Page 8: My sql regis_handsonlab

http://dev.mysql.com/doc/refman/5.5/en/grant.html

mysql> CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin_pass'; GRANT ALL ON *.* TO 'admin'@'localhost'; mysql> flush privileges ;

mysql -u monty -p Enter password:

mysql -u admin -p Enter password:

MySQL New Super Users

Page 9: My sql regis_handsonlab

mysql -u admin -p mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | bobmason | | mysql | | performance_schema | | test | | world | +--------------------+ mysql> create database <yourname>_example; Query OK, 1 row affected (0.00 sec)

MySQL Create Database/Schema

Page 10: My sql regis_handsonlab

mysql> use world;

mysql> show tables; +-----------------+ | Tables_in_world | +-----------------+ | City | | Country | | CountryLanguage | +-----------------+ 3 rows in set (0.00 sec)

mysql> show create table City;

MySQL Table

Page 11: My sql regis_handsonlab

CREATE TABLE `City` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Name` char(35) NOT NULL DEFAULT '', `CountryCode` char(3) NOT NULL DEFAULT '', `District` char(20) NOT NULL DEFAULT '', `Population` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`ID`), KEY `CountryCode` (`CountryCode`), CONSTRAINT `city_ibfk_1` FOREIGN KEY (`CountryCode`) REFERENCES

`Country` (`Code`) ) ENGINE=InnoDB AUTO_INCREMENT=4080 DEFAULT CHARSET=latin1

MySQL Table City

Page 12: My sql regis_handsonlab

mysql> use <yourname>_example; mysql> CREATE TABLE `City` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Name` char(35) NOT NULL DEFAULT '', `CountryCode` char(3) NOT NULL DEFAULT '', `District` char(20) NOT NULL DEFAULT '', `Population` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`ID`), KEY `CountryCode` (`CountryCode`), CONSTRAINT `city_ibfk_1` FOREIGN KEY (`CountryCode`) REFERENCES

`Country` (`Code`) ) ENGINE=InnoDB ERROR 1005 (HY000): Can't create table '<yourname>_example.City' (errno: 150)

http://forums.mysql.com/read.php?22,19755,19755

MySQL Create Table in Your Database

Page 13: My sql regis_handsonlab

mysql> show create table world.Country; mysql> CREATE TABLE `Country` (

-> `Code` char(3) NOT NULL DEFAULT '',

-> `Name` char(52) NOT NULL DEFAULT '',

-> `Continent` enum('Asia','Europe','North America','Africa','Oceania','Antarctica','South America') NOT NULL DEFAULT 'Asia',

-> `Region` char(26) NOT NULL DEFAULT '',

-> `SurfaceArea` float(10,2) NOT NULL DEFAULT '0.00',

-> `IndepYear` smallint(6) DEFAULT NULL,

-> `Population` int(11) NOT NULL DEFAULT '0',

-> `LifeExpectancy` float(3,1) DEFAULT NULL,

-> `GNP` float(10,2) DEFAULT NULL,

-> `GNPOld` float(10,2) DEFAULT NULL,

-> `LocalName` char(45) NOT NULL DEFAULT '',

-> `GovernmentForm` char(45) NOT NULL DEFAULT '',

-> `HeadOfState` char(60) DEFAULT NULL,

-> `Capital` int(11) DEFAULT NULL,

-> `Code2` char(2) NOT NULL DEFAULT '',

-> PRIMARY KEY (`Code`)

-> ) ENGINE=InnoDB;

Query OK, 0 rows affected (0.02 sec)

MySQL Try again ….

Page 14: My sql regis_handsonlab

Mysql> CREATE TABLE `City` ( -> `ID` int(11) NOT NULL AUTO_INCREMENT, -> `Name` char(35) NOT NULL DEFAULT '', -> `CountryCode` char(3) NOT NULL DEFAULT '', -> `District` char(20) NOT NULL DEFAULT '', -> `Population` int(11) NOT NULL DEFAULT '0', -> PRIMARY KEY (`ID`), -> KEY `CountryCode` (`CountryCode`), -> CONSTRAINT `city_ibfk_1` FOREIGN KEY (`CountryCode`)

REFERENCES `Country` (`Code`) -> ) ENGINE=InnoDB; Query OK, 0 rows affected (0.04 sec)

MySQL City works now...

Page 15: My sql regis_handsonlab

Mysql> CREATE TABLE `CountryLanguage` ( `CountryCode` char(3) NOT NULL DEFAULT '', `Language` char(30) NOT NULL DEFAULT '', `IsOfficial` enum('T','F') NOT NULL DEFAULT 'F', `Percentage` float(4,1) NOT NULL DEFAULT '0.0', PRIMARY KEY (`CountryCode`,`Language`), KEY `CountryCode` (`CountryCode`), CONSTRAINT `countryLanguage_ibfk_1` FOREIGN KEY (`CountryCode`)

REFERENCES `Country` (`Code`) ) ENGINE=InnoDB

MySQL CountryLanguage as well..

Page 16: My sql regis_handsonlab

mysql> use <yourname>_example; mysql> insert into Country select * from world.Country; Query OK, 239 rows affected (0.03 sec) Records: 239 Duplicates: 0 Warnings: 0

mysql> insert into CountryLanguage select * from world.CountryLanguage; Query OK, 984 rows affected (0.03 sec) Records: 984 Duplicates: 0 Warnings: 0

mysql> insert into City select * from world.City; Query OK, 4079 rows affected (0.29 sec) Records: 4079 Duplicates: 0 Warnings: 0

Faster -- mysql -u admin -p <yourname>_example < world_innodb.sql

MySQL Add Data

Page 17: My sql regis_handsonlab

SELECT ID , Name , CountryCode , Population FROM City WHERE CountryCode = 'USA' ORDER BY Population DESC limit 20;

SELECT C.ID , C.Name , C.CountryCode , C.Population FROM City C INNER JOIN Country Y ON Y.Code = C.CountryCode INNER JOIN CountryLanguage L ON L.CountryCode = C.CountryCode WHERE Y.Code = 'USA' ORDER BY C.Population DESC limit 20;

MySQL Look at some data

Page 18: My sql regis_handsonlab

mysql> SELECT C.ID , C.Name , C.CountryCode , C.Population -> FROM City C -> INNER JOIN Country Y ON Y.Code = C.CountryCode -> INNER JOIN CountryLanguage L ON L.CountryCode = C.CountryCode -> WHERE Y.Code = 'USA' -> ORDER BY Population DESC -> GROUP BY C.Name limit 20;

MySQL Group by…

Page 19: My sql regis_handsonlab

mysql> SELECT C.ID , C.Name , C.CountryCode , C.Population -> FROM City C -> INNER JOIN Country Y ON Y.Code = C.CountryCode -> INNER JOIN CountryLanguage L ON L.CountryCode = C.CountryCode -> WHERE Y.Code = 'USA' -> ORDER BY Population DESC -> GROUP BY C.Name limit 20; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual

that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY C.Name limit 20' at line 7

mysql>

MySQL Group by…Error

Page 20: My sql regis_handsonlab

SELECT C.ID , C.Name , C.CountryCode , C.Population FROM City C INNER JOIN Country Y ON Y.Code = C.CountryCode INNER JOIN CountryLanguage L ON L.CountryCode = C.CountryCode WHERE Y.Code = 'USA' GROUP BY C.Name ORDER BY Population DESC limit 20;

MySQL Error fixed

Page 21: My sql regis_handsonlab

SET @RANK=0; # Variable

SELECT @RANK:=@RANK+1 AS RANK, C.ID , C.Name , C.CountryCode , C.Population

FROM City C INNER JOIN Country Y ON Y.Code = C.CountryCode INNER JOIN CountryLanguage L ON L.CountryCode = C.CountryCode WHERE Y.Code = 'USA' GROUP BY C.Name ORDER BY Population DESC limit 20;

MySQL Rank Results

Page 22: My sql regis_handsonlab

SET @RANK=0; SELECT @RANK:=@RANK+1 AS RANK, C.ID , C.Name , C.CountryCode , C.Population FROM City C INNER JOIN Country Y ON Y.Code = C.CountryCode INNER JOIN CountryLanguage L ON L.CountryCode = C.CountryCode WHERE Y.Code = 'USA' UNION SELECT @RANK:=@RANK+1 AS RANK, C.ID , C.Name , C.CountryCode , C.Population FROM City C INNER JOIN Country Y ON Y.Code = C.CountryCode INNER JOIN CountryLanguage L ON L.CountryCode = C.CountryCode WHERE Y.Code = 'USA' AND C.name = 'Denver' GROUP BY C.Name ORDER BY Population DESC limit 25;

MySQL Union Example

Page 23: My sql regis_handsonlab

SET @RANK=0; SELECT @RANK:=@RANK+1 AS RANK, C.ID , C.Name , C.CountryCode , C.Population FROM City C INNER JOIN Country Y ON Y.Code = C.CountryCode INNER JOIN CountryLanguage L ON L.CountryCode = C.CountryCode WHERE Y.Code = 'USA' UNION SELECT @RANK:=@RANK+1 AS RANK, C.ID , C.Name , C.CountryCode , C.Population FROM City C INNER JOIN Country Y ON Y.Code = C.CountryCode INNER JOIN CountryLanguage L ON L.CountryCode = C.CountryCode WHERE Y.Code = 'USA' AND C.name = 'Denver' GROUP BY C.Name ORDER BY Population DESC limit 25; ## Not what you wanted is it....

MySQL Union Example

Page 24: My sql regis_handsonlab

SET @RANK=0; SELECT @RANK:=@RANK+1 AS RANK, C.ID , DISTINCT(C.Name) as Name , C.CountryCode ,

C.Population FROM City C INNER JOIN Country Y ON Y.Code = C.CountryCode INNER JOIN CountryLanguage L ON L.CountryCode = C.CountryCode WHERE Y.Code = 'USA' AND C.Population >= 3694820 UNION SELECT @RANK:=@RANK+1 AS RANK, C.ID , C.Name , C.CountryCode , C.Population FROM City C INNER JOIN Country Y ON Y.Code = C.CountryCode INNER JOIN CountryLanguage L ON L.CountryCode = C.CountryCode WHERE Y.Code = 'USA' AND C.name = 'Denver'

GROUP BY C.Name ORDER BY Population DESC limit 25;

MySQL Union Example

Page 25: My sql regis_handsonlab

SET @RANK=0;

SELECT @RANK:=@RANK+1 AS RANK, C.ID , C.Name , C.CountryCode , C.Population FROM City C INNER JOIN Country Y ON Y.Code = C.CountryCode INNER JOIN CountryLanguage L ON L.CountryCode = C.CountryCode WHERE Y.Code = 'USA' GROUP BY C.Name ORDER BY Population DESC limit 100 INTO OUTFILE '/tmp/mysql_export.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'

MySQL Export Example

Page 26: My sql regis_handsonlab

http://dev.mysql.com/doc/refman/5.5/en/create-trigger.html CREATE TABLE test1(a1 INT); CREATE TABLE test2(a2 INT); CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY); CREATE TABLE test4( a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY, b4 INT DEFAULT 0 ); delimiter | CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END; | delimiter ;

MySQL Trigger Example

Page 27: My sql regis_handsonlab

http://dev.mysql.com/doc/refman/5.5/en/create-trigger.html

INSERT INTO test3 (a3) VALUES (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL), (NULL);

INSERT INTO test4 (a4) VALUES (0), (0), (0), (0), (0), (0), (0), (0), (0), (0);

SELECT * FROM test1; 8 rows in set (0.00 sec) SELECT * FROM test2; 8 rows in set (0.00 sec) SELECT * FROM test3; 8 rows in set (0.00 sec) SELECT * FROM test4; 8 rows in set (0.00 sec)

MySQL Trigger Example

Page 28: My sql regis_handsonlab

http://dev.mysql.com/doc/refman/5.5/en/stored-routines.html The CREATE ROUTINE , ALTER ROUTINE , EXECUTE privilege is needed for stored

routines. mysql> delimiter // mysql> CREATE PROCEDURE simpleproc (OUT param1 INT) -> BEGIN -> SELECT COUNT(*) INTO param1 FROM t; -> END// Query OK, 0 rows affected (0.00 sec) mysql> delimiter ; mysql> CALL simpleproc(@a); Query OK, 0 rows affected (0.00 sec) mysql> SELECT @a; +------+ | @a | +------+ | 3 | +------+ 1 row in set (0.00 sec)

MySQL Stored Routines (Procedures and Functions)

Page 29: My sql regis_handsonlab

http://dev.mysql.com/doc/refman/5.5/en/commit.html To disable autocommit mode, use the following statement: SET autocommit=0;

To disable autocommit mode for a single series of statements, use the START TRANSACTION statement:

START TRANSACTION; SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summary=@A WHERE type=1;

COMMIT;

MySQL Transactions

Page 30: My sql regis_handsonlab

MySQL Workbench SE Database Design •  Visual Design, modeling •  Forward/Reverse Engineer •  Schema validation, Schema doc SQL Development • SQL Editor - Color Syntax

Highlighting • Objects - Import/Export, Browse/Edit • Connections - Wizard, SSH Tunnel Database Administration • Status, Configuration, Start/Stop • Users, Security, Sessions • Import/Export Dump Files

Scripting & Plug-in Support UI Designed to match VS 2010 Saves you time developing and managing your MySQL apps.

GA

Page 31: My sql regis_handsonlab

MySQL Workbench - Plugins •  Community driven Plugins & Add-ons site

–  Code in Python, share with the community

Page 32: My sql regis_handsonlab

MySQL Workbench – Hands On Lab •  http://sqlhjalp.com/iso/OTN_Developer_Day_MySQL.iso

Page 33: My sql regis_handsonlab

Additional Resources mysql.com •  TCO calculator • White Papers • Customer use cases and success stories

dev.mysql.com • Downloads • Documentation •  Forums •  PlanetMySQL

eDelivery.com • Download and evaluate all MySQL products

Page 34: My sql regis_handsonlab

Additional Resources mysql.com •  Download MySQL 5.5, MySQL Cluster 7.1 GA, GPL Products •  MySQL Products, Editions, Licensing Options •  TCO calculator •  Upcoming Events •  Customer use cases and success stories

dev.mysql.com •  Download MySQL 5.6 DMR and Labs “early access” features •  Developer Zone Articles, How to’s

eDelivery.com • Download and evaluate all MySQL products

Page 35: My sql regis_handsonlab

Additional Resources Planet.mysql.com •  Blog feeds from the experts and the community

Books: • MySQL by Paul DuBois • MySQL Administrator's Bible • High Performance MySQL: Optimization, Backups, Replication,

and More

forums.mysql.com • Community interaction

Page 36: My sql regis_handsonlab

<Insert Picture Here>

Thanks for attending!

[email protected]

Page 37: My sql regis_handsonlab

Extra Slides