MySQL视图触发器存储过程内外链接数据锁

视图

什么是视图

是一个虚拟表,其内容由查询定义。同真实的一样,视图包含一系列带有名称的列和行数据

视图有什么用

视图的作用就是缓存数据,可以这么理解,我把一条sql的查询结果装在了一个视图里,我下次再查的时候,就不用走SQL了,直接取这个视图里就可以了,神奇的是我可以修改这个视图里的数据就等于修改了原表的数据

视图的特点

1.视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系

2.视图是由基本表(实表)产生的表(虚表)

3.视图的建立和删除不影响基本表

4.对视图内容的更新(添加、删除、修改)直接影响基本表

5.当视图来自多个基本表时,不允许添加和删除数据

视图的创建

create view 视图名称 as sql查询语句;

视图的使用

select 字段名+条件 from 视图名称;

视图的更新

update 视图名称;

视图的删除

drop view 视图名称;

触发器

什么是触发器

简单地说,就是一张表发生了某件事(插入删除更新),然后自动触发了预先编写好的若干条SQL语句的执行

触发器的作用

监视某种情况,并触发某种操作(保证数据的完整性,起到约束的作用)

触发器创建语法四要素

1.监视地点(table)

2.监视事件(insert/update/delete)

3.触发时间(after/before)

4.触发事件(insert/update/delete)

创建触发器语法

create trigger triggerName after/before insert/update/delete

on 表名 for each row     #这句话是固定的

begin

#需要执行的SQL语句

End

mysql>create trigger agf after delete on s1 for each row

->insert into it values(‘架构师’,’小明’,’150505188201241312’,’海归’,’10000’);

#查看触发器

mysql>show triggers\G

注意1:after/before:只能选一个,after表示后置触发,before表示前置触发

注意2:insert/update/delete:只能选择一个

存储过程

咱在mysql中敲SQL语句的时候,是一行一行的敲,那么存储过程就好比,把多条SQL语句放到存储过程之中,然后再去执行这个存储过程

存储过程有什么优点缺点

优点:

1.存储过程增强了SQL语言灵活性

2.减少网络流量,降低了网络负载

3.存储过程只在创造时进行编译,以后每次执行存储过程都不需要再重新编译

缺点:

1.扩展功能不方便

2.不便于系统后期维护

创建不带参数的存储过程

例:创建名称为ShowStuScore的存储过程,存储过程的作用是从it表中查询学生的成绩信息,输入的SQL语句和执行过程如下所示

mysql>DELIMITER //

mysql>CREATE PROCEDURE ShowStuScore()

->BEGIN

->select * from it;

->END //

创建存储过程后通过call语句条用该存储过程的SQL语句和执行结果如下

mysql>CALL ShowStuScore

创建带参数的存储过程

例:创建名称为GetScoreByStu的存储过程,输入参数是姓名。存储过程的作用是通过输入的姓名从it表中查询指定学生的信息,输入的SQL语句和执行过程如下所示。

mysql>DELIMITER

mysql>create procedure GetScoreByStu (IN name varchar(30))

->BEGIN

->select 工资 from it where 姓名=name

->END //

创建存储过程GetScoreBystu后,通过call语句调用该存储过程的SQL语句和执行结果如下所示.

mysql>DELIMITER

mysql>CALL GetScoreByStu

删除存储过程

删除存储过程GetScoreByStu,查看存储过程的运行结果如下所示。

mysql>DROP PROCEDURE GetScoreByStu

MySQL外键约束

MySQL外键约束用来在两个表的数据之间建立连接,他可以是一列或者多列,一个表可以有一个或者多个外键,在设置外键的时候,要有两张表,一个是主表(父表),另一个表是从表(子表)

主表:对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表

从表:对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表

外键是表的一个字段,不是本表的主键,但对应另一个表的主键。定义外键后,不允许删除另一个表中具有关联关系的行。外键的主要作用是保持数据的一致性、完整性。例如,部门表tb_dept的主键是id,在员工表tb_emp5中有一个键deptId与id相连

选取设置MySQL外键约束的字段

定义一个外键时,需要遵守下列规则

1.主表必须已经存在于数据库中,或者是当前正在创建的表如果是后一种情况,则主表与从表是同一个表,这样的表成为自参照表,这种结构成为自参照完整性

2.必须为主表定义主键

3.主键不能包含空值,但允许在外键中出现空值。

在创建表时设置外键约束

在数据表中创建外键使用FOREIGN KEY关键字,具体的语法规则如下;

[CONSTRAINT <外键名>] F0REIGN KEY字段名[, 字段名2,… ]

REFERENCES <主表名>主键列1 [, 主键列2,… ]

其中:外键名为定义的外键约束的名称,-个表中不能有相同名称的外键;字段名表示子表需要添加外健约束的字段列;主表名即被子表外键所依赖的表的名称;主键列表示主表中定义的主键列或者列组合。

1、创建表时设置外键约束

----#########----在gs 数据库中创建一个 jsb 的表 字段有 id  sex

mysql> create table jsb(id int(10) not null,sex enum('a','b') default null,primary key (id)) engine=innodb;

Query OK, 0 rows affected (0.00 sec)

格式:create table 表名称(新建)(id int(10) primary key,

name varchar(25),

deptld int(11),

constraint 外键名 foreign key(关联字段) references 父表名称(主键字段) on delete cascade on update cascade);

外键名:定义外键约束的名称,一个表中不能有相同名称的外键

字段名表示子表需要添加外健约束的字段列

主表名即被子表外键所依赖的表的名称

主键列表示主表中定义的主键列或者列组合

例:创建表 jsb_1  并在表上创建外键约束 fk_jsb ,让它的键 deptId 作为外键关联到表 jsb 的主键 id

mysql> create table jsb_1(id int(10) primary key,name varchar(25),deptld int(11),constraint fk_jsb foreign key(deptld) references jsb(id) on delete cascade on update cascade);

Query OK, 0 rows affected (0.01 sec)

~~~~~~~~~~~~写入数据省略.....

mysql> select * from jsb;

+----+------+

| id | sex  |

+----+------+

|  1 | a    |

|  2 | b    |

|  3 | a    |

+----+------+

3 rows in set (0.00 sec)

mysql> select * from jsb_1;

+----+--------------+--------+

| id | name         | deptld |

+----+--------------+--------+

|  1 | aaa          |      1 |

|  2 | sss          |      1 |

|  3 | ccc          |      2 |

|  4 | 啊啊地方      |      2 |

|  5 | 5adf         |      3 |

|  6 | aad          |      3 |

+----+--------------+--------+

6 rows in set (0.00 sec)

mysql> delete from jsb where id=2;

Query OK, 1 row affected (0.00 sec)

mysql> select * from jsb;

+----+------+

| id | sex  |

+----+------+

|  1 | a    |

|  3 | a    |

+----+------+

2 rows in set (0.00 sec)

mysql> select * from jsb_1;

+----+------+--------+

| id | name | deptld |

+----+------+--------+

|  1 | aaa  |      1 |

|  2 | sss  |      1 |

|  5 | 5adf |      3 |

|  6 | aad  |      3 |

+----+------+--------+

4 rows in set (0.00 sec)

发现我们删除jsb上的  2 ,jsb_1 表的 deptld 中的 2 也已经删除了

2、已经创建表时添加外键约束

格式:alter table 表名称 add constraint 外键约束 foreign key(字段) references 主表名称(主键字段);

例:  创建表 jsb_2

mysql> create table  jsb_2(id int(11) primary key,name varchar(22) not null,deptld int(15));

Query OK, 0 rows affected (0.00 sec)

进行添加外键约束

mysql> alter tab2 add constraint aaa foreign key(deptld) references jsb(id);sb(id);

Query OK, 0 rows affected (0.01 sec)

Records: 0  Duplicates: 0  Warnings: 0

查看

mysql> SHOW CREATE TAB2\G

*************************** 1. row ***************************

Table: jsb_2

Create Table: CREATE TABLE `jsb_2` (

`id` int(11) NOT NULL,

`name` varchar(22) NOT NULL,

`deptld` int(15) DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `aaa` (`deptld`),

CONSTRAINT `aaa` FOREIGN KEY (`deptld`) REFERENCES `jsb` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.00 sec)

注意:如果未显示内容说明存储引擎不是innodb修改后在进行实验

删除外键约束

在数据库中定义的外键,如果不需要,可以将其删除。外键一旦删除,就会解除主表和从表间的关联关系

格式:alter table 从表名称 drop foreign 外键名称;

mysql> show create table jsb_2\G                              #没有删除前

*************************** 1. row ***************************

Table: jsb_2

Create Table: CREATE TABLE `jsb_2` (

`id` int(11) NOT NULL,

`name` varchar(22) NOT NULL,

`deptld` int(15) DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `aaa` (`deptld`),

CONSTRAINT `aaa` FOREIGN KEY (`deptld`) REFERENCES `jsb` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.01 sec)

mysql> alter table jsb_2 drop foreign key aaa;                 #删除外键

Query OK, 0 rows affected (0.00 sec)

Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table jsb_2\G                                #删除后

*************************** 1. row ***************************

Table: jsb_2

Create Table: CREATE TABLE `jsb_2` (

`id` int(11) NOT NULL,

`name` varchar(22) NOT NULL,

`deptld` int(15) DEFAULT NULL,

PRIMARY KEY (`id`),

KEY `aaa` (`deptld`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.00 sec)

五、MySQL 内外连接查询

1、MySQL INNER JOIN :内连接查询

关键字:inner join on

---------------############------  先做环境

使用之前创建的yg 表 创建一个 yy表

mysql> create table yy(姓名 varchar(20),身份证 varchar(20),UID int(20));

Query OK, 0 rows affected (0.00 sec)

写入数据

mysql> insert into yy values('小i',1111111111,110),('小乔',222277,210),('迪斯科',33333,10),('蒙牛',454545454,25);

Query OK, 4 rows affected (0.00 sec)

Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from yy ;

+-----------+------------+------+

| 姓名      | 身份证     | UID  |

+-----------+------------+------+

| 小i       | 1111111111 |  110 |

| 小乔      | 222277     |  210 |

| 迪斯科    | 33333      |   10 |

| 蒙牛      | 454545454  |   25 |

+-----------+------------+------+

4 rows in set (0.00 sec)

内连接:在查询中设置连接条件的方式,来移动查询结果集中某些数据行后的交叉连接

简单说就是:查询的结果为两表的公共部分

格式:select 表名称2.字段1,表名称1.字段2,表名称1.字段3 from 表名称1 inner join 表名称2 on 表名称2.字段1 = 表名称1.字段1;

注意:如果这样写:select 姓名,职业 .....   会报错显示 in field list is ambiguous(字段不明确)需要完全限定表名 表名.字段1

例:在 yg 表和 yy表中查询出两个表的  姓名 字段一致的 姓名

mysql> select yy.UID,yg.姓名,yg.职业,yg.工资 from yg inner join yy on yy.姓名 = yg.姓名;

+------+--------+-----------------+--------+

| UID  | 姓名   | 职业            | 工资   |

+------+--------+-----------------+--------+

|  110 | 小i    | 云计算          |   1000 |

|  210 | 小乔   | IT工程师        |   1000 |

|   25 | 蒙牛   | apache工程师    |   1000 |

+------+--------+-----------------+--------+

3 rows in set (0.00 sec)

2、MySQL LEFT/RIGHT JOIN:外连接查询

外连接:先将连接的表分为基表和参考表,再以基表为依据返回满足和不满足条件的记录

外连接更加注重两张表之间的关系;按照连接表的顺序,可以分为左连接和右连接

2.1、左连接查询 left join

关键字:left join on / left outer join on

左外连接:左表数据不动,右边表的数据往左表上去添加,不管是否找到,都将显示左边表中全部记录

格式:select * from 表1 left join 表2 on 表名称1.字段1=表名称2.字段1;

mysql> select * from yg left join yy on yg.姓名=yy.姓名;

+-----------------+-----------+--------+--------+--------+--------+--------+------------+------+

| 职业            |  姓名      | 生日   |  编号   |  学历  |  工资   |  姓名  |   身份证   | UID  |

+-----------------+-----------+--------+--------+--------+--------+--------+------------+------+

| 云计算          | 小i       |   NULL |    180 | 本科   |   1000 | 小i    | 1111111111 |  110 |

| IT工程师        | 小乔      |   NULL |    170 | 大专   |   1000 | 小乔   | 222277     |  210 |

| apache工程师    | 蒙牛      |   NULL |    666 | 高中   |   1000 | 蒙牛   | 454545454  |   25 |

| 云计算          | 小V       |   NULL |    220 | 初中   |   1000 | NULL   | NULL       | NULL |

| java工程师      | 王小红    |   NULL |    200 | 高中   |   1000 | NULL   | NULL       | NULL |

| 云计算          | 小光      |   NULL |    100 | 本科   |   1000 | NULL   | NULL       | NULL |

+-----------------+-----------+--------+--------+--------+--------+--------+------------+------+

6 rows in set (0.00 sec)

2.2、右连接 right join

关键字:right join on / right outer join on

右外连接:用右边表去左边表查询对应记录,不管是否找到,右边表全部记录都将显示

格式: select * from 表1 right outer join 表2 on 表名称1.字段1=表名称2.字段1;

mysql> select * from yg right outer join yy on yy.姓名=yg.姓名;

+-----------------+--------+--------+--------+--------+--------+-----------+------------+------+

| 职业            | 姓名   | 生日   | 编号   | 学历   | 工资   | 姓名      | 身份证     | UID  |

+-----------------+--------+--------+--------+--------+--------+-----------+------------+------+

| 云计算          | 小i    |   NULL |    180 | 本科   |   1000 | 小i       | 1111111111 |  110 |

| IT工程师        | 小乔   |   NULL |    170 | 大专   |   1000 | 小乔      | 222277     |  210 |

| apache工程师    | 蒙牛   |   NULL |    666 | 高中   |   1000 | 蒙牛      | 454545454  |   25 |

| NULL            | NULL   |   NULL |   NULL | NULL   |   NULL | 迪斯科    | 33333      |   10 |

+-----------------+--------+--------+--------+--------+--------+-----------+------------+------+

4 rows in set (0.00 sec)

MySQL锁

锁概述

MySQL的锁的机制,就是数据库为了保证数据的一致性而设计的面对并发场景的一种规则。

最显著的特点是不同的存储引擎支持不同的锁机制,InnoDB支持行锁和表锁,MyISAM支持表锁。

表锁就是把整张表锁起来,特点是加锁快,开销小,不会出现死锁,锁力度大,发生锁冲突的概率高,并发相对较低。

行锁就是以行为单位把数据锁起来,特点加锁慢,开销大,会出现死锁,锁力度小,发生锁冲突的概率低,并发度也相对表锁较高

死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方占用的资源,从而导致恶性循环

行锁增加了系统的开销,要比表锁系统开销大

当事务试图以不同的顺序锁定资源时,就可能产生死锁。多个事务同时锁定同一个资源时也可能产生死锁

MySQL视图触发器存储过程内外链接数据锁相关推荐

  1. mysql 视图触发器,MySql视图触发器存储过程详解

    一个临时表被反复使用的时候,对这个临时表起一个别名,方便以后使用,就可以创建一个视图,别名就是视图的名称.视图只是一个虚拟的表,其中的数据是动态的从物理表中读出来的,所以物理表的变更回改变视图. 创建 ...

  2. day29 | 黑马程序员Java全程笔记 | 第二阶段MySQL高级事务-索引-视图-触发器-存储过程

    目录 01.反馈 02.回顾 03.并发访问MySQL-问题概述 并发访问的问题 04.并发访问MySQL-问题演示 05.并发访问MySQL-read-committed解决脏读问题 06.并发访问 ...

  3. mysql存储过程结构体_八、mysql视图、存储过程、函数以及时间调度器

    1.create or replace view emp_view as select * fromt4 ;给t4表创建一个名为emp_view的视图2.drop viewemp_view 删除视图= ...

  4. mysql 视图调用存储过程_MySQL视图、存储过程

    在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 什么是视图(视图) 虚拟表 内容类似于真实表,有字段和记录 该视图不以数据库中存储的数据的形式存在 行和列的数据来自 ...

  5. mysql视图及存储过程

    目录 mysql之视图 前言 理解: 视图语句 表用例-student 视图检查选项 举例: 注意: 视图的更新 视图的作用 mysql之存储过程 存储过程定义 存储过程的特性 关于存储过程的创建及删 ...

  6. mysql视图执行原理_MySql中的视图 触发器 存储过程,以及事物

    视图: 一个临时表被反复使用的时候,对这个临时表起一个别名,方便以后使用,就可以创建一个视图,别名就是视图的名称.视图只是一个虚拟的表,其中的数据是动态的从物理表中读出来的,所以物理表的变更回改变视图 ...

  7. MySQL视图,触发器,事务,存储过程,函数

    create triggr triafterinsertcmdlog after insert on cmd_log FOR EACH ROW trigger_body .#NEW : 代表新的记录 ...

  8. mysql 视图 事务 存储过程 触发器 __ 邓治安

    视图 View 逻辑上的虚拟表 #创建视图 CREATE VIEW s_t(编号,姓名,性别,出生日期) AS SELECT * FROM student WITH CHECK OPTION#查询视图 ...

  9. mysql 视图 事务 存储过程 触发器——龙腾

    视图 View 逻辑上的虚拟表 #创建视图 CREATE VIEW s_t(编号,姓名,性别,出生日期) AS SELECT * FROM student WITH CHECK OPTION#查询视图 ...

最新文章

  1. 自动驾驶的视觉感知包括哪些内容?
  2. php yof框架特点_腾讯正式开源高性能超轻量级 PHP 框架 Biny
  3. Linux各版本完整发展图
  4. 躺平设计家“造风” 阿里家装数字化加速“入海”
  5. button 样式_实战PyQt5: 111-可以使用QSS样式表的部件
  6. Echart在Openlayers的应用
  7. 新东方雅思词汇---6.1、oppose
  8. 性能建议(这里只针对单机版redis持久化做性能建议)
  9. 推荐几个机器学习算法及应用领域相关的中国大牛:
  10. 【JAVA 第五章 】课后习题 删除奇数元素下标 然后再删除值为奇数的下标
  11. php pdo批量操作,PDO使用二维数组批量操作MYSQL数据库
  12. 2017ACM/ICPC广西邀请赛题解
  13. 智课雅思词汇---一、如何学英语
  14. 项目质量管理的几种常规方法
  15. Visual Paradigm下载并设置中文
  16. VR餐厅全新思路,可以为餐饮行业带来哪些好处?
  17. java 双列集合Map 万字详解
  18. vue中的@keyup事件
  19. 国内计算机类学术期刊投稿指南
  20. springboot毕设项目在线智能办公系统bxl9i(java+VUE+Mybatis+Maven+Mysql)

热门文章

  1. 桥梁主动防撞预警系统实现形式
  2. 企业如何两步实现数据资产化?
  3. Java基础之删除list中的某个元素
  4. 几种垃圾收集器对比及使用场景
  5. jquery 中$.ajax().done() 的用法
  6. 52ABP前端升级2.0.x指南
  7. win8找回linux ubuntu 和 用win8引导linxu ubuntu
  8. java创建多线程的四种方式
  9. IDEA常用快捷键及修改快捷键
  10. 【心理学】具备情感色彩的文学作品(尤其是悲剧作品),能显著的提高共情能力