mysql视图 触发器 存储过程 外键 内连接及左外链接、右外连接 数据锁 创建及使用的相关语法

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 dgf after delete on s1 for each row
-> insert into it values(‘架构师’,‘段郭锋’,‘150404199201091132’,‘海归’,‘10000’);

查看触发器

mysql> show triggers\G;

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

存储过程
MySQL数据库在5.0版本后开始支持存储过程
什么是存储过程
咱在mysql中敲sql语句的时候,是一行一行的敲,那么存储过程就好比,咱把多条sql语句放到存储过程之中,然后再去执行这个存储过程
类似于函数(方法),简单的说存储过程是为了完成某个数据库中的特定功能而编写的语句集合,该语句集包括SQL语句(对数据的增删改查)、条件语句和循环语句等。
存储过程有什么优点和缺点
1、存储过程增强了SQL语言灵活性。
存储过程可以使用控制语句编写,可以完成复杂的判断和较复杂的运算,有很强的灵活性;
2、减少网络流量,降低了网络负载。
存储过程在服务器端创建成功后,只需要调用该存储过程即可,而传统的做法是每次都将大量的SQL语句通过网络发送至数据库服务器端然后再执行
3、存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译。
一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
缺点:
1、扩展功能不方便
2、不便于系统后期维护

创建不带参数的存储过程
【实例 1】创建名称为 ShowStuScore 的存储过程,存储过程的作用是从it表中查询学生的成绩信息,输入的 SQL 语句和执行过程如下所示。
mysql> DELIMITER //
mysql> CREATE PROCEDURE ShowStuScore()
-> BEGIN
-> SELECT * FROM it;
-> END //
Query OK, 0 rows affected (0.09 sec)

创建存储过程 ShowStuScore 后,通过 CALL 语句调用该存储过程的 SQL 语句和执行结果如下所示。
mysql> CALL ShowStuScore();

创建带参数的存储过程
【实例 2】创建名称为 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外键约束(FOREIGN KEY)
MySQL 外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。

在设置外键的时候,要有两张表,其中一个表是主表(父表)、另外一张表是从表(子表),到底谁是主表,谁是从表呢?
主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表。
从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表。

外键是表的一个字段,不是本表的主键,但对应另一个表的主键。定义外键后,不允许删除另一个表中具有关联关系的行。
外键的主要作用是保持数据的一致性、完整性。例如,部门表 tb_dept 的主键是 id,在员工表 tb_emp5 中有一个键 deptId 与这个 id 关联
在创建表时设置外键约束
在数据表中创建外键使用 FOREIGN KEY 关键字,具体的语法规则如下:
[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]
REFERENCES <主表名> 主键列1 [,主键列2,…]
其中:外键名为定义的外键约束的名称,一个表中不能有相同名称的外键;字段名表示子表需要添加外健约束的字段列;主表名即被子表外键所依赖的表的名称;主键列表示主表中定义的主键列或者列组合。
实例
创建 bumen 的 SQL 语句运行结果如下所示。
mysql> CREATE TABLE bumen
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(22) NOT NULL,
-> location VARCHAR(50)
-> );
Query OK, 0 rows affected (0.37 sec)
创建数据表 gongzi,并在表 gongzi 上创建外键约束,让它的键 deptId 作为外键关联到表 bumen 的主键 id,输入的 SQL 语句和运行结果如下所示。
mysql> CREATE TABLE gongzi
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT,
-> CONSTRAINT waijian
-> FOREIGN KEY(deptId) REFERENCES bumen(id)
-> );
Query OK, 0 rows affected (0.37 sec)
mysql> DESC gongzi;
在修改表时添加外键约束
在修改数据表时添加外键约束的语法规则为:
ALTER TABLE <数据表名> ADD CONSTRAINT <索引名>
FOREIGN KEY(<列名>) REFERENCES <主表名> (<列名>);
【实例 2】修改数据表 gongzi,将字段 deptId 设置为外键,与数据表 bumen 的主键 id 进行关联,输入的 SQL 语句和运行结果如下所示。
mysql> ALTER TABLE gongzi
-> ADD CONSTRAINT waijian
-> FOREIGN KEY(deptId)
-> REFERENCES bumen(id);
Query OK, 0 rows affected (1.38 sec)

Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE gongzi\G

删除外键约束
对于数据库中定义的外键,如果不再需要,可以将其删除。外键一旦删除,就会解除主表和从表间的关联关系,MySQL 中删除外键的语法格式如下:
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;
【实例 3】删除数据表 gongzi 中的外键约束 waijian,输入的 SQL 语句和运行结果如下所示。
mysql> ALTER TABLE gongzi
-> DROP FOREIGN KEY waijian;

内连接 左外右外
**mysql> create table money(id int,name varchar(20),age int);
insert into money values(1,“刘备”,45),(2,“关羽”,43),(3,“张飞”,43);
mysql> create table bingqi(id int,name varchar(20),bingqi varchar(60));
insert into bingqi values(1,“刘备”,“双股剑”),(2,“关羽”,“青龙偃月刀”),(3,“张飞”,“丈八蛇矛”);

mysql> alter table bingqi drop name;

mysql> select name,bingqi from money,bingqi WHERE money.id=bingqi.id;**

查询
mysql> select name,bingqi from money INNER JOIN bingqi on money.id=bingqi.id; 内连接
mysql> insert into money values(4,“吕布”,30);
mysql> select name,bingqi from money m left outer join bingqi b on m.id=b.id; 左外
mysql> select name,bingqi from money m right outer join bingqi b on m.id=b.id;
右外

总结:从上边的输出可以看出来,左外链接以左表为主,右外链接以右表为主

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值