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;

相关推荐