MySQL高级指令

举报
武师叔 发表于 2022/08/30 08:43:54 2022/08/30
【摘要】 高级指令 索引索引类型索引名称索引类型字段类型备注PRIMARY KEY主索引主键字段值不能重复,也不能为空。INDEX普通索引自定义字段无,效率低。UNIQUE唯一索引自定义字段字段值不能重复,效率高。FULLTEXT文本索引自定义字段无,用于文本检索。-- 查询索引mysql> SHOW INDEX FROM student;-- 创建索引mysql> CREATE [UNIQUE|F...

高级指令

索引

  • 索引类型
索引名称 索引类型 字段类型 备注
PRIMARY KEY 主索引 主键 字段值不能重复,也不能为空。
INDEX 普通索引 自定义字段 无,效率低。
UNIQUE 唯一索引 自定义字段 字段值不能重复,效率高。
FULLTEXT 文本索引 自定义字段 无,用于文本检索。
-- 查询索引
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

视图

视图算法

算法 名称 含义
UNDEFINED 未定义(默认) MySQL 自主选择相应的算法。
MERGE 合并 视图的查询语句,与外部查询需要先合并再执行。
TEMPTABLE 临时表 将视图执行完毕后形成临时表,再做外层查询.

更新选项

算法 名称 含义
CACADED 级联(默认) 满足所有视图条件才能进行数据更新。
LOCAL 本地 满足本视图条件就能进行数据更新。
-- 创建视图
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;
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。