mysql数据对象

学习目标:

  • 了解掌握常见的几种数据库对象
  • 学会如何创建具体的数据对象
mysql 常见的数据对象有哪些:
  • DataBase/Schema
  • Table
  • Index
  • View/Trigger/Function/Procedure
多Database用途:
  • 业务的隔离
  • 资源的隔离
表上的常用数据对象:
  • 索引
  • 约束
  • 视图,触发器,函数,存储过程
索引

什么是数据库索引:
索引就是数据库中数据的目录:
索引和数据时两个对象
索引主要是用来提高数据库的查询效率
数据库中数据变更同样需要同步索引数据的变更,
因为索引是按照B+TREE,排好位置的,一旦数据变化,则这个数据的相应位置也要变化,
这样之后再查找,才能快速索引到,而变化位置就是索引的维护;
查看某个数据库命令:
mysql> help create index
Name: 'CREATE INDEX'
Description:
Syntax:
CREATE [ONLINE|OFFLINE] [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name[index_type]ON tbl_name (index_col_name,...)[index_option] ..
UNIQUE:唯一索引(用户表的ID,手机号等,唯一信息)
SPATIAL:地理位置索引(搜索周边有哪些人)
两种创建索引及查看表中索引的方法
mysql> select * from vc;
+------+------+
| v    | c    |
+------+------+
| AB   | AB   |
+------+------+
1 row in set (0.00 sec)mysql> create index idx_v on vc(v);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> alter table vc add KEY idx_c (c);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> show index from vc;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| vc    |          1 | idx_v    |            1 | v           | A         |           1 |     NULL | NULL   | YES  | BTREE      |         |               |
| vc    |          1 | idx_c    |            1 | c           | A         |           1 |     NULL | NULL   | YES  | BTREE      |         |               |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)mysql> show create table vc;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                   |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| vc    | CREATE TABLE `vc` (`v` varchar(5) DEFAULT NULL,`c` char(5) DEFAULT NULL,KEY `idx_v` (`v`),KEY `idx_c` (`c`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
在mysql中 INDEX 和KEY 都代表了索引;
约束

约束:
唯一约束: unique
外键约束: CONSTRAINT
创建唯一约束(唯一索引可以促成唯一约束):
  • 唯一约束是一种特殊的索引
  • 唯一约束可以是一个或者多个字段
  • 位于约束可以在建表的时候建好,也可以后面补上
  • 主键也是一种唯一约束

 

索引有哪些:
  • 主键索引  ID
  • 单键索引  orderid
  • 单键索引  bookid
  • 组合索引 (userid + orderid)
唯一约束有哪些:
  • 主键约束           ID
  • 单键唯一索引     orderid
  • 组合唯一索引     userid+orderid
添加唯一约束
添加主键索引: 
mysql> alter table order add primary key (id)
#实际上是给主键id增加了一个索引,而这个索引又是唯一的所以就这个索引就变成了唯一约束
添加唯一索引:
mysql>alter table order add unique key idx_uk_orderid(id)
外键约束
将两张表的数据通过某种条件关联起来
例子:买东西,订单表,用户信息表;
如果没有外键约束:可能存在不存在用户也能下单成功;
而如果使用外键约束,则在数据库层面是的不存在的用户不能下单成功。
创建外键约束:
将用户表和订单表通过外键关联起来:
mysql > alter table order add CONSTRAINT constarint_uid FOREIGN KEY (userid) REFERENCES user(userid)
创建外键约束的时候,可以指定在删除,更新父表(被参照的表)时,对子表(做外键关联的表)
进行的相应操作,包括可:restrict(限制),cascade(串联),set null 和 no action。
其中restrict和 no action 相同,是指限制在子表有关联记录的情况下,父表不能更新;
cascade表示父表在更新或删除时,更新或者删除子表对应的记录;
set null 表示父表在更新或者删除时子表的对应字段被set null。
选择后两种方式的时候要谨慎,可能会因为错误的操作导致数据的丢失。
在执行LOAD DATA和 ALTER TABLE 操作的时候,为了加快速度,可以暂时关闭外键约束: set foreign key_checks =0;等完成之后再开启:set foreign key_checks =1
mysql > alter table order add CONSTRAINT constarint_uid FOREIGN KEY (userid) REFERENCES user(userid) on delete restrict on update cascade
on update cascade例子: 
mysql> select * from c_A;
+----+------+
| id | age  |
+----+------+
|  1 |   22 |
|  2 |    3 |
|  3 |    4 |
+----+------+
3 rows in set (0.00 sec)mysql> select * from c_B;
+----+------+
| id | age  |
+----+------+
|  1 |    2 |
|  2 |   33 |
|  3 |    4 |
+----+------+
3 rows in set (0.00 sec)mysql> update c_B set id=11 where age = 2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from c_B;
+----+------+
| id | age  |
+----+------+
|  2 |   33 |
|  3 |    4 |
| 11 |    2 |
+----+------+
3 rows in set (0.00 sec)mysql> select * from c_A;
+----+------+
| id | age  |
+----+------+
|  2 |    3 |
|  3 |    4 |
| 11 |   22 |
+----+------+
3 rows in set (0.00 sec)
注意:外键约束更改的只是约束的那个字段;
on delete cascade
on delete cascadeinsertupdatedelete
parentyes只能更改子表中约束字段没有的值yes
child只能插入父表中约束字段有的值;只能更改父表中约束字段没有的值 yes
on update cascade
on update cascadeinsertupdatedelete
parentyesyes只能删子表中约束字段没有的值;
child只能插入父表中约束字段有的值;只能更新父表中约束字段没有的值 yes
可以见child只能删除,其余都受限余父表的约束字段;
而parent都能插入,但其中一条受限于子表约束字段;
给order表增加了一个约束,(CONSTRAINT,约束的关键词)约束名 constarint_uid;
他是一个外键约束且order表中userid是外键,把order表中的userid 关联 到  user表的userid;
使用外键的注意事项:
  • 必须是innodb表,其他引擎不支持外键
  • 相互约束的字段类型必须要一样
  • 主表的约束字段要求有索引(上面的例子中,user表就是主表,所以在user表中要userid要求加上索引 )
  • 约束名称必须要唯一,即使不在一张表上(constarint_uid 在整个库中是唯一的)
删除一个约束:
mysql> alter table order drop FOREIGN KEY constarint_uid;

 

视图view

view作用:
  • 视图将一组查询语句构成的结果集,是一种虚拟结构,并不是实际数据
  • 视图能简化数据库的访问,能够将多个查询语句结构化为一个虚拟结构
  • 视图可以隐藏数据库后端表结构,提高数据库的安全性
  • 视图也是一种权限管理,只对用户提供部分数据
创建一个已完成订单的视图:
mysql > create view order_view as select * from order where status = 1
视图例子:
mysql> CREATE TABLE t (qty INT, price INT);
mysql> INSERT INTO t VALUES(3, 50);
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
mysql> SELECT * FROM v;
+------+-------+-------+
| qty  | price | value |
+------+-------+-------+
|    3 |    50 |   150 |
+------+-------+-------+

 

触发器

触发器
是什么:
触发器是加在表上的特殊程序,当表上出现特定的事件
(insert/update/delete/alter table)时触发该程序执行。
对一个表的一个事件mysql中只能定义一个触发器
做什么:
  • 数据订正;
  • 迁移表;
  • 实现特定的业务逻辑;
触发器有两个用户:
  • 执行者
  • 调用者  
触发器--基本语法
CREATE
[DEFINER = {user | CURRENT_USER}]     -- 定义执行着的权限
TRIGGER trigger_name trigger_time
trigger_event ON tbl_name
FOR EACH ROW                                    --涉及的每一行都会执行trigger_body
trigger_body  ttrigger_time:{BEFORE | AFTER}
trigger_event:{INSERT | UPDATE | DELETE}
delimiter
结束符的设定,默认是分号。但是在触发器应为要执行一组SQL,会出现分号所以讲结束符 设定一下;

 

NEW,OLD来引用触发器中发生变化的记录内容
触发触发器的顺序:
before 触发器,行操作,after 触发器;其中任何一个步骤操作发生错误都不会继续执行剩下的操作。
如果是对事务表进行的操作,那么会整个作为一个事务被回滚(rollback),但是如果是对非事务表进行的操作
,那么已经更新的记录将无法回滚,这也是设计触发器的时候需要注意得问题。
触发器的特点:
  • 触发器对性能有损耗,应慎用
  • 同一类事件在一个表中只能创建一次
  • 对于事务表,触发器执行失败则整个语句回滚
  • row格式主从复制,触发器不会在从属库上执行
  • 使用触发器时应该防止递归执行
可以协助应用在数据库端确保数据的完整性。
存储过程

定义:存储过程是存储在数据库端的一组SQL语句集,用户可以通过存储过程名和传参多次调用的程序模块。
特点:
  • 使用灵活,可以使用流控制语句,自定义变量等完成复杂的业务逻辑
  • 提高数据安全性,屏蔽应用程序直接对表的操作,易于进行审计
  • 减少网络传输
  • 提高代码维护的复杂度,实际使用中要评估场景是否适合
存储过程--基本语法
CREATE [ DEFINER = { user | CURRENT_USER } ]                 --定义执行着的权限PROCEDURE  sp_name ( [ proc_parameter[ ,... ] ] )[ characteristic .. ]  routine_bodyproc_parameter:[ IN | OUT | INOUT]  param_name  typetype:Any valid MySQL data type

 

IN:输入参数,表示该参数值在调用存储过程中已经指定好了,在调用存储过程中修改该参数不会返回
OUT:输出参数,可以在存储过程内部被改变,可以返回
INOUT:输入输出参数;
characteristic:
COMMENT 'string'                    --注释
| [NOT] DETERMINISTIC          --是否会返回确定值
routine_body:
Valid SQL routine statement    --与trigger类似

 

 
重点:
  • 中间变量定义:DECLARE
  • 流控制语句
  • 参数传入
查询:数据库中有哪些存储过程
mysql> show PROCEDURE STATUS ;
查看:某个触发器的详情
mysql> SHOW TRIGGER STATUS ;

 

存储过程的使用:
1.设置参数值:
mysql> set @total = 5;
mysql> set @res = 0;
2.调用存储过程:
mysql> call proc_test1(@total,@res);
3.查看返回值:
mysql> select @res
删除存储过程或者函数:
DROP {PROCEDURE | FUNCTION}  [IF  EXISTS]  sp_name
查看存储过程或者函数
SHOW {procedure | function}  status like ‘file_in_stock’
查看存储过程或者函数的定义
show  create {procedure |  function}  sp_name
存储过程-流控制语言

 

自定义函数
  • 自定义函数与存储过程类似,但是必须带有返回值
  • 自定义函数与sum(),max(),等mysql原生函数使用方法类似: select func(val); select * from tbl where col = func(val)
  • 由于自定义函数可能在遍历数据中使用,要注意性能损耗
自定义函数-基本语法
最终通过RETURN;
调用
mysql> select func_test1(4);
确认权限:
创建存储过程或者函数需要:create  routine
修改或者删除存储过程需要:alter  routine
执行存储过程 需要 :           execute 
可以嵌套使用;
小结

  • 触发器和存储过程不利于水平扩展,多用于统计和运维操作中;
  • 还有代码管理维护成本比较高;
  • 但是:
    • 简化应用开发,减少数据传输,提高处理效率;
总结

  •  索引的创建于查看
  •  约束:
    •   唯一约束,
    • 外键约束:
      • alter table order add CONSTRAINT constarint_uid FOREIGN KEY (userid) REFERENCES user(userid);
      • 外键约束四种模式:restrict,no action,set null,cascade;
  •  VIEW
  •  TIGGER:
    • 一个表的一个事件只能定义一个触发器
    • delimiter //
    • NEW.age  OLD.age
  •  PROCEDURE:
    • DECLARE,
    • 参数传入返回
    • 流控制语言
    • 使用三步骤
      • 初始化参数
      • 调用存储过程
      • 查看放回值
  •  function:
    • 必须带有返回值
    • 使用select func_test1(14);
  •  SUBSTRING( goods_name,1,5 ):从位置1截取goods_name5个字符
  •  A rigth join B on..:B显示B中null字段;

转载于:https://www.cnblogs.com/Aiapple/p/5686184.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/490290.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

赛迪研究院发布《2019量子计算发展白皮书》

来源:赛迪智库经国务院正式批准,由湖南省人民政府、工业和信息化部联合主办,中国电子信息产业发展研究院(简称“赛迪研究院”)、湖南省工业和信息化厅、长沙市人民政府承办的“2019世界计算机大会”在长沙召开。赛迪智…

安卓虚拟摄像头_iPhone 的「第四颗摄像头」位置,为什么给了激光雷达?

一个,两个,三个,四个…… 旗舰手机摄像头从 2016 年开始,以大约每年 1 个摄像头的数量在增长,有人调侃说麻将「八筒」将是所有智能手机摄像头的终极归宿。今年全新一代 iPhone 发布前,不少人推测 iPhone 12…

关于边缘计算和边云协同,看这一篇就够了~

来源:Deloitte物联网智库 编译导 读几年前,大多数人都期望将物联网部署至云端,这的确可以给个人用户带来便捷的使用体验,但构建企业级的物联网解决方案,仍然需要采用云计算和边缘计算的结合方案。与纯粹的云端解决方案…

ospf hello时间和dead_网络工程师_思科 | OSPF由简到难,配合命令学

交换机工作原理:基于源mac学习,基于目的mac转发。路由器的工作原理:收到一个数据包,拆掉帧头,拆开ip包头,提取目的ip地址,查找自己的路由表,有路由,转发,没有…

《自然》深度:中国AI能在2030年制霸世界吗?

来源:智东西,nature中国不仅拥有世界上最多的人口,而且即将成为最大的经济体,并且在人工智能(AI)方面也有着领先世界的野心。2017年,中国政府制定了《新一代人工智能发展规划》,对人工智能发展进…

object-c 代理反向传值

A.h A.m B.h B.m 转载于:https://www.cnblogs.com/ChouDanDan/p/5692578.html

群晖pxe安装windows_使用win-server2016 进行 pxe 网络装机

首先,安装 windows server 2016此处省略若干字..........安装完成后,将网络设置成桥接模式,并为物理机网卡配置一个静态ip为server16 设置静态ip(要和物理机处于同一网段)c打开开始菜单-->服务器管理器(默认会弹出)2.选择添加角色3.一直点下一步,选择安装DHCP和Windows部署服…

CNCC技术论坛丨联邦学习冲刺人工智能“最后一公里”!

来源:中国计算机学会本论坛将于 CNCC2019 中国计算机大会第一天(10月17日)在苏州金鸡湖国际会议中心 A305 会议室举行,探讨号称人工智能“最后一公里”的联邦学习,届时业内专家将会碰撞出什么样的火花呢?敬…

javascript语法速查表

转载于:https://www.cnblogs.com/diantao/p/5693877.html

中国芯片将靠此超车!RISC-V架构神在哪全解构

来源: 智东西RISC-V(发音为“risk-five”)是一个基于精简指令集(RISC)原则的开源指令集架构(ISA),简易解释为开源软件运动相对应的一种“开源硬件”。该项目2010年始于加州大学伯克利…

Petya and Staircases CF212div.2B

http://codeforces.com/problemset/problem/362/B 水题。 1 #include<cstdio>2 #include<iostream>3 #include<cstring>4 #include<algorithm>5 using namespace std;6 int a[5000];7 int main()8 {9 int n,m,i; 10 scanf("%d%d",&a…

托马斯·弗里德曼:美政府应研究任正非的提议

托马斯弗里德曼来源&#xff1a;参考消息参考消息网9月12日报道美国《纽约时报》专栏作家托马斯弗里德曼近日接受华为创始人任正非的邀请&#xff0c;到公司深圳总部对他进行采访。弗里德曼在之后发表于《纽约时报》的题为《华为拥有帮助结束其与特朗普的战争的计划》的文章中介…

刚安装完的ubuntu安装谷歌浏览器

首先去官网下载安装包 接着打开终端&#xff0c;输入 sudo dpkg -i google-chrome-stable_current_amd64.deb&#xff08;你的安装包名称&#xff09; 刚装好的ubuntu一般会安装不成功&#xff0c;会出现如下提示&#xff1a; 这时候需要通过输入以下命令来修复依赖关系 ap…

【机器视觉】探索机器学习理论的最新进展,走近云、端、芯上的视觉计算

来源&#xff1a;产业智能官1909 年&#xff0c;莱特兄弟通过纯粹的工程方法首次把飞机送上了天&#xff0c;但彼时的他们并不了解其中的原理。如今&#xff0c;经过几十年的发展&#xff0c;飞机的性能较之当年已然不可同日而语。究其原因&#xff0c;主要在于上世纪四五十年代…

usb转232线驱动_为什么越来越多人用USB,却不用RS232?USB有什么好?

RS-232和USB都是串行通信&#xff0c;但是无论是基础信号&#xff0c;电平定义&#xff0c;机械连接模式还是数据格式&#xff0c;通信协议等&#xff0c;两者都完全不同。RS-232是流行的接口。在MS-DOS中&#xff0c;四个串行接口称为COM1&#xff0c;COM2&#xff0c;COM3和C…

python爬取的内容不是中午_大年初六中午,全国各区县哪里最冷?

作者&#xff1a;国服帅座 经济学在读硕士知乎专栏&#xff1a;https://zhuanlan.zhihu.com/c_1051263791760863232认识高德地图API在先前的文章中&#xff0c;我们曾了解过如何在高德地图上爬取某地未来三日的天气预报情况。在本文中&#xff0c;我们要使用的是同一个API&…

ASML的光刻机霸主之路

来源&#xff1a;半导体行业观察半导体制造产业中&#xff0c;光刻机是核心设备&#xff0c;对芯片的工艺制程起着决定性作用。光刻是半导 体芯片生产流程中最复杂、最关键的工艺步骤&#xff0c;耗时长、成本高。半导体芯片生产的难点和关键点在于将电路图从掩模上转移至硅片上…

金昌搜索引擎优化网络推广_网络推广优化企业服务

网络推广优化企业服务seo优化先后有三层,主要针对后台搜索&#xff0c;在后台上直接自己做网页搜索&#xff0c;seo优化时前后左右都会出现搜索问题。seo优化我们下面再讲一下在seo优化时一般常用的方法。互联网可以在时间和空间上运用电脑&#xff0c;运用更多的人和信息&…

【学界】深度学习如何影响运筹学?

来源&#xff1a;运筹OR帷幄前言最近看到一篇回答&#xff0c;YouTube 已将视频推荐全面改用深度学习实现。但传统上&#xff0c;推荐系统落在运筹学的范畴&#xff0c;可以归结为一个矩阵补全&#xff08;matrix completion&#xff09;问题&#xff0c;用半正定规划&#xff…

抠像噪点去除 unity_这个在线抠图工具,好用又免费,告别Photoshop繁杂操作

对于经常处理图像的人来说&#xff0c;抠图可以算得上一个非常重要的技能&#xff0c;不少时候抠图的过程是非常的繁杂的。说到抠图&#xff0c;相信很多人首先想到的是Photoshop&#xff0c;确实如果说到图像处理&#xff0c;photoshop的确算得上是最为专业的软件&#xff0c;…