mysql必知必会读书笔记
基本语法
primary key:
- 不允许修改或更新
- 不能重用(如果删除, 他的主键不能赋给以后的新行)
- 不允许 null 值
select A, B |
仅在多个行有相同的 A 值时, 才按照 B 排序
select A, B |
select A, B |
select concat(A, ',', B) as C, |
聚集函数
- avg
- count
- max
- min
- sum
只包含不同的值: distinct
分组
除聚集计算语句之外, select 语句中的每个列都必须在 group by 语句中出现
select A, count(*) as amount |
子查询
作为子查询的 select 只能查询单个列
select A |
join
内部联结
SELECT vend_name, prod name, prod price |
没有联结条件返回的会是笛卡尔积
别名
SELECT cust_name, cust_contact |
自连接
SELECT c1.cust_id, c1.cust_name, c1.cust_contact |
自然联结
重复的列需要手动处理
SELECT C.*, O.order_num, O.order_date, OI.prod_id, OI.quantity, OI.item_price |
外部联结
联结包含了在相关表中没有关联行的行
RIGHT指出的是OUTER JOIN右边的表, 而LEFT指出的是OUTER JOIN左边的表, 使用LEFT OUTER JOIN从FROM子句的左边表(Customers表)中选择所有行
SELECT Customers.cust_id, Orders.order_num |
带聚集函数的联结
SELECT Customers.cust_id, |
组合查询 union
- union 中每个查询必须包含相同的列, 表达式, 或聚集函数
- 默认去除重复行, union all 不去除
- 只能有一个 order by
SELECT cust_name, cust_contact, cust_email |
插入
INSERT INTO Customers |
更新
UPDATE Customers |
创建操作表
CREATE TABLE Products |
视图 view
重用SQL语句。
简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道它的基本查询细节。
使用表的组成部分而不是整个表。
保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。
更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。
与表一样,视图必须唯一命名(不能给视图取与别的视图或表相 同的名字)。
为了创建视图,必须具有足够的访问权限。这些限制通常由数据 库管理人员授予。
视图可以嵌套,即:可以利用从其他视图中检索数据的查询来构 造一个视图。所允许的嵌套层数在不同的DBMS中有所不同(嵌 套视图可能会严重降低查询的性能,因此在产品环境中使用之前, 应该对其进行详细的测试)。
许多DBMS禁止在视图查询中使用ORDER BY子句。
有的DBMS要求命名返回的所有列,如果列是计算字段,则需 使用别名(关于列别名的更多信息,请参阅第7章)。
视图不能索引,也不能有关联的触发器或默认值。
有的DBMS把视图作为只读的查询,这表示可以从视图检索数据, 但不能将数据写回底层表。详情请参阅具体的DBMS文档。
有的DBMS允许创建这样的视图,它不允许进行导致行不再属于视图的插入或更新。例如,有这样一个视图,它只检索带有电子 邮件地址的客户。如果更新某个客户,删除他的电子邮件地址, 这将使该客户不再属于视图。这是默认行为,而且是允许的,但在具体的DBMS上可能能够防止这种情况发生。
CREATE VIEW Productcustomers As |
存储过程
CREATE PROCEDURE MailingListcount |
事务管理
保证成批的 sql 操作要么完全执行, 要么完全不执行
游标
外键
CREATE TABLE Orders |
检查约束
CREATE TABLE OrderItems( |
索引
解决方法是使用索引。可以在一个或多个列上定义索引,使DBMS 保存其内容的一个排过序的列表。
触发器
CREATE TRIGGER customer_state |