MySQL备忘点(下)
联结表
创建联结 FROM 表1,表2 与内连接作用相同类似;如果失去WHERE子句,会出现笛卡尔积现象
内联结 INNER JOIN
高级联结
自联结 例子:SELECT 字段b FROM 表 WHERE 字段a = (SELECT 字段a FROM 表 WHERE 字段B的条件),单条SQL文多次引用一张表
外联结 LEFT OUTER JOIN RIGHT OUTER JOIN FULL JOIN 外联结有三种,分别代表那张表的结果可以为空,还是说都可以为空
组合查询
并 SQL1 UNION SQL2 SQL1 和 SQL2的结果集中字段名必须完全一致
消除重复的并 SQL1 UNION ALL SQL2 SQL1 和 SQL2的结果集中字段名必须完全一致
并排序 SQL1 UNION ALL SQL2 ORDER BY 字段 这个排序是将组合后的总结果集进行排序
插入数据 “多行插入”,“插入检索值”用的比较多
单行插入 “值”可以是null,尽量把字段名完全列出来,而不是依赖自带的顺序
INSERT INTO 表名 (字段名1, 字段名2, 字段名3) VALUES (值1, 值2, 值3);
多行插入 这是最简便的方式,避免使用 多条“单行插入”语句
INSERT INTO 表名 (字段名1, 字段名2, 字段名3) VALUES (值1x, 值2x, 值3x), (值1y, 值2y, 值3y), (值1z, 值2z, 值3z)
插入检索值 INSERT-SELECT语句,INSERT部分和SELECT部分的列名可以不匹配,只要类型一致保证不报错即可,
INSERT INTO 表名 (字段名1, 字段名2, 字段名3) SELECT 字段名1, 字段名2, 字段名3 FROM 表名x
例如:
INSERT INTO student (no)
SELECT student_no FROM people
更新删除数据 “更新”,“删除”都比较常用,避免使用不带WHERE条件的更新、删除语句,它们太危险了
更新
UPDATE 表名 SET 字段1=值1, 字段2=值2 WHERE 条件
删除
DELETE FROM 表名 WHERE 条件
创建和操纵表
创建表
CREATE TABLE 表名 ( 字段1 类型 NOT NULL AUTO_INCREMENT, 字段2 类型 NULL DEFAULT 'Deolin', …… , PRIMARY KEY (字段1) ) ENGINE=InnoDB
字段名 类型 null值? 自增? 默认值,
主键
引擎类型
更新表
ALTER TABLE 表名 ( ADD DROP )
删除表
DROP TABLE 表名
重命名表
RENAME TABLE 表名1 TO 表名2
视图 COOP时候的WebQuery
创建视图
CREATE VIEW 视图名 AS SELECT语句
视图常见的作用就是重用SQL语句,特别是SELECT语句
一般来说视图不用与INSERT、UPDATE、DELETE
游标
用于操作SQL文的结果集,常见的用法可能是分页
触发器
创建触发器
CREATE TRIGGER csts_del AFTER INSERT ON csts FOR EACH ROW BEGIN SELECT 'success' END
BEGIN - END用于容纳多条SQL语句,不是必须的
删除触发器
DROP TRIGGER csts_del
INSERT触发器
CREATE TRIGGER csts_ins AFTER INSERT ON csts FOR EACH ROW SELECT NEW.no
after可以换成before,before用于插入前数据的净化,after用于插入后的确认
NEW关键字指的是一个虚拟表,表中存储的是触发器INSERT语句插入的数据
DELETE触发器
CREATE TRIGGER csts_del AFTER INSERT ON csts FOR EACH ROW SELECT OLD.no
OLD关键字与NEW类似,存储的是触发器DELETE语句删除的数据
UPDATE触发器
CREATE TRIGGER csts_upd BEFORE UODATE ON csts FOR EACH ROW SET NEW.name =Upper(NEW.name);
Upper()函数返回的是参数字段更新后的值