mysql 外键和事务_Mysql (五)事务和外键

一、 什么是事务:简单说,所谓事务就是一组操作,这组操作要么都成功执行,要么都不执行。

二、 事务的使用流程

1. 第一步:开启事务,start transaction;

2. 第二步:正常操作SQL语句,但是这些SQL语句被没有真正更改数据库的数据信息

3. 第三步:提交事务,commit,当提交事务后,SQL语句会被真正执行,数据库中的信息会被改变,注意如果要取消第二步的所有操作,那么可以使用rollback(回滚)语句

三、 事务的特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

1. 原子性:一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

2. 一致性:数据在事务前后保持一致

3. 隔离性:某个事务的操作对其他事务不可见

4. 持久性:当事务完成后,其影响应该保留下来,不能撤销

四、 事务使用的注意事项:存储引擎必须是innodb,因为myisam不支持事务

create table account(

id int,

name char(10),

money int

);

insert into account values

(1,'张三',3000),

(2,'李四',3000);

update account set money = money - 500 where id = 1;

update account set money =money +500 where id =2;

start transaction; 开启

update account set money = money - 500 where id = 1;

update account set money =money +500 where id =2;

commit;

五、 视图

1. 定义:视图是由查询结果形成的一张虚拟表

2. 格式:create view 视图名称 as select语句;

create view v as select * from student where ssex ='男';

select * from department left join employee on department.did = employee.did;

select aname,id,age from (select employee.*,aname from department left join employee on department.did = employee.did) as a;

create view v2 as select * from department left join employee on department.did = employee.did; 不允许有重复字段,报错

create view v2 as select employee.*,aname from department left join employee on department.did = employee.did;

select * from v2;

select * from v2 where did =1;

3. 什么时候用视图:如果某个查询结果出现的非常频繁,也就是,要经常拿这个查询结果做子查询

4. 视图的作用

(1)简化操作,不用进行多表查询

(2)可以进行权限控制把表的权限封闭,但是开放相应的视图权限,视图里只开放部分数据列。比如我们的goods商品表,我们不想让别人看到我们的销售价格,这时候我们就可以把查看商品表的权限封闭,创建一张视图create view showGoods as select goods_id,goods_name from goods;不出现销售价格列就可以了。

5. 修改视图:alter view 视图名 as select语句;

6. 删除视图:drop view 视图名1,视图名2…;

7. 视图与基本表的关系

(1) 视图是表的查询结果,基本表的数据变了,会影响视图的结果

(2)从单表中获取的视图的增删改会影响基本表

(3) 多表视图时,可以通过视图给某个表插入数据

(4)多表视图时,不可以通过视图删除数据

(5)多表视图时,可以通过视图更改数据,注意:在更改时,被更改的数据必须是在视图中有所体现的,如果在视图中没有体现出来,那么修改的语法没有错误,但是真实表中的数据不会被改变

注意:有些视图时不可以更新的,如包含distinct、group by、having、union、union all、聚合函数等

select s1.*,cno,degree from s1 inner join s2 on s1.sno = s2.sno;

create view vv as select s1.*,cno,degree from s1 inner join s2 on s1.sno = s2.sno;

insert into vv values (111,'aaa','女','2018-01-01 00:00:00',99999,'6-110',100);

多表查询不行

insert into vv (sno,sname,ssex,sbirthday,class) values (111,'aaa','女','2018-01-01 00:00:00',99999);

插入成功,但跟谁都连不上,没有。

select * from s1;

delete * from vv where sno =111; 4)多表视图时,不可以通过视图删除数据

update vv set sname = 'bbb' where sno =111; 没变

update vv set ssex = '男' where sno =111; 还是没变

在更改时,被更改的数据必须是在视图中有所体现的,如果在视图中没有体现出来,那么修改的语法没有错误,但是真实表中的数据不会被改变

update vv set sname = 'ok' where sno =103; 变了

注意:有些视图时不可以更新的,如包含distinct、group by、having、union、union all、聚合函数等

select * from s1;

alter view vv as select * from s1 union select * from s1;

update vv set sname = 'ok2' where sno =107; 不可修改

六、 MySQL常见操作

1. 创建用户:Create user ‘用户名’@’允许登录的地址/服务器’ identified by ‘密码’

2. 删除用户:drop user ‘用户名’@’服务器地址’;注意:需要管理员才可以删除

3. 更改密码

1) 用户更改自己的密码:Set password=password(‘密码’);

2) 管理员更改用户密码:Set password for ‘用户名’@’允许登录的地址’=password(‘密码’);

4. 为用户授予权限

1) 格式:grant 权限1,权限2.. on 某库.某个对象 to ‘用户名’@’允许登录的位置’ 【identified by ‘密码’】;

2) 说明:

l权限列表,就是,多个权限的名词,相互之间用逗号分开,比如: select, insert, update

l也可以写:all

l某库.某个对象,表示,给指定的某个数据库中的某个“下级单位”赋权;

l下级单位有:表名,视图名等

l其中,有2个特殊的语法:

*.*: 代表所有数据库中的所有下级单位;

某库.* :代表指定的该库中的所有下级单位;

3,【identified by ‘密码’】是可省略部分,如果不省略,就表示赋权的同时,也去修改它的密码;

但:如果该用户不存储,此时其实就是创建一个新用户;并此时就必须设置其密码了

5. 剥夺权限:revoke 权限列表 on 某库.某个对象 from ‘用户名’@’允许登录的位置’

七、 忘记登录密码的解决方法

1. 进入命令行界面,输入net stop mysql

2. mysqld --skip-grant-tables

3. 此时可以免密码登录:mysql -u root –p

4. 登录后设置新密码:update mysql.user set authentication_string=password('msh8888') where user='root' and Host = 'localhost';

5. 刷新权限表flush privileges;

八、 SQL语句的分类

1. 数据定义语言(DDL):用于创建、修改、和删除数据库内的数据结构,如:

1) 创建和删除数据库(CREATE DATABASE || DROP DATABASE);

2) 创建、修改、重命名、删除表(CREATE TABLE || ALTER TABLE|| RENAME TABLE||DROP TABLE);

3) 创建和删除索引(CREATEINDEX || DROP INDEX)

2. 数据查询语言(DQL):从数据库中的一个或多个表中查询数据(SELECT)

3. 数据操作语言(DML):修改数据库中的数据,包括插入(INSERT)、更新(UPDATE)和删除(DELETE)

4. 数据控制语言(DCL):用于对数据库的访问,如:

1) 给用户授予访问权限(GRANT);

2) 取消用户访问权限(REMOKE)

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

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

相关文章

微软发布正式版SQL Server 2016

微软于6.2 在SQL 官方博客上宣布 SQL Server 数据库软件的正式发布版本(GA),历时一年多,微软为该软件发布了多个公共预览版和候选版本,而今天最终版本终于上线了。在博客中,微软数据集团的企业副总裁 Josep…

怎样用bootsrapcol-md来实现四分屏_用会议平板提升会议效率,做好这两点

图片:皓丽编辑:好哩据相关科学研究显示,百分之 90% 的会议,完全可以在低于 30 分钟的时间内完成,而人的注意力集中的时间差不多也是在 40-45 分钟,所以提升会议效率,保持会议节奏的连续性和抓住…

JAVA 通过 Socket 实现 TCP 编程

转载自 JAVA 通过 Socket 实现 TCP 编程简介 TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层…

Asp.net core与golang web简单对比测试

最近因为工作需要接触了go语言,又恰好asp.net core发布RC2,就想简单做个对比测试。 下面是测试环境: CPU:E3-1230 v2 内存:16G 电脑有点不给力 操作系统:Centos7.0(虚拟机单核2G内存) asp.net core rc2 golang v1.7beta1 下面是各…

mfc定义了变量仍提示未定义标识符_JavaScript-变量

好好学习,天天向上本章主要内容是:变量声明、命名规则、赋值变量变量(variables) 是计算机内存中存储数据的标识符,根据变量名称可以获取到内存中存 储的数据变量相当于一个容器,内部可以存储任意类型的数据…

Java基于socket服务实现UDP协议的方法

转载自 Java基于socket服务实现UDP协议的方法这篇文章主要介绍了Java基于socket服务实现UDP协议的方法,通过两个简单实例分析了java通过socket实现UDP发送与接收的技巧,需要的朋友可以参考下本文实例讲述了Java基于socket服务实现UDP协议的方法。分享给大家供大家参考。具体如下…

EntityFramework的多种记录日志方式,记录错误并分析执行时间过长原因

今天我们来聊聊EF的日志记录. 一个好的数据库操作记录不仅仅可以帮你记录用户的操作, 更应该可以帮助你获得效率低下的语句来帮你提高运行效率 废话不多说,我们开始 环境和相关技术 本文采用的环境与技术 系统:WIN7 数据库:SQL Server2008 相关技术:MVC5 EF6.0 简单的记录 …

日期相减 python_如果将excel的数字转化为日期(高级教程)

不知道大家有没有这样的体会,明明我们在单元格里输入的是一个日期,但是excel却提示我们输入的是一个数字,这个东西就很奇怪了,43471怎么就成了日期了那?实际上这和计算机的底层设置有关系,计算机是无法直接…

JSOUP 教程—— Java爬虫,简易入门,秒杀htmlparser

转载自 JSOUP 教程—— Java爬虫,简易入门,秒杀htmlparser关于爬虫,之前一直用做第一个站的时候,记得那时候写的 爬虫 是爬sina 的数据,用的就是 htmlparser 可能是由于好奇和满足我当时的需求,那开始就各…

3到6年的.NETer应该掌握哪些知识

我们组的开发人力一直比较紧张,今年春节后,高层终于给了几个headcount,我们可以开始招人了。从三月初我们就开始找简历,渠道有拉钩,内推,我司自己的招聘网站和智联等。简历筛了很多,也打了很多电…

多边形上点的顺序排序_一种寻找多边形视觉中心的新算法

遇到的问题在一个多边形上放置文本标签或工具提示的最佳位置通常位于其“视觉中心”的某个位置,即多边形内部的一个点,周围有尽可能多的空间。计算这样一个中心首先想到的是多边形质心。你可以用一个简单快速的公式计算多边形中心,但如果形状…

通过Jexus 部署 dotnetcore版本MusicStore 示例程序

ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mono等)上使用MVC 和Entity Framework的示例程序,本文将展示如何在CentOS上运行.NET Core版本的MusicStore,并通过Jexus对外发布。 上篇文章 《结合Jexu…

java爬虫之基于httpclient的简单Demo(二)

转载自 java爬虫之基于httpclient的简单Demo(二)延续demo1的 java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一),demo2出炉啦,大家想学爬虫都可以从这个网盘学习哦:https://pan.baidu.com/s/1pJJrcqJ#list/path%2F 免费…

神经网络中的最小二乘_深度神经网络:噪声中解读出科学

该研究介绍了一种基于深度神经网络的基本新方法,以基于已知的物理模型将函数形式拟合到噪声数据。来自美国橡树林国家实验室的Stephen Jesse领导的团队,提出了一种新的方法,可用来逆向解决问题,可从基于光谱成像数据的最小二乘拟合…

微软开放Holographic平台,意在统一VR的操作系统?

在刚刚结束的台北电脑展上,微软没有发布很多新品,而是宣布向第三方开放Windows Holographic(全息)平台,鼓励其他VR/AR头显使用该平台。近日外媒engadget发表文章,文中作者讲述了微软的野心,有意…

java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一)

转载自 java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一)最近在找java的小项目自己写着玩,但是找不到合适的,于是写开始学一点爬虫,自己也是感觉爬虫比较有趣。这里自己找了一个教程,这一次写的是基于Sock…

linux mysql复制一个表结构图_详解Windows和Linux下从数据库导出表结构,以及Linux下如何导入.sql文件到MySQL数据库...

本文首先讲解window下如何使用Navicat for MySQL导出表。1、如下图所示,目标数据库是mydatabase,数据库中有四张表。2、选中该数据库,右键——数据传输。3、左边可以选择要导出哪几张表,右边选择.sql文件的存储位置。4、在高级中&…

基于Jenkins快速搭建持续集成环境

看了园友张善友的博文,尝试成功.便有此作.原网址: 基于 Jenkins 快速搭建持续集成环境 天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣. 首先要学会使用MSBuild构建脚本 附网址:http://www.infoq.com/cn/articles/MSBuild-1. 目标:学会用MSBuild编译程序,主要…

零基础写Java知乎爬虫之进阶篇

转载自 零基础写Java知乎爬虫之进阶篇前面几篇文章,我们都是简单的实现了java爬虫抓取内容的问题,那么如果遇到复杂情况,我们还能继续那么做吗?答案当然是否定的,之前的仅仅是入门篇,都是些基础知识&#x…

MySQL导入冲突保留两者_面试被问MySQL 主从复制,怎么破?

一、前言随着应用业务数据不断的增大,应用的响应速度不断下降,在检测过程中我们不难发现大多数的请求都是查询操作。此时,我们可以将数据库扩展成主从复制模式,将读操作和写操作分离开来,多台数据库分摊请求&#xff0…