2. 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
5. -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
6. -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
7. 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
8. 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
9. 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
10. 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
11. 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
12. 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
14. 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...
15. 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..
16. 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
17. 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
18. 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…
19. 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
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'
GROUP BY C.Name
ORDER BY Population DESC
limit 20;
MySQL
Error fixed
21. 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
22. 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
23. 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
24. 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
25. 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
26. 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
27. 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
28. 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)
29. 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
30. 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
31. MySQL Workbench - Plugins
• Community driven Plugins & Add-ons site
– Code in Python, share with the community
32. MySQL Workbench – Hands On Lab
• http://sqlhjalp.com/iso/OTN_Developer_Day_MySQL.iso
33. 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
34. 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
35. 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