# MySQL-常用语句

# 1. 递归查询 - WITH RECURSIVE

参考:

# 2. 函数和存储过程

DROP FUNCTION IF EXISTS `GetSecurityV`;

DELIMITER ;;
CREATE FUNCTION `GetSecurityV`(`pObjectId` bigint,`pUserId` bigint)
    RETURNS bigint
    
    -- 指定函数特性‌,指明使用SQL语句的限制
    --    CONTAINS SQL: 表明子程序包含SQL语句,但是不包含读写数据的语句;
    --    NO SQL: 表明子程序不包含SQL语句;
    --    READS SQL DATA: 说明子程序包含读数据的语句;
    --    MODIFIES SQL DATA: 表明子程序包含写数据的语句。
    READS SQL DATA
    
    -- SQL SECURITY { DEFINER | INVOKER } 
    -- 指明谁有权限来执行。
    --    DEFINER 表示只有定义者才能执行【默认值】
    --    INVOKER 表示拥有权限的调用者可以执行
    SQL SECURITY INVOKER
BEGIN

  -- ...

END ;;
DELIMITER ;

# 3. 全文搜索

# 3.1. 创建

创建表时创建全文索引:

CREATE TABLE `table_name` (
  -- ...

  FULLTEXT full_index_name (col_name)
);

在已创建的表上创建全文索:

CREATE FULLTEXT INDEX full_index_name ON table_name(col_name);

# 3.2. 自然语言搜索

说明:

  • 默认模式
  • 按 单词、短语 搜索,需要开启中文分词器
  • 需要考虑 单词长度

示例:

SELECT
    *
FROM
    `tb_article` 
WHERE
    MATCH ( title, content ) AGAINST ( 'MySQL' );

-- 查看最小单词长度
SHOW VARIABLES LIKE '%ft_min_word_len%';

-- 全局设置
SET GLOBAL ft_min_word_len = 2;  

# 3.3. 布尔搜索

模糊匹配:

SELECT
    *
FROM
    `tb_article` 
WHERE
    -- 跟 LIKE 操作符行为一致
    MATCH ( title, content ) AGAINST ( '*test*' IN BOOLEAN MODE );

# 3.4. 参考

本章目录