From 816f8166049cdcf7af7e85bad8de8fdd67947b8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A8=8B=E5=B8=85=E7=BF=94?= <3371439772@qq.com> Date: Thu, 26 Oct 2023 11:47:59 +0800 Subject: [PATCH 1/2] =?UTF-8?q?10=E6=9C=8824=E6=97=A5=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...24\346\227\245\344\275\234\344\270\232.md" | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 "52\345\217\267 \347\250\213\345\270\205\347\277\224/10\346\234\21024\346\227\245\344\275\234\344\270\232.md" diff --git "a/52\345\217\267 \347\250\213\345\270\205\347\277\224/10\346\234\21024\346\227\245\344\275\234\344\270\232.md" "b/52\345\217\267 \347\250\213\345\270\205\347\277\224/10\346\234\21024\346\227\245\344\275\234\344\270\232.md" new file mode 100644 index 0000000..132b486 --- /dev/null +++ "b/52\345\217\267 \347\250\213\345\270\205\347\277\224/10\346\234\21024\346\227\245\344\275\234\344\270\232.md" @@ -0,0 +1,50 @@ +# 触发器 + +触发器(trigger)是与表有关的数据库对象,指在insert/update/delete之前(BEFORE)或之后(AFTER),触发并执行触发器中定义的SQL语句集合。 + +事件A 对user表新增一条数据 姓名name 年龄age 性别sex + +事件B 对userlogs记录一条user表的操作 new.name,new.age + + + +触发器的这种特性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据校验等操作。 + +使用别名OLD和NEW来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。**触发器只支持行级触发** + + + +### 触发器的类型 + +| 类型 | NEW和OLD | +| ------ | ---------------------------------------- | +| insert | new代表将要新增或已新增的数据 | +| update | old代表更新前的数据、new代表更新后的数据 | +| delete | old代表将要删除或已删除的数据 | + + + +### 语法 + +创建触发器 + +```sql +create trigger 触发器名称 +before/after(触发时机) insert/update/delete(触发类型) +on 表名 for each row -- 行级触发器 +begin + 触发的语句... +end; +``` + +查看 + +```sql +show triggers; +``` + +删除 + +```sql +drop trigger 触发器名称; +``` \ No newline at end of file -- Gitee From 857f109197bedff3675cce388e9725a22ef2acc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A8=8B=E5=B8=85=E7=BF=94?= <3371439772@qq.com> Date: Thu, 26 Oct 2023 11:52:26 +0800 Subject: [PATCH 2/2] =?UTF-8?q?10=E6=9C=8825=E6=97=A5=E4=BD=9C=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...25\346\227\245\344\275\234\344\270\232.md" | 159 ++++++++++++++++++ 1 file changed, 159 insertions(+) create mode 100644 "52\345\217\267 \347\250\213\345\270\205\347\277\224/10\346\234\21025\346\227\245\344\275\234\344\270\232.md" diff --git "a/52\345\217\267 \347\250\213\345\270\205\347\277\224/10\346\234\21025\346\227\245\344\275\234\344\270\232.md" "b/52\345\217\267 \347\250\213\345\270\205\347\277\224/10\346\234\21025\346\227\245\344\275\234\344\270\232.md" new file mode 100644 index 0000000..cda0011 --- /dev/null +++ "b/52\345\217\267 \347\250\213\345\270\205\347\277\224/10\346\234\21025\346\227\245\344\275\234\344\270\232.md" @@ -0,0 +1,159 @@ +## 索引的分类 + +单列索引:一个索引建立在一个列上,一张表可以拥有多个单列索引 + +- 普通索引:单纯地为了提高搜索效率 index +- 唯一索引:unique index,唯一索引只能够建立在数据不重复的列上 ,唯一约束 ,不能重复,可以null,有多个唯一索引 +- 主键索引:primary key唯一性、非空,主键约束 ,不能重复,也不能null,一个只能有一个主键 + +联合索引:可以同时为多个列创建一个索引 + +全文索引(了解) + + + +## 单列索引 + +#### 创建索引(普通索引) + +这是最基本的索引,它没有任何限制。它有以下几种创建方式: + +-- 方式一和二是给现成表加索引 + +方式一:直接在已有表中创建索引 + +```sql +create index 索引名 on 表名(列名) -- 直接删除索引 drop index 索引名 on 表名; 这种不能用来创建主键索引 +``` + +方式二:修改表结构追加普通索引 + +```sql +alter table 表名 add index 索引名(列名); -- 修改表结构删除索引 alter table 表名 drop index 索引名; +``` + +方式三:创建表的时候直接指定 + +```sql +create table 表名( + aaa int primary key, + bbb varchar(20), + index 索引名 (列名) -- 以这种模式定义的索引,可以不指定索引名称。 + primary key(列名) +); +``` + + + + + +#### 查看表的索引 + +```sql +show index from 表名; +``` + +可以查看到创建在表上的所有索引名称。 + + + +#### 删除索引 + +```sql +drop index 索引名 on 表名; +``` + +并且删除表时,会一并删除表上的全部索引。 + +```sql +alter table 表名 drop index 索引名; +``` + + + +#### 唯一索引:建立列的唯一约束时,会自动创建唯一的索引,索引名就是列名 + +它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式 + +```mysql +create unique index 索引名 on 表名(列名); -- 创建普通索引的基础上。多了unique关键字 +``` + +​ 在已存在的表上追加唯一索引 + +```mysql +alter table 表名 add unique 索引名 (列名) +``` + +​ 创建表的时候直接指定 + +```mysql +create table tc_9( + aaa int primary key, + bbb varchar(20), + unique [INDEX] 索引名 (列名) -- 唯一索引,一定有索引名,index 可以省略 +); + +-- 唯一索引和唯一约束 语法还是 有些区别 +create table tc_9( + aaa int primary key, + bbb varchar(20), + tel char(11), -- unique not null, + unique (tel) -- unique(列名) -- 约束是没有 索引名 和 index 关键字的 +); +``` + +**删除唯一索引的方法与删除普通索引相同。** + + + + + + + + +#### 主键索引 与 index 关键字没有关系 + +主键索引:它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候指定了主键,就会创建主键索引, CREATE INDEX不能用来创建主键索引,使用 ALTER TABLE来代替。 + +创建主键索引,就是创建主键约束 + +```sql +drop table if exists tc_10; +create table tc_10( + aaa int primary key, + bbb varchar(20), + ccc datetime +); +create table tc_10( + aaa int, + bbb varchar(20), + ccc datetime, + primary key(aaa) +); +create table tc_10( + aaa int, + bbb varchar(20), + ccc datetime +); +alter table tc_10 add primary key(aaa); +``` + + + +删除主键 + +可以使用 ALTER 命令删除主键: index + +```sql +alter table 表名 drop primary key; +``` + +删除主键时只需指定PRIMARY KEY,但在删除索引时,你必须知道索引名。而不能使用删除普通索引的方法来删除主键索引。 + +```sql +-- 这都是错误的。 +drop index PRIMARY on tc_10; +drop primary key on tc_10; +``` + -- Gitee