本文共 6370 字,大约阅读时间需要 21 分钟。
本文是《MySQL必知必会》的总结笔记,可用作快速查询MySQL基本操作。部分不常用命令未包含,可单独学习。
连接需要提供以下信息:
USE crashcourse;
SHOW DATABASES;
SHOW TABLES;
SHOW COLUMNS FROM customers;
DESCRIBE customers;
SHOW STATUS; // 显示服务器状态信息SHOW CREATE DATABASE; // 查看数据库创建语句SHOW CREATE TABLE; // 查看表创建语句SHOW GRANTS; // 查看用户权限SHOW ERRORS; // 查看服务器错误信息SHOW WARNINGS; // 查看服务器警告信息
SELECT prod_name FROM products;
SELECT prod_id, prod_name FROM products;
SELECT * FROM products;
SELECT DISTINCT vend_id FROM products;
SELECT prod_name FROM products LIMIT 5; // 只返回前5个
LIMIT 5, 5; // 第一个数:开始位置,第二个数:检索的行数
LIMIT 4 OFFSET 3; // MySQL 5+新语法,等价于 LIMIT 3, 4
SELECT products.prod_name FROM crashcourse.products;
SELECT prod_name FROM products ORDER BY prod_name;
ORDER BY prod_price, prod_name;
ORDER BY prod_price DESC; // 降序排序
ORDER BY prod_price DESC, prod_name; // 按多个列降序排序
SELECT prod_name, prod_proce FROM products WHERE prod_price BETWEEN 10 AND 20.5;
SELECT prod_name FROM products WHERE prod_price IS NULL;
WHERE vend_id = 1003 AND prod_price <= 10;
WHERE vend_id = 1002 OR vend_id = 1003;
WHERE vend_id IN (1002, 1003);
WHERE vend_id NOT IN (1002, 1003);
WHERE prod_name LIKE 'jet%';
WHERE prod_name REGEXP '1000';
WHERE prod_name REGEXP '^[0-9]{4}';WHERE prod_name REGEXP '[1-9] ton';
WHERE prod_name REGEXP '\\([0-9] stricks?\\)';
WHERE prod_name REGEXP BINARY 'JetPack .000';
WHERE prod_name REGEXP '[1-9] ton';
SELECT Concat(vend_name, '(', vend_country, ')') FROM vendors ORDER BY vend_name;SELECT Concat(vend_name, '(', Trim(vend_country), ')') FROM vendors ORDER BY vend_name;SELECT Concat(vend_name, '(', Trim(vend_country), ')') AS vend_title FROM vendors ORDER BY vend_name;SELECT prod_id, quantity*item_price AS expanded_price FROM orderitems WHERE order_num = 20005;
SELECT Left('xdy', 2) AS left_str FROM dual;SELECT Date(order_date) BETWEEN '2005-09-01' AND '2005-09-30' FROM orders;
SELECT Sqrt(123) AS sqrt_value FROM dual;
SELECT AVG(prod_price) AS avg_price FROM products;
SELECT COUNT(*) AS num_cust FROM customers;
SELECT MAX(prod_price) AS max_price FROM products;
SELECT vend_id, COUNT(*) AS num_prods FROM products GROUP BY vend_id;
SELECT cust_id FROM orders WHERE order_num IN (SELECT order_num FROM orderitems WHERE prod_id = 'TNT2');
SELECT cust_name, cust_state, (SELECT COUNT(*) FROM orders WHERE orders.cust_id = customers.cust_id) AS orders_count FROM customers ORDER BY cust_name;
SELECT vend_name, prod_name, prod_price FROM vendors, products WHERE vendors.vend_id = products.vend_id ORDER BY vend_name, prod_name;
SELECT vend_name, prod_name, prod_price FROM vendors INNER JOIN products ON vendors.vend_id = products.vend_id;
SELECT prod_name, vend_name, prod_price, quantity FROM orderitems, products, vendors WHERE products.vend_id = vendors.vend_id AND orderitems.prod_id = products.prod_id AND order_num = 20005;
LEFT OUTER JOIN // 从左边选择全部行
RIGHT OUTER JOIN // 从右边选择全部行
SELECT customers.cust_name, COUNT(orders.order_num) AS num_order FROM customers LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id GROUP BY customers.cust_id;
SELECT vend_id, prod_id, prod_price FROM products WHERE prod_price <= 5 UNION SELECT vend_id, prod_id, prod_price FROM products WHERE vend_id IN (1001, 1002);
UNION 默认去重
UNION ALL 不去重
SELECT ... FROM ... ORDER BY ... LIMIT ...
WHERE prod_name LIKE 'jet%';
WHERE prod_name REGEXP 'JetPack .000';
INSERT INTO customers VALUES (NULL, 'Zhou Jielun', 'Taipei', NULL, NULL);
INSERT INTO customers(cust_name, cust_city) VALUES ('Zhou Jielun', 'Taipei');INSERT INTO customers(cust_name, cust_city) VALUES ('Zhou Jielun', 'Taipei'), ('Wang Feng', 'Beijing'), ('Yang Miao', 'Shanghai');INSERT INTO customer(cust_id, cust_name, cust_city) SELECT cust_id, cust_name, cust_city FROM customer_new;
UPDATE customer SET cust_city = 'Chongqing', cust_email = '432431@gmail.com' WHERE cust_id = 12345;
DELETE FROM customer WHERE cust_id = 12345;
CREATE TABLE customers IF NOT EXISTS ( cust_id int NOT NULL AUTO_INCREMENT, cust_name varchar(50) NOT NULL, cust_city varchar(50) NULL DEFAULT 'Beijing', PRIMARY KEY (cust_id)) ENGINE=InnoDB;
SELECT last_insert_id();
ALTER TABLE customers ADD vend_phone VARCHAR(20);
ALTER TABLE customers DROP COLUMN vend_phone;
DROP TABLE customers;
RENAME TABLE customer TO customer2;
CREATE PROCEDURE sp_get_product_list ()BEGIN SELECT * FROM products;END;
CREATE PROCEDURE sp_get_product_list ()BEGIN DECLARE done INT.Default 0; DECLARE current_record VARCHAR(100); DECLARE product_id INT.Default 0; GET THE FIRST (100) ROWS FROM products INTO :current_record; WHILE done
(示例简化,实际实现需要更多步骤。)
CREATE TRIGGER newproduct AFTER INSERT ON customersFOR EACH ROWSELECT 'product added';
CREATE USER xdy IDENTIFIED BY 'password';
SHOW GRANTS FOR xdy;
GRANT SELECT ON project.* TO xdy;
REVOKE SELECT ON project.* FROM xdy;
SET PASSWORD FOR xdy = Password('newPassword');通过以上内容,可以快速掌握MySQL的基本操作和常用命令。
转载地址:http://qydfk.baihongyu.com/