事务:

    作用:管理多个SQL语句执行,要么都成功,要么都失败。 —— 关系型数据库 专用!

    组成:DML、DDL、DCL

    特点:要么都成功,要么都失败。

    使用流程:

        1. 开启事务。start transaction 或 begin

        2. 执行 SQL (insert、update、delete)

        3. 。。。

        4. 关闭事务。commit(提交:保存上述修改) rollback(撤销上述修改)。

    关闭事务:
        显示关闭:
            显示提交:commit

            显示回滚:rollback
        隐式关闭:
            隐式提交:一条DDL语句(如:create table)。 正常退出(exit、quit、\q)

            隐式回滚:掉电、宕机、非正常退出。

    Innodb 引擎,支持事务管理。 myisam 不支持。

    保存点:(回滚点)

        语法:     设置保存点: savepoint  保存点名

            回滚至保存点:rollback to 保存点名 —— 不会关闭事务

        使用流程:

            1. begin 开启事务。

            2. 执行 SQL语句(insert、update、delete)

            3. 设置保存点

            4. 。。。

            N. rollback to 保存点名

            N+1. 关闭事务。(commit、rollback)

    事务的特性(ACID):【重点】

        原子性、一致性、[ 隔离性 ]、持久性

视图:

    依赖表创建,不是真实的表。不能存储表数据,数据依然存放在原始表中。

    作用:    1. 筛选数据。

        2. 对用户隐藏表结构

        3. 降低SQL复杂度。

    创建视图:
        语法: create view 视图名 as  select 查询语句(单表查询、多表查询、子查询。。。)。

            create view vw_stu as select stuno, stuname, stusex, writtenexam, labexam from stuinfo natural join stumarks;

    视图的使用:
        与表的使用一致。(insert、update、delete、select)

    查看视图:show tables;  不能使用 show  views。

        select table_name from information_schema.views; 

        show table status where comment = 'view'\G;

    查看视图结构体: desc 视图名。

    查看创建视图:     show create view 视图名\G

    删除:    drop view [if exists] 视图名

索引:

    优点: 查询速度快

    缺点:     insert、update、delete 效率低。

        占用存储空间。

    创建索引:

        方法1: create index 索引名 on 表名(字段名)

        方法2: alter  table 表名 add index 索引名 (字段名)

    创建表指定索引:

        create table 表名 (字段名 字段类型,字段名 字段类型,..., index 索引名(字段名))

        create table 表名 (字段名 字段类型,字段名 字段类型,..., key 索引名(字段名))  也可以实现。

    查看索引:

        show create table 表名\G

    删除索引:

        drop index 索引名 on 表名

    创建索引的原则:

        1. 频繁搜索 —— 适合创建

        2. 有排序需求 —— 适合创建

        3. 有公共字段 —— 适合创建

        4. 数据量较少,不需要创建索引。

        5. 字段的取值范围较少(枚举、集合), 不需要创建。

    xxx.go ——> go build xxx.go(编译) ——> xxx.exe

编译:1. 预处理 2. 编译 3. 汇编 4. 链接

    编译:最慢: 词法分析、语法分析、简单逻辑分析。

预处理:

    使用场景:一条SQL频繁多次执行。

    使用流程:1. prepare 预处理名(stmt)  from ' sql语句 '; ——> 预处理准备完毕。

        2. execute 预处理名(stmt)  [ using 变量 ]

    变量的使用:

        1. prepare 预处理名(stmt)  from ' sql语句 带有 站位符(?) ';  可以有多个 ?

        2. set @变量名 = 变量值, @变量名 = 变量值, 。。。

        3. execute 预处理名(stmt) using @变量名,@变量名,。。。    —— 有多个占位符时, 按站位符?顺序,依次赋值。