写点什么

MySQL 高级指令

作者:武师叔
  • 2022 年 8 月 10 日
    辽宁
  • 本文字数:1407 字

    阅读完需:约 5 分钟

MySQL高级指令

高级指令

索引

  • 索引类型



-- 查询索引mysql> SHOW INDEX FROM student;
-- 创建索引mysql> CREATE [UNIQUE|FULLTEXT] INDEX idx_student_age -> [USING BTREE] -- 指定索引类型,默认 B+ 树 -> ON student(age); -- 指定索引属性
mysql> ALTER TABLE student ADD INDEX [idx_student_age](id,age); mysql> ALTER TABLE student ADD UNIQUE [uniq_student_age](age); mysql> ALTER TABLE student ADD FULLTEXE [ft_student_age](age);
-- 删除索引mysql> DROP INDEX idx_student_age ON student;
mysql> ALTER TABLE student DROP INDEX idx_student_age; Copy to clipboardErrorCopied
复制代码

视图

视图算法



更新选项



-- 创建视图mysql> CREATE VIEW view_student    -> AS (SELECT * FROM student);
mysql> CREATE ALGORITHM = MERGE -> VIEW view_student -> AS (SELECT * FROM student) -> WITH LOCAL CHECK OPTION;
-- 查看结构mysql> SHOW CREATE VIEW view_student;
-- 删除视图mysql> DROP VIEW [IF EXISTS] view_student;
-- 修改视图结构(慎用)mysql> ALTER VIEW view_student -> AS (SELECT * FROM student);Copy to clipboardErrorCopied
复制代码

事务

开启事务后,所有输入的 SQL 语句将被认作一个不可分割的整体,在提交时统一执行。


如果在输入过程中出现问题,可以手动进行回滚。在输入过程中可以设置保存点。


-- 事务开启mysql> START TRANSACTION;mysql> BEGIN;-- 事务提交mysql> COMMIT;-- 事务回滚mysql> ROLLBACK;
-- 保存点mysql> SAVEPOINT mypoint; -- 设置保存点mysql> ROLLBACK TO SAVEPOINT mypoint; -- 回滚到保存点mysql> RELEASE SAVEPOINT mypoint; -- 删除保存点Copy to clipboardErrorCopied
复制代码


InnoDB 存储引擎支持关闭自动提交,强制开启事务:任何操作都必须要 COMMIT 提交后才能持久化数据,否则对其他客户端不可见。


mysql> SET AUTOCOMMIT = 0|1;             -- 0 表示关闭自动提交,1 表示开启自动提交。Copy to clipboardErrorCopied
复制代码

锁定

MySQL 可以手动对表/行锁定,防止其它客户端进行不正当地读取和写入。


-- 锁定mysql> LOCK TABLES student [AS alias];          -- 解锁mysql> UNLOCK TABLES;Copy to clipboardErrorCopied
复制代码

触发器

触发程序是与表有关的数据库对象,监听记录的增加、修改、删除。当出现特定事件时,将激活该对象执行 SQL 语句。


  1. MySQL 数据库只支持行级触发器:如果一条 INSERT 语句插入 N 行数据,语句级触发器只执行一次,行级触发器要执行 N 次。

  2. 在触发器中,可以使用 OLD 和 NEW 表示该行的新旧数据。删除操作只有 OLD,增加操作只有 NEW 。


-- 查看触发器mysql> SHOW TRIGGERS;
-- 创建触发器mysql> CREATE TRIGGER my_trigger -> BEFORE INSERT -- 触发时间 BEFORE/AFTER 触发条件 INSERT/UPDATE/DELETE -> ON student -- 监听表必须是永久性表 -> FOR EACH ROW -- 行级触发器 -> BEGIN -> INSERT INTO student_logs(id,op,op_time,op_id) VALUES(null,'insert',now(),new.id) -> END;
-- 删除触发器mysql> DROP TRIGGER [schema_name.]trigger_name;
复制代码


发布于: 刚刚阅读数: 2
用户头像

武师叔

关注

每天丰富自己,去过自己想要的生活! 2022.04.28 加入

一个喜欢最新技术,研发的人工智能专业的大二学生,用自己的代码做一些有意义的事情! 目前大二结束有去大厂研发岗实习的计划,每天丰富自己的技术,去过自己想要的实习生活。

评论

发布
暂无评论
MySQL高级指令_8月月更_武师叔_InfoQ写作社区