My sql regis_handsonlab
-
Upload
sqlhjalp -
Category
Technology
-
view
291 -
download
0
description
Transcript of My sql regis_handsonlab
<Insert Picture Here>
MySQL: Regis Hands On Lab Keith Larson [email protected] MySQL Community Manager
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
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
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
-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
-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
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
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
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
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
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
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
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 ….
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...
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..
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
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
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…
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
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
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
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
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
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
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
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
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
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)
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
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
MySQL Workbench - Plugins • Community driven Plugins & Add-ons site
– Code in Python, share with the community
MySQL Workbench – Hands On Lab • http://sqlhjalp.com/iso/OTN_Developer_Day_MySQL.iso
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
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
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
Extra Slides