zoukankan      html  css  js  c++  java
  • Mysql存储引擎

    Mysql存储引擎

    Mysql 支持的存储引擎

    1.存储引擎

    • MyISAM
    • InnoDB
    • Memory
    • CSV
    • Archive

    MyISAM:存储限制256TB,支持索引,表级锁定,数据压缩。

    InnoDB: 存储限制64TB,支持事务和索引,索颗粒为行锁。

    2.锁的分类

    • 共享锁(读锁):在同一时间段内,多个用户可以读取同一个资源,读取过程中数据不会发生任何变化。
    • 排它锁(写锁):在任何时候只能有一个用户写入资源,当进行写锁时会阻塞其他的读锁或者写锁操作。

    3.锁颗粒

    • 表锁:是一种开销最小的锁策略。
    • 行锁:是一种开销最大的锁策略。

    4.事务

    事务:用于保证数据库的完整性。如:A用户给B用户转账200元。A用户减掉200,B用户增加200.

    事务的特性:

    • 原子性
    • 一致性
    • 隔离性
    • 持久性

    5.存储引擎的特点

    修改存储引擎:

    (1.) 修改mysql配置文件:default-storage-engine=engine

    (2.)通过创建数据表命令来实现:

    CREATE TABLE table_name (
    	...
    )ENGINE=engine;
    

    (3.) 修改数据表命令

    ALTER TABLE table_name ENGINE = engine_name;
    

    6.内置函数

    字符串函数、数值函数、日期时间函数、加密函数。

    (1.)创建自定义函数

    CREATE FUNCTION function_name
    RETURNS
    {STRING|INTERGER|REAL|DECIMAL}
    routine_body
    

    (2.)函数体

    函数体由合法的SQL语句构成,函数体可以是简单的SELECT和INSERT,如果为复合体则使用BEGIN...END语句,复合结构可以包含声明,循环,控制语句。

    CREATE FUNCTION f1() RETURNS VARCHAR(30)
    RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日 %H:%i分:%s秒');
    
    SELECT f1(); -- 查看方法返回
    
    DROP f1();   -- 删除方法
    

    示例二:

    CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)
    RETURNS FLOAT(10,2)UNSIGNED
    RETURN (num1+num2)/2;
    

    7.Mysql执行过程

    graph LR A(SQL命令) -->B(MySQL引擎) B --> C{语法正确} C --> |正确| D(可识别的指令) D --> |执行| E(执行结果) E --> |返回| F(客户端)

    8.存储过程

    (1.)存储过程的优点

    • 增强SQL语句的功能和灵活性
    • 实现较快的执行速度
    • 减少网络流量

    (2.)创建存储过程

    CREATE
    [DEFINER = {USER|CURRENT_USER}]
    PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic...]routine_body
    
    pro_parameter:
    [IN|OUT|INOUT]param_name_type
    
    COMMENT:注释
    CONTAINS SQL:包含sql语句,但不包含独活写数据的语句
    NO SQL:不包含SQL语句
    READS SQL DATA:包含读数据的语句
    MODIFIES SQL DATA:包含写数据的语句
    SQL SECURITY{DEFINEER|INVOKER}知名谁有权限执行
    

    (3.)调用存储过程

    call sp_name([parameter[...]])
    call sp_name[()]
    

    (4.) 示例

    DELIMITER //  -- 修改默认的结束符号为//,执行完后改回分号。delimiter ;
    CREATE PROCEDURE removedUserById(IN id INT UNSIGNED)
    BEGIN
    DELETE FROM USERS WHERE ID = id;
    END
    //
    
    -- 执行调用 --
    call removedUserById(3)
    

    (5.)修改、删除存储过程

    ALTER PROCEDURE ...
    DROP PROCEDURE [IF EXISTS] sp_name
    
    【励志篇】: 古之成大事掌大学问者,不惟有超世之才,亦必有坚韧不拔之志。
  • 相关阅读:
    MySql常用日期时间查询
    微信开发中网页授权access_token与基础支持的access_token异同
    Sqlserver复杂查询
    Array排序和List排序
    关于java按位操作运算
    验证redis的快照和AOF
    线程安全 加锁机制
    Redis 与 数据库处理数据的两种模式
    redis实现点击量/浏览量
    jsp网站访问次数统计的几种方法
  • 原文地址:https://www.cnblogs.com/tomtellyou/p/14466433.html
Copyright © 2011-2022 走看看