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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值