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()函数返回的是参数字段更新后的值

原文地址:https://www.cnblogs.com/deolin/p/7043652.html