set path=%path%;D:\test\mysql\bin
mysqld –console
mysql -u root
CREATE DATABASE southwind;
use southwind
select database();
show tables;
CREATE TABLE IF NOT EXISTS products (
productID INT UNSIGNED NOT NULL AUTO_INCREMENT,
productCode CHAR(3) NOT NULL DEFAULT ”,
name VARCHAR(30) NOT NULL DEFAULT ”,
quantity INT UNSIGNED NOT NULL DEFAULT 0,
price DECIMAL(7,2) NOT NULL DEFAULT 99999.99,
PRIMARY KEY (productID)
);
describe products;
// show the create table statement used by MySQL to create this table
mysql> show create table products \G
*************************** 1. row ***************************
Table: products
Create Table: CREATE TABLE `products` (
`productID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`productCode` char(3) NOT NULL DEFAULT ”,
`name` varchar(30) NOT NULL DEFAULT ”,
`quantity` int(10) unsigned NOT NULL DEFAULT ’0′,
`price` decimal(7,2) NOT NULL DEFAULT ’99999.99′,
PRIMARY KEY (`productID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
INSERT INTO products VALUES (1001, ‘PEN’, ‘Pen Red’, 5000, 1.23);
INSERT INTO products VALUES
(NULL, ‘PEN’, ‘Pen Blue’, 8000, 1.25),
(NULL, ‘PEN’, ‘Pen Black’, 2000, 1.25);
SELECT name, price FROM products WHERE name LIKE ‘PENCIL%’;
SELECT name, price FROM products WHERE name LIKE ‘P__ %’;
SELECT * FROM products WHERE NOT (quantity >= 5000 AND name LIKE ‘Pen %’);
SELECT * FROM products WHERE name IN (‘Pen Red’, ‘Pen Black’);\
SELECT * FROM products
WHERE (price BETWEEN 1.0 AND 2.0) AND (quantity BETWEEN 1000 AND 2000);
SELECT * FROM products WHERE productCode IS NULL;
SELECT * FROM products WHERE name LIKE ‘Pen %’ ORDER BY price DESC;
You can randomize the returned records via function RAND(), e.g.,
SELECT * FROM products order by RAND();
SELECT * FROM products order by RAND() limit 2;
SELECT * FROM products order by price limit 2,1;
AS – Alias
SELECT productID AS ID, productCode AS Code, name AS Description, price AS `Unit Price`
— Define aliases to be used as display names
FROM products
ORDER BY ID;
select concat(‘hello’,'world’);
select DISTINCT price from products;
mysql> select DISTINCT price,productcode,name from products;
+———-+————-+———–+
| price | productcode | name |
+———-+————-+———–+
| 1.23 | PEN | Pen Red |
| 1.25 | PEN | Pen Blue |
| 1.25 | PEN | Pen Black |
| 0.48 | PEC | Pencil 2B |
| 0.49 | PEC | Pencil 2H |
| 99999.99 | PEC | Pencil HB |
+———-+————-+———–+
6 rows in set (0.00 sec)
select count(*) as ‘count’ from products;
SELECT productCode, COUNT(*) FROM products GROUP BY productCode;
HAVING clause
——————
HAVING is similar to WHERE, but it can operate on the GROUP BY aggregate functions; whereas WHERE
operates only on columns.
SELECT
productCode AS `Product Code`,
COUNT(*) AS `Count`,
CAST(AVG(price) AS DECIMAL(7,2)) AS `Average`
FROM products
GROUP BY productCode
HAVING Count >=3;
— CANNOT use WHERE count >= 3
WITH ROLLUP
————-
Modifying Data – UPDATE
—————————
UPDATE products SET quantity = quantity – 100 WHERE name = ‘Pen Red’;
UPDATE products SET price = price * 1.1;
Deleting Rows – DELETE FROM
—————————
DELETE FROM products WHERE name LIKE ‘Pencil%’;
Loading/Exporting Data from/to a Text File
——————————————
load data local infile ‘D:/test/products.txt’ into table products
columns terminated by ‘,’
lines terminated by ‘\r\n’;
mysqlimport Utility
———————-
> mysqlimport -u username -p –local databaseName tableName.tsv
— The raw data must be kept in a TSV file of filename the same as tablename
> mysqlimport –help
SELECT … INTO OUTFILE …
—————————–
SELECT * FROM products INTO OUTFILE ‘d:/test/products_out.csv’
COLUMNS TERMINATED BY ‘,’
LINES TERMINATED BY ‘\r\n’;
Running a SQL Script
——————–
mysql> source d:/myproject/load_products.sql
drop table if exists suppliers;
CREATE TABLE suppliers(
supplierID INT UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(30) NOT NULL DEFAULT ”,
phone CHAR(8) NOT NULL DEFAULT ”,
PRIMARY KEY(supplierID)
);
ALTER TABLE
———–
ALTER TABLE products ADD COLUMN supplierID INT UNSIGNED NOT NULL;
UPDATE products SET supplierID = 501;
ALTER TABLE products ADD FOREIGN KEY (supplierID) REFERENCES suppliers (supplierID);
SELECT with JOIN
—————-
SELECT p.name, price, s.name
FROM products as p
JOIN suppliers as s ON p.supplierID = s.supplierID
WHERE price < 0.6;
Many-To-Many Relationship
————————-
CREATE TABLE products_suppliers(
productID INT UNSIGNED NOT NULL,
supplierID INT UNSIGNED NOT NULL,
PRIMARY KEY(productID, supplierID),
FOREIGN KEY(productID) REFERENCES products (productID),
FOREIGN KEY(supplierID) REFERENCES suppliers (supplierID)
);
INSERT INTO products_suppliers VALUES (1007,501), (1008, 501),(1009, 501), (1009, 502), (1010, 503);
SHOW CREATE TABLE products \G
ALTER TABLE products DROP FOREIGN KEY products_ibfk_1;
ALTER TABLE products DROP supplierID;
SELECT p.name, s.name
FROM products_suppliers as ps
JOIN products AS p ON ps.productID = p.productID
JOIN suppliers AS s ON ps.supplierID = s.supplierID
WHERE s.name = ‘ABC Traders’;
Backup and Restore
——————
mysqldump -u root –databases southwind > “d:\test\backup_southwind.sql”
mysqldump.exe is a windows command line tool that can be used to backup database automatically