mysql中常见的数据库对象
表( TABLE)
概念:表(TABLE) ,有行有列,行又叫做记录,指的是表中的数据;列又叫做属性/字段
备份表:在数据库中创建临时备份表
语法:CREATE TABLE 表名 AS SELECT * FROM 表名 [WHERE 查询条件];
例如:CREATE TABLE tmp_emp AS SELECT * FROM emp WHERE deptno=20;
DESC tmp_emp; --查询临时表属性
SELECT * FROM tmp_emp; --查询临时表数据信息
结论:临时表不会继承原表的主外键约束,但是表结构和表数据都是一样的
备注:不建议创建比较多的临时表在数据库中,会影响数据库的空间
最后:DROP TABLE tmp_emp; --(删除临时表)
视图(VIEW)
概念:视图(view),是一种虚拟的表,具有和物理表相同的功能,视图可以进行编辑,但 是对基本表示没有影响的,作用就是可以很好的保护数据的隐私,同时让复杂的查询 变得简单。
比如:出于数据安全考虑,跟对接系统数据交互,出于数据安全考虑只对外暴露部分 数据,就可以创建一个视图,把要对外开放的数据放在视图中,让别人之间访问视图 就好。
语法:CREATE VIEW 视图名 AS
例如:查询王五的选课情况(课程老师,课时,课程名称等等)
正常比较复杂的查询语句:
SELECT cname,chour,tname FROM course WHERE cid IN(
SELECT cid FROM score WHERE sid=(
SELECT sid FROM student WHERE sname='王五'));
把查询的数据放在视图当中,以后需要查询就直接从视图中获取,不让别人看到其它信息:
CREATE VIEW v0722 AS SELECT cname,chour,tname FROM course WHERE cid IN(
SELECT cid FROM score WHERE sid=(
SELECT sid FROM student WHERE sname='王五'));
后期需要王五的选课信息,就直接从视图 v0722中查询获取,效率肯定快,另外别人也看不了其它的信息,例如:
SELECT * FROM v0722;
索引(INDEX)
概念:索引(INDEX)就是来加快搜索速度的,是优化数据库查询效率的常见方法之一。
索引加快了数据库检索的速度,但是降低了 插入、删除、修改等维护类的编辑任务 的执行速度
索引的本质是牺牲了空间换取了速度
索引一般都是添加在具体的列上面,针对了大批量数据查询才有效果,有时候,因为代码需要,会添加联合索引。
order by即distinc或是like等,都不会使用索引。也就是说,索引对于他们是无效的。
语法:CREATE INDEX 索引名 ON 表名(列名);
例如:CREATE INDEX idx_emp_ename ON EMP(ename); ---(创建索引)
SELECT *FROM EMP WHERE ename='SMITH'; ---(只要数据库认为可以使用某个 已经创建的索引,索引就会自动运用。)
删除索引: DROP INDEX 名称 ON 表名;
例如:DROP INDEX idx_emp_ename ON EMP;
存储过程(PROCEDURE)
概念:是一的复杂的程序,以便于外部程序或者其他应用程序对数据进行调用的数据库对象。种在数据库中存储
简单的说:存储过程就是在数据库中写代码,目的就是完成特定任务或者功能所组成的 SQL集合,是一个语句集,经过编译存储在数据库中,可以指定用户对其进行调用,提升效率。
优点:可封装,可校验,可回传,可隐藏复杂的商业逻辑,可以被调用,简化程序开发等等
缺点:对数据库的依赖很大,定制化于特定的数据库上;复用率很低 ;不能使用 SELECT 指令执行,它是子程序
语法:前提:进入数据库,保证可以使用正常的存储过程执行SQL命令
1、修改 mysql 的界定符(语句结束符)
DELIMITER // 或者 DELIMITER $$
2、创建存储过程
CREATE PROCEDURE 名字([参数类型] 参数名 数据类型,[参数类型] 参数名 数据类型,...)
BEGIN
过程体;
END;
// # 不加也没关系,会自动恢复
3、调用存储过程;
CALL 过程名称();
DROP PROCEDURE 名字; -- 命令删除名字后不加(),也可以选中左侧导航右键删除
1、存储过程的参数:
mysql 中参数的定义,一共支持三种类型: IN OUT INOUT
IN:输入参数,表示调用者向过程传入值(可以是具体的值,也可以是变量)
OUT:输出参数:表示调用者向过程传出值(可以返回多个值,但是传出的值 只能是变量)
INOUT: 输入输出参数,表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
建议: 输入值就用 IN 参数
输出值就只用 OUT 参数
INOUT 参数尽量少用
注意:存储过程支持没有参数,即使没有参数,但是过程后面的()必须要有,不可以省略
参数的名字不能等于列名,否则在执行的过程当中,会被当做整个列来处理。
2、过程体:
由合法的 SQL 语句构成,即 SQL 命令集,可执行,过程体包含了过程调用执行的 所有的 SQL 语句 ;
例如: DQL 、DML、if-THEN-ELSE 等等,以及申明变量。
过程体的格式: 以 BEGIN 开始,以 END 结束(可以嵌套)
注意:每个嵌套块中每条命令就结束,都必须使用 ; 结束。
3、调用:
1)可以使用 CALL 命令通过名字对存储过程调用;
CALL 存储过程的名称() ;
- 可以供外部程序调用,比如 java ,python
存储过程编写的思路
前提:进入数据库,保证可以使用正常的存储过程执行SQL命令
1、修改 mysql 的界定符(语句结束符)
DELIMITER // 或者 DELIMITER $$
2、创建存储过程
CREATE PROCEDURE 名字()
BEGIN
过程体;
END;
// # 不加也没关系,会自动恢复
3、调用存储过程;
CALL 过程名称();
DROP PROCEDURE select2; -- 命令删除名字后不加(),也可以选中左侧导航右键删除
例如:
不带参数的存储过程
SELECT 'hello world!' FROM DUAL; -- 过程体,通过存储过程实现
CREATE PROCEDURE p1()
BEGIN
SELECT 'hello world!' FROM DUAL;
END;
报错了:/* 错误代码: 1064
You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near '' at line 3
*/
报错的原因:是语句的命令没有正确结束,是因为 ; 界定符造成的,解决办法,修改界定符
修改界定符 ; 为 // 或者 $$ ,目的是让 ; 暂时失效,不表示语句结束
修改界定符:delimiter
DELIMITER //
CREATE PROCEDURE p1()
BEGIN
SELECT 'hello world!' FROM DUAL;
END;
调用
CALL p1 ; -- 每调用一次存储过程,就相当于把过程体执行一次
CALL p1(); -- 调用的时候,没有参数的存储过程()可以加,也可以不加
mysql中常见的数据库对象相关推荐
- MYSQL——MYSQL中常见的数据库引擎
文章目录 MYSQL中常见的数据库引擎 1.什么是数据库引擎? 2.MYSQL中有哪些数据库引擎 3.常见引擎介绍 (1)InnoDB (2)MyISAM (3)Memory(Heap) MYSQL中 ...
- MySql随笔-常见的数据库对象
常见的数据库对象: 一.表(Table):表是存储数据的逻辑单元,可以以行和列的形式存在,列就是字段,行就是记录. 二.数据字典:就是系统表,存放数据库相关信息的表,系统表的数据通常由数据库系统维护, ...
- 【宋红康 MySQL数据库】【03】SQL概述_常见的数据库对象
持续学习&持续更新中- 学习态度:守破离 [宋红康 MySQL数据库][03]SQL概述_常见的数据库对象 SQL概述 什么是SQL SQL背景知识 SQL分类 DDL(Data Defini ...
- mysql中常见错误代码汇总
mysql中常见错误代码汇总: 我们操作mysql的时候经常会遇到一些错误并给出错误的代码,很难知道它是什么意思,下面给出常见的错误代码,方便查阅: 1005:创建表失败 1006:创建数据库失败 1 ...
- 排除MySQL中常见错误的实用招术
MySQL是Oracle拥有的一种广泛使用的开源关系数据库管理系统(RDMS).多年来,它是基于Web的应用软件的默认选择,与其他数据库引擎相比仍然大受欢迎. MySQL是为Web应用软件设计和优化的 ...
- MySQL中常见的日志文件
日志文件记录了影响MySQL数据库的各种类型活动.MySQL中常见的日志文件有: 错误日志(error log) 二进制日志(binlog) 慢查询日志(slow query log) 查询日志(lo ...
- 【数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践
在之前这一篇中我们分享过使用chameleon工具完成MySQL到openGauss的全量数据复制.实时在线复制.9.30新发布的openGauss 3.1.0版本 ,工具的全量迁移和增量迁移的性能不 ...
- asp.net mysql 创建变_[ASP.net教程]EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型...
[ASP.net教程]EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型 0 2018-06-30 07:00:08 官方教程: ...
- MySQL中常见的单行函数(下)
MySQL中常见的单行函数(下) 一.转换函数 Date_format(date,format) 将日期转换成字符串(类似Oracle中的to_char()) Str_to_date(str,fo ...
最新文章
- 【深度学习】(3) 全连接层、激活函数
- python从入门到精通书-Python从入门到精通
- 线段树、二叉堆以及离散化入门
- 算法设计7—哈希表1
- 在.net中读写config文件的各种方法(转载)
- 中科院合肥科学技术学校05计算机,硕士研究生课程设置-中国科学院合肥物质科学研究院.PDF...
- python-kafka 常用 api 汇总
- Guava入门~Objects
- mysql拦截器实现crud_Mybatis自定义SQL拦截器
- 高仿wx钱包页H5网站源码
- Linux内核分析 - 网络[二]:网卡驱动接收报文
- Redis--Windos下的安装和使用
- [Ubuntu] zsh
- 2021年01月18号学习产品经理之电商项目从0-1
- 《人机交互技术》 第七章 Web界面设计
- 关于开源云计算平台软件的一些个人想法
- 全球及中国钒氧化物行业发展前景与投资策略分析报告2022-2028年
- 四旋翼飞行器的原理研究和建模
- 使用局域网IP地址作为小程序的测试IP
- 如何入门“动物杂交:新视野”
热门文章
- 对不起,我给大家丢人了!开发三年只拿到美团、京东、阿里三个大厂offer
- 办公人员使用计算机的管理办法,办公区网络和办公电脑管理办法
- 计算机课活动方案,第二课堂(计算机)兴趣小组活动方案
- Nginx 二级目录部署Vue2
- onSenUI 配置环境
- JAVA高并发的三种实现 Java高并发,如何解决,什么方式解决
- 宽动态Wide Dynamic Recording技术摄像机
- 黑屏助手V1.0(本本不能手动关闭显示器?不想屏保?)
- ubuntu 安装QQ 和微信
- Appium-Terminate App(终止应用程序)