MySQL 全文索引
2025-04-22 11:38:46+08:00

MySQL 全文索引

全文索引是一种对文本进行全文搜索的索引,类似搜索引擎的反向索引,可以大幅提升全文搜索的速度。但同时也会对插入性能造成较大影响。

创建全文索引

创建表时创建全文索引:

CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    title VARCHAR(200),
    content TEXT,
    FULLTEXT KEY idx_search (title, content)  /*!50100 WITH PARSER ngram */
) ENGINE=InnoDB;

单独创建全文索引:

ALTER TABLE articles ADD FULLTEXT KEY idx_search (title, content)  /*!50100 WITH PARSER ngram */;

这里的 /*!50100 WITH PARSER ngram */ 表示 MySQL 版本 ≥ 5.1.00 是附加 WITH PARSER ngram

ngram 是一个中文分词器,如果没有它,将无法搜索中文.

通过全文索引进行搜索

自然搜索:

SELECT * FROM articles WHERE MATCH(title, body) AGAINST('搜索内容');

布尔搜索:

SELECT * FROM articles 
WHERE MATCH(title, body) AGAINST('+MySQL -Oracle' IN BOOLEAN MODE);
  • +MySQL 表示必须包含完整单词 MySQL
  • -Oracle 表示必须不包含完整单词 Oracle
MySQL 数据库基础命令
2025-04-15 01:42:38+08:00

MySQL 数据库基础命令

本文中尖括号 <> 表示占位符,方括号 [] 表示可选,而圆括号 () 则是 MySQL 语法的一部分。

数据库的操作命令

-- 创建数据库
CREATE DATABASE <数据库名>;

-- 删除数据库
DROP DATABASE <数据库名>;

-- 修改数据库
ALTER DATABASE <数据库名> MODIFY <字段> = <值>;

-- 使用数据库
USE <数据库名>;

-- 查看数据库中的所有表
SHOW TABLES;

例如:

-- 修改数据库名称
ALTER DATABASE db_name MODIFY NAME = new_db_name;

授权命令

GRANT <操作列表> ON <数据库名>.<表名> TO '<用户名>'@'<主机>';

例如:

-- 运行 user 用户操作 localhost 上的 db_name 数据库中的所有表
GRANT CREATE,ALTER,DROP,INDEX,SELECT,INSERT,UPDATE,DELETE ON db_name.* TO 'user'@'localhost';

表的操作命令

-- 创建表
CREATE TABLE [IF NOT EXISTS] <表名> (
    <列名1> <数据类型> [约束条件] [COMMENT '<注释>']
    <列名2> <数据类型> [约束条件] [COMMENT '<注释>']
    ...
    [PRIMARY KEY (<列名>)]                                  -- 主键
    [INDEX <索引名> (<列名>)]                               -- 索引
    [UNIQUE (<列名>)]                                       -- 唯一约束
    [FOREIGN KEY (<列名>) REFERENCES <其它表>(<列名>)]      -- 外键约束
)

-- 删除表
DROP TABLE [IF EXISTS] <表名>;

-- 修改表名
ALTER TABLE <原表名> RENAME TO <新表名>;
RENAME TABLE <原表名> TO <新表名>;

-- 查看表结构
DESC <表名>;
SHOW CREATE TABLE <表名>;
SHOW COLUMNS FROM <表名>;
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '<表名>';

-- 查看表的状态
SHOW TABLE STATUS WHERE name='<表名>';

数据的增删改查

-- 插入数据
INSERT INTO <表名> (<列名1>, <列名2>, ...) VALUES 
(<值1>, <值2>, ...) 
[ , (<值1>, <值2>, ...), ... ];

-- 查询数据
SELECT <列名1>, <列名2>, ... FROM <表名> 
[ WHERE <条件> ]             
[ ORDER BY <列名> [DESC] ]  -- 排序
[ LIMIT <数量> ]            -- 分页
[ LIMIT <偏移量> ]
[ GROUP BY <列名> ];        -- 分组

-- 更新数据
UPDATE <表名> SET 
<列名1>=<值1>
[ , <列名2>=<值2>, ... ]
[ WHERE <条件> ];

-- 删除数据
DELETE FROM <表名> [ WHERE <条件> ];

事务

-- 开始事务
START TRANSACTION;

-- 提交事务
COMMIT;

-- 回滚事务
ROLLBACK;
MySQL 数据库初始化
2025-04-15 01:42:21+08:00

MySQL 数据库初始化

创建用户

首先通过root进行免密登录:

sudo mysql
CREATE USER '<username>'@'localhost' IDENTIFIED BY '<password>';

创建数据库并设置权限

CREATE DATABASE <database>;
GRANT CREATE,ALTER,DROP,INDEX,SELECT,INSERT,UPDATE,DELETE ON <database>.* TO '<username>'@'localhost';

修改用户密码

ALTER USER '<username>'@'localhost' IDENTIFIED WITH mysql_native_password BY '<password>';