数据库相关

理论

结构化查询语言(Structured Query Language)

SQL分类:

        数据定义语言DDL(Data Definition Language):create alter drop

        数据操作语言DML(Data Manipulation Language):insert delete update

        数据控制语言DCL(Data Control Language):用户管理,权限管理

        数据查询语言DQL(Data Query Language):select from where

        事务控制语言TCL:

SQL优化方案:

        减少数据访问:

        返回更少的数据:

        减少交互次数:

        减少服务器CPU开销:

        利用更多资源:

        分析SQL语句,是否加载不必要的字段/数据

        分析SQL执行计划,思考可能的优化点,索引是否命中等

        查看SQL设计的表结构,索引信息

        如果SQL很复杂,优化SQL结构

        按照可能的优化点执行表结构变化,增加索引,SQl,改写等操作

        查看优化后的执行时间和执行计划

        如果表数据量太大,考虑分表

        利用缓存较少查询次数

分支语法

   语法一:

CASE WHEN field_name >= * THEN 比较结果
    WHEN  ~
    WHEN  ~
    ELSE  ~
END

   语法二:

CASE field_name
    WHEN 条件判断 THEN 输出结果
    WHEN ~
END

定义全局变量

SET @name = value;

索引

        主键索引:PRIMARY KEY

        唯一索引:UNIQUE

        普通索引:INDEX

        全文索引:FULLTEXT 

        创建索引:

CREATE index index_name on table_name(field_name)

     删除索引:

drop index index_name on table_name

创建索引注意事项:

        不适合创建的场景:

                索引列包含NULL值

                数据量少,修改频率低

                列数据经常变化,频繁更新索引

                需要计算的字段,索引无效

                左侧模糊查询,索引失效,应遵循最右原则

                类型为长类型数据字段如:text varchar

        创建的场景:

                字段的数值有唯一性限制

                频繁作为WHERE查询条件的字段

                经常group by/order by的条件列

                update/dalete条件列

                DISTINCT字段

                小数据类型字段列

                字符创前缀创建索引

                区分度高的列适合作为索引

                使用频繁的列放在联合索引的左侧

                多字段都需创建索引,联合索引优于单值索引

视图

        创建视图:

CREATE VIEW view_name AS sql~

存储过程

        创建存储过程:

DELIMITER  //  *这里的符号自定义  但必须上下一致
    CREATE PROCEDURE pro_name(in/out *in输入类型参数  out输出类型参数 name varchar(50) *参数类型)
    BEGIN
    sql~
    sql~
END //

       调用存储过程:

CALL pro_name(参数);

      查询存储过程:

SHOW PROCEDURE STATUS [LIKE '***']

触发器

        创建触发器:

CREATE trigger tri_name after/before insert/delete/update on table_name for each row
begin
    sql~ where field_name=OLD.field_name;
end

*OLD代表触发的对象数据可以在内部使用OLD代表

事务

        ACID

                原子性:事务中的所有SQL语句是一个整体,不能再分割,要么全部执行成功,要么全部执行失败!

                一致性:不管事务最终是失败还是成功,事务前后的业务数据之和是保持一致的。

                隔离性:在隔离级别较高的前提下,事务之间是隔离开来的。一个事务看不到另外一个事务正在进行中的操作。要么是看到另外一个事务开始之前的状态,要么看到另外一个事务已经结束后的状态。

                持久性:事务成功后,对数据的修改操作将会是永久的

        并发读问题:     

                脏读:在一个事务中读取到了另外一个事务没有提交的数据, 就叫做脏读。

                不可重复读:在一个事务中,对同一个数据的两次查询结果不一致,是因为中间有人做了修改操作。

                幻读:在一个事务中,对同一个数据的两次查询结果不一致,是因为中间有人做了插入或者删除操作.

        隔离级别:

                READ-UNCOMMITTED:读取未提交

set tx_isolation='read-uncommitted';

                        脏读,幻读,不可重复读

                READ-COMMITTED:读取已提交

set tx_isolation='read-committed';

                        幻读,不可重复读

                REPEATABLE-READ(MYSQL默认):可重复读

set tx_isolation='repeatable-read';

                        幻读(快照读无,当前读有)

                SERIALIZABLE:可串行化

set tx_isolation='serializable';

你可能感兴趣的:(mysql,数据库,sql)