MySQL是一个开源的关系型数据库,在学习mysql之前,有一些简单的概念需要了解一下,例如数据库、表、列和数据类型、行、主键、复合键和sql,可以自行搜索,不在赘述。
SQL——Structured Query Language
检索数据
检索单列
检索多列
检索所有列
检索不同的值
限制结果
排序检索数据
FROM Products
ORDER BY prod_price DESC, prod_name;
过滤数据
where price < 10; --查出所有价格小于10的
where price <> 20; --查出所有价格不是20的,可以使用!=,看数据库使用什么
SELECT prod_name, prod_price FROM Products WHERE prod_price BETWEEN 5 AND 10;--查出价格在5到10的
SELECT prod_name FROM Products WHERE prod_price IS NULL; --查出价格为空的
高级过滤
AND和OR
使用AND和OR进行更强的过滤控制,讲条件附加起来,AND即为满足所有条件,OR为满足其中一种
SELECT prod_name, prod_price
FROM Products
WHERE (vend_id = 'DLL01' OR vend_id = ‘BRS01’)
AND prod_price >= 10;
OR的优先度低于AND,为了正确的结果,我们需要用(),来控制求值顺序
IN和NOT
SELECT prod_name, prod_price
FROM Products
WHERE vend_id IN ( 'DLL01', 'BRS01' )
ORDER BY prod_name;
查找in范围内供应商提供的所有产品,等同于 vend_id = 'DLL01' OR vend_id ='BRS01',但是速度更快
not 否定其后的条件
通配符
计算字段
字段拼接
SELECT Concat(vend_name, ' (', vend_country, ')')
AS vend_title
FROM Vendors
ORDER BY vend_name;
字段拼接,AS别名
算数计算
支持+-*/,算出来AS别名
函数
分组数据
子查询
FROM Orders
WHERE order_num IN (SELECT order_num
FROM OrderItems
WHERE prod_id = 'RGAN01');
JOIN
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 = 20007;
高级联结
组合查询
事务处理MySQL
ROLLBACK;
DELETE OrderItems WHERE order_num = 12345
DELETE Orders WHERE order_num = 12345
COMMIT TRANSACTION
INSERT INTO Customers(cust_id, cust_name)
VALUES('1000000010', 'Toys Emporium');
SAVE TRANSACTION StartOrder;
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20100,'2001/12/1','1000000010');
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20100, 1, 'BR01', 100, 5.49);
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20100, 2, 'BR03', 100, 10.99);
IF @@ERROR <> 0 ROLLBACK TRANSACTION StartOrder;
COMMIT TRANSACTION
索引
ON PRODUCTS (prod_name);