已经过时了,写在这里给需要的朋友,入门使用
1.创建数据库、创建表、测试数据
创建数据库
创建表:
这儿没有使用外键
#班级表
CREATE TABLE xmcc_class(
c_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '班级编号',
c_name VARCHAR(10) NOT NULL COMMENT '班级名称'
)ENGINE=INNODB DEFAULT CHARSET=utf8;
#学生表
CREATE TABLE xmcc_student(
s_id INT PRIMARY KEY AUTO_INCREMENT COMMENT '学生学号',
s_name VARCHAR(10) NOT NULL COMMENT '学生姓名',
s_phone VARCHAR(11) NOT NULL UNIQUE COMMENT '学生电话',
s_cid INT COMMENT '班级id'
)ENGINE=INNODB DEFAULT CHARSET=utf8;
测试数据
#测试数据
INSERT INTO xmcc_class(c_name) VALUES('java'),('.net'),('php'),('python')
#三个java班 一个.net 班 2个php 没有python
INSERT INTO xmcc_student(s_name,s_phone,s_cid) VALUES
('小a','11111111111',1),
('小b','22222222222',1),
('小c','33333333333',1),
('小d','44444444444',2),
('小e','55555555555',3),
('小f','66666666666',3)
2.视图
1.什么是视图
通俗的讲,视图就是一条SELECT语句执行后返回的结果集。就是为了隐藏一部分数据或者减少联表查询而创建的一张虚拟表
2.视图的特性
视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变);
可以跟基本表一样,进行增删改查操作(ps:增删改操作有条件限制);
3.视图的作用
方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性;
更加安全,数据库授权命令不能限定到特定行和特定列,但是通过合理创建视图,可以把权限限定到行列级别;
4.使用场合
权限控制的时候,不希望用户访问表中某些含敏感信息的列,比如salary…
关键信息来源于多个复杂关联表,可以创建视图提取我们需要的信息,简化操作;
以例子来学习,首先看看语句:
创建视图:
CREATE VIEW 视图名(列1,列2…)
AS SELECT (列1,列2…)
FROM 表名;
删除视图:
Drop view if exists 视图名
一般不太会去修改视图
2.1隐藏字段
场景:现在项目中有一个学生推荐系统,需要避免企业得知学生的联系方式,不然学生直接就跟企业联系了
分析:这样就不能把学生表直接给学生推荐系统,可以创建视图隐藏学生的电话字段
2.2将表的关联数据,存储于视图中简化查询
场景:实际中有很多查询,需要对多张表联合操作,有一定的复杂度,完成需要一定的sql能力,可以通过视图简化查询的难度
这儿的查询比较简单,但是也能说明问题,比如查询学生的信息及所在班级名字,需要联表查询,就可以创建视图来简化以后的查询
大家只需要理解、记住这两个优点就可以了
2.3缺点
性能:从数据库视图查询数据可能会很慢,特别是如果视图是基于其他视图创建的。
表依赖关系:将根据数据库的基础表创建一个视图。每当更改与其相关联的表的结构时,都必须更改视图。(视图是虚拟的 跟随基本表变化)
3.触发器
触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。
3.1触发器语句
CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt
trigger_name:触发器的名称
tirgger_time:触发时机,为BEFORE或者AFTER
trigger_event:触发事件,为INSERT、DELETE或者UPDATE
tb_name:表示建立触发器的表名,就是在哪张表上建立触发器
trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句
删除触发器:
Drop trigger 触发器名称
3.2案例
为student的班级id列增加外键约束
ALTER TABLE xmcc_student ADD CONSTRAINT cid_key FOREIGN KEY(s_cid)
REFERENCES xmcc_class(c_id);
现在有了外键约束,如果我们删除其中.net班级
这个时候就可以使用触发器,当删除某个班级的时候触发修改当前班级学生的班级id为null,当然这儿不需要去深究逻辑
创建触发器
#创建触发器来保证数据的完整性
CREATE TRIGGER trigger_test #触发器名称为trigger_test
BEFORE DELETE #在删除前
ON xmcc_class FOR EACH ROW #对xmcc_class每一行
UPDATE xmcc_student SET #修改xmcc_student
#old表示删除前的行数据 如果是修改的old表示修改前 new表示修改后
s_cid=NULL WHERE s_cid=old.c_id
测试:
查看xmcc_student表
3.3说明及缺点
这儿只是以一个简单的例子来理解触发器,大家需要记住语句的使用,需要看得懂触发器,也需要能写触发器,实际的中的触发器可能逻辑会难一点,但是语法基本都是这样了,会加一定plsql我们在存储过程中再去学习.