MySQL必知必会(五)阅读笔记

第十七章 组合查询

组合查询

有两种基本情况,其中需要使用组合查询:

  1. 在单个查询中从不同的表返回类似结构的数据;
  2. 对单个表执行多个查询,按单个查询返回数据。

创建组合查询

需要价格小于等于5的所有物品的一个列表,而且还想包括供应商1001和1002生产的所有物品(不考虑价格)。

SELECT prod_id,prod_name,vend_id
FROM products 
WHERE prod_price <= 5
UNION
SELECT prod_id,prod_name,vend_id
FROM products 
WHERE vend_id IN (1001,1002);

在这里插入图片描述

UNION规则

  1. UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔(因此,如果组合4条SELECT语句,将要使用3个UNION关键字)。
  2. UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过分析各个列不需要以相同的次序列出)。
  3. 列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含地转换的类型(例如,不同的数值类型或不同的日期类型)。
  4. UNION从查询结果集中自动去除了重复的行使用UNION ALL可保留重复行
SELECT prod_id,prod_name,vend_id
FROM products 
WHERE prod_price <= 5
UNION ALL
SELECT prod_id,prod_name,vend_id
FROM products 
WHERE vend_id IN (1001,1002);

在这里插入图片描述

对组合查询结果排序

SELECT语句的输出用ORDER BY子句排序。在用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后。

SELECT prod_id,prod_name,vend_id
FROM products 
WHERE prod_price <= 5
UNION ALL
SELECT prod_id,prod_name,vend_id
FROM products 
WHERE vend_id IN (1001,1002)
ORDER BY vend_id,prod_name

在这里插入图片描述

第十八章 全文本搜索

第十九章 插入数据

数据插入

  1. INSERT是用来插入(或添加)行到数据库表的。插入可以用几种方式使用:
    1 插入完整的行;
    2 插入行的一部分;
    3 插入多行;
    4 插入某些查询的结果。

插入完整的行

INSERT INTO customers(cust_name,cust_address,cust_state,cust_zip,cust_country,cust_email)
VALUES('Pep','100 fvmdofv','Los skvmdv','CA','90046','USA')
  1. 省略列 如果表的定义允许,则可以在INSERT操作中省略某些列。省略的列必须满足以下某个条件。
    1该列定义为允许NULL值(无值或空值)。
    2在表定义中给出默认值。这表示如果不给出值,将使用默认值

  2. 如果数据检索是最重要的(通常是这样),则你可以通过在INSERT和INTO之间添加关键字LOW_PRIORITY,指示MySQL降低INSERT语句的优先级,如下所示:
    INSERT LOW_PRIORITY INTO
    顺便说一下,这也适用于下一章介绍的UPDATE和DELETE语句。

插入多行

INSERT INTO customers(cust_name,cust_address,cust_state,cust_zip,cust_country,cust_email)
VALUES('Pqew','101 fvmdofv','Lo','CA','90056','USA'),
	  ('Aoo','200 sovsvdm','Mi','AC','11213','USA');

插入检索出的数据

INSERT INTO customers(cust_id,cust_contact,cust_address,cust_state,cust_zip,cust_country,cust_email)
			   SELECT cust_id,cust_contact,cust_address,cust_state,cust_zip,cust_country,cust_email
			   FROM custnew;

第二十章 更新和删除数据

更新数据

  1. 为了更新(修改)表中的数据,可使用UPDATE语句。可采用两种方式使用UPDATE:
    1更新表中特定行;
    2更新表中所有行。
  2. UPDATE语句由3部分组成,分别是:
    1要更新的表;
    2列名和它们的新值;
    3确定要更新行的过滤条件
UPDATE customers
SET cust_email = '111222@com'
WHERE cust_id = '10005';
  1. IGNORE关键字 如果用UPDATE语句更新多行,并且在更新这些行中的一行或多行时出一个现错误,则整个UPDATE操作被取消(错误发生前更新的所有行被恢复到它们原来的值)。为即使是发生错误,也继续进行更新,可使用IGNORE关键字,如下所示:
    UPDATE IGNORE customers

删除数据

  1. 为了从一个表中删除(去掉)数据,使用DELETE语句。可以两种方式使用DELETE:
    1 从表中删除特定的行;
    2 从表中删除所有行。
  2. 删除表的内容而不是表 DELETE语句从表中删除行,甚至是删除表中所有行。但是, DELETE不删除表本身。
  3. 更快的删除 如果想从表中删除所有行,不要使用DELETE。可使用TRUNCATE TABLE语句,它完成相同的工作,但速度更快( TRUNCATE实际是删除原来的表并重新创建一个表,而不是逐行删除表中的数据)。
  4. 下面是许多SQL程序员使用UPDATE或DELETE时所遵循的习惯。
     除非确实打算更新和删除每一行,否则绝对不要使用不带WHERE子句的UPDATE或DELETE语句。
     保证每个表都有主键,尽可能像WHERE子句那样使用它(可以指定各主键、多个值或值的范围)。
     在对UPDATE或DELETE语句使用WHERE子句前,应该先用SELECT进行测试,保证它过滤的是正确的记录,以防编写的WHERE子句不正确。
     使用强制实施引用完整性的数据库(关于这个内容,请参阅第15章),这样MySQL将不允许删除具有与其他表相关联的数据的行
DELETE FROM customers
WHERE cust_id = '10006';

第二十一章 创建和操纵表

创建表

  1. 一般有两种创建表的方法:
     使用具有交互式创建和管理表的工具(如第2章讨论的工具);
     表也可以直接用MySQL语句操纵。
    表创建基础
  2. 为利用CREATE TABLE创建表,必须给出下列信息:
     新表的名字,在关键字CREATE TABLE之后给出;
     表列的名字和定义,用逗号分隔。
CREATE TABLE customs(
cust_id	int NOT NULL AUTO_INCREMENT,
cust_name char(20) NOT NULL,
cust_zip char(20) NULL,
PRIMARY KEY (cust_id)
) ENGINE=INNODB;
  1. 确定AUTO_INCREMENT值 让MySQL生成(通过自动增量)主键的一个缺点是你不知道这些值都是谁。使用last_insert_id()函数获得这个值,如下所示:
    SELECT last_insert_id()
    此语句返回最后一个AUTO_INCREMENT值,然后可以将它用于后续的MySQL语句
  2. 以下是几个需要知道的引擎:
     InnoDB是一个可靠的事务处理引擎(参见第26章),它不支持全文本搜索;
     MEMORY在功能等同于MyISAM, 但由于数据存储在内存(不是磁盘)中,速度很快(特别适合于临时表);
     MyISAM是一个性能极高的引擎,它支持全文本搜索(参见第18章),但不支持事务处理。

更新表

这条语句给vendors表增加一个名为vend_phone的列,必须明确其数据类型

ALTER TABLE vendors
ADD vend_phone CHAR(20);

删除刚刚添加的列,可以这样做:

ALTER TABLE vendors
DROP COLUMN vend_phone;

定义外键

ALTER table 表名 add constraint FK_ID foreign key(外键字段名) references 外表表名(主键字段名)

删除表

DROP TABLE 表名;

重命名表

RENAME TABLE 原表名 TO 表名;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值