MySQL学习(二)
联结表
外键,为某个表的一列,包含另一个表的主键值。
使用联结可以用多个表查询信息。
使用完全限定列名,防止出现二义性。
SELECT vend_name, prod_name, prod_price FROM vendors, products WHERE vendors.venid = products.venid ORDER BY vend_name, prod_name; SELECT vend_name, prod_name, prod_price FROM vendors INNER JOIN products ON vendors.venid = products.venid ORDER BY vend_name, prod_name; //两个查询语句效果一样
使用表别名
作用:缩短SQL语句,允许在单条SELECT语句中多次使用相同的表。
SELECT cust_name, cust_contact FROM customers AS c, oders AS o, orderitems AS oi WHERE c.cust_id = o.cust_id AND oi.order_num = o.order_num AND prod_id = 'TNT2';
不同类型联结
自联结,自然联结,外部联结
联结包含了那些在相关表中没有关联行的行,这种联结称为外部联结。
SELECT customers.cust_id, orders.order_num FROM customers LEFT OUTER JOIN orders ON customers.cust_id = orders.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); SELECT vend_id, prod_id, prod_price FROM products WHERE prod_price <= 5 OR vend_id IN (1001,1002);
全文本搜索
MyISAM数据引擎支持全文本搜索,InnoDB不支持全文本搜索
使用两个函数Match()和Against()执行全文本搜索,Match()指定被搜索的列,Against()指定要使用的搜索表达式。
SELECT note_text FROM productnotes WHERE Match(note_text) Against('rabbit') //会把note_text列匹配rabbit的文本打出来
插入数据
INSERT INTO table1(,,,) VALUES(,,,);
没有值用NULL。
插入多条,一个()一条
INSERT INTO table1 VALUES(,,,),(,,,);
将SELECT语句的结果插入表中,由一条INSERT语句和一条SELECT语句组成。
INSERT INTO customers(cust_id, cust_contact,···) SELECT cust_id,cust_contact,··· FROM custnew;
更新和删除数据
UPDATE,更新表中特定行或表中所有行
UPDATE customers SET cust_email = '' WHERE cust_id = 10005;
如果UPDATE更新多行,有一行出现错误,则整个UPDATE操作被取消。
DELETE,删除表中特定行或表中所有行
TRUNCATE TABLE删除所有行,速度更快
创建表
CREATE TABLE创建表,PRIMARY KEY设置主键,ENGINE设置数据引擎。
CREATE TABLE customers ( cust_id int NOT NULL AUTO_INCREMENT, cust_name char(50) NOT NULL, PRIMARY KEY (cust_id) )ENGINE=InnoDB;
可以创建多个列组成的主键,以逗号分隔 PRIMARY KEY(cust_id, cust_name)
AUTO_INCREMENT,自动增量
DEFAULT,设置默认值
InnoDB是一个可靠的事务处理引擎,不支持全文本搜索;MEMORY功能等同于MyISAM,数据存储在内存,速度快,适合临时表;MyISAM是一个性能极高的引擎,支持全文本搜索,不支持事务处理。
ALTER TABLE更新表
ALTER TABLE vendors ADD vend_phone char(20); ALTER TABLE vendors DROP COLUMN vend_phone;
最常用是用来定义外键
ALTER TABLE orderitems ADD CONSTRANT fk_orderitems_orders FOREIGH KEY (order_num) REFERENCES order (order_num);
删除表,DROP TABLE;
重命名,RENAME TABLE;