mysql update语句

mysql视图

十年热恋 提交于 2019-12-09 15:25:08
创建视图 create view student_view as select student.name from student create view 视图名 as select 语句 注意事项: select 不能引用系统或者用户变量 select 语句不能包含from子句中的子查询 select 语句不能引用预处理语句参数 查看视图 describe student_view 修改视图 alter view 视图名 as select 语句 修改视图的内容,视图其实是虚拟表,实际数据来自于基本表,所以通过插入,修改,删除操作更新视图表中的数据,实际上是在更新视图所引用的基本表的数据。 对视图的修改就是对基本表的修改,因此修改时,要满足基本表的数据定义。 某些视图表是可更新的,也就是说,可以使用update ,delete ,insert等语句更新基本表的内容,对于可更新的视图,视图中的行和基本表之间必须具有一一对应的关系。 来源: CSDN 作者: 一只胖 链接: https://blog.csdn.net/qq_43718718/article/details/103457214

MySQL用户管理

回眸只為那壹抹淺笑 提交于 2019-12-09 11:16:02
MySQL授权系统主要通过五个表(user、db、host、tables_priv和columns_priv)来实现,其中用于访问数据库的各种用户信息都保存在mysql库的user表中。账户权限信息被存储在mysql数据库的user、db、host、tables_priv、columns_priv和procs_priv表中。 user表——该表决定是否允许用户连接到服务器。如果允许连接,权限字段则为该用户的全局权限。 db表——用于决定哪些用户可以从哪些主机访问哪些数据库。包含在db表中的权限适用于这个表标识的数据库。 host表——当您想在db表的范围之内扩展一个条目时,就会用到这个表。举例来说,如果某个db允许通过多个主机访问的话,那么超级用户就可以让db表内将host列为空,然后用必要的主机名填充host表。 tables_priv表——该表与db表相似,不同之处是它用于表而不是数据库。这个表还包含一个其他字段类型,包括timestamp和grantor两个字段,用于存储时间戳和授权方。在本文后面我们会对这个表做进一步的讲解。 columns_priv——该表作用几乎与db和tables_priv表一样,不同之处是它提供的是针对某些表的特定列的权限。 权限表的存取过程是: 1) 先从user表中的host、 user、 password这3个字段中判断连接的IP、用户名

mysql left join

大憨熊 提交于 2019-12-09 06:31:36
我理解的left join 是讲两个或者两个以上的表通过left join连接起来进行查询操作。语句如下: SELECT*FROM table1 LEFT JOIN table2 ON table1.`ss` = table2.`ss` LEFT JOIN table3 on table2.`ss` = table3.·ss· 多张表查询以此类推。 其中未查询字段增加索引大大提高查询速度,但是 却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。 建立索引会占用磁盘空间的索引文件。 来源: CSDN 作者: 一只胡诌的开发猿 链接: https://blog.csdn.net/u014367706/article/details/53376365

Innodb中的事务隔离级别和锁的关系

元气小坏坏 提交于 2019-12-09 00:08:07
前言: 我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力。所以对于加锁的处理,可以说就是数据库对于事务处理的精髓所在。这里通过分析MySQL中InnoDB引擎的加锁机制,来抛砖引玉,让读者更好的理解,在事务处理中数据库到底做了什么。 #一次封锁or两段锁? 因为有大量的并发访问,为了预防死锁,一般应用中推荐使用一次封锁法,就是在方法的开始阶段,已经预先知道会用到哪些数据,然后全部锁住,在方法运行之后,再全部解锁。这种方式可以有效的避免循环死锁,但在数据库中却不适用,因为在事务开始阶段,数据库并不知道会用到哪些数据。 数据库遵循的是两段锁协议,将事务分成两个阶段,加锁阶段和解锁阶段(所以叫两段锁) 加锁阶段:在该阶段可以进行加锁操作。在对任何数据进行读操作之前要申请并获得S锁(共享锁,其它事务可以继续加共享锁,但不能加排它锁),在进行写操作之前要申请并获得X锁(排它锁,其它事务不能再获得任何锁)。加锁不成功,则事务进入等待状态,直到加锁成功才继续执行。 解锁阶段:当事务释放了一个封锁以后,事务进入解锁阶段,在该阶段只能进行解锁操作不能再进行加锁操作。 事务 加锁/解锁处理 begin; insert into test .....

数据库-MySQL 学习笔记

家住魔仙堡 提交于 2019-12-08 20:20:37
SQL 1 数据库的基本概念 DataBase:DB 数据的仓库。用于存储和管理数据的仓库 特点:①持久化存储数据,数据就是一个文件系统 ​ ②方便存储和管理数据 ​ ③使用了统一的方式操作数据库——SQL  数据库软件 Oracle MySQL IBM DB2 Hive Facebook开发 基于Hadoop 类SQL语法 执行延迟高,适合处理大数据、对实时性要求低的场合 2 SQL 什么是SQL? ​ *Sructured Query Language :结构化查询语言 ​ *定义了所有关系型数据库的规则 SQL通用语法 SQL单行或多行书写,以==分号==结尾 MySQL不区分大小写,关键字建议大写 单行注释: -- 注释内容 多行注释: /* 注释内容 */ mysql> show databases; -- 注释内容 mysql> show databases; /* 注释内容 */ SQL 分类 DDL(Data Definition Language)数据定义语言 用来定义数据库对象:数据库、表、列等。 关键字:create、drop、alter等 DML(Data Manipulation Language)数据操作语言 用来对数据库中表的数据进行增删修改。 关键字:insert、deleta、update等 DQL(Data Query Language

单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构

天涯浪子 提交于 2019-12-08 18:18:57
此文是根据杨尚刚在【QCON高可用架构群】中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处。 杨尚刚,美图公司数据库高级DBA,负责美图后端数据存储平台建设和架构设计。前新浪高级数据库工程师,负责新浪微博核心数据库架构改造优化,以及数据库相关的服务器存储选型设计。 前言 MySQL数据库大家应该都很熟悉,而且随着前几年的阿里的去IOE,MySQL逐渐引起更多人的重视。 MySQL历史 1979年,Monty Widenius写了最初的版本,96年发布1.0 1995-2000年,MySQL AB成立,引入BDB 2000年4月,集成MyISAM和replication 2001年,Heikki Tuuri向MySQL建议集成InnoDB 2003发布5.0,提供了视图、存储过程等功能 2008年,MySQL AB被Sun收购,09年推出5.1 2009年4月,Oracle收购Sun,2010年12月推出5.5 2013年2月推出5.6 GA,5.7开发中 MySQL的优点 使用简单 开源免费 扩展性“好”,在一定阶段扩展性好 社区活跃 性能可以满足互联网存储和性能需求,离不开硬件支持 上面这几个因素也是大多数公司选择考虑MySQL的原因。不过MySQL本身存在的问题和限制也很多,有些问题点也经常被其他数据库吐槽或鄙视

MySQL 处理海量数据时的一些优化查询速度方法

坚强是说给别人听的谎言 提交于 2019-12-08 18:18:08
在参与实际项目中,当 MySQL 表的数据量达到百万级时,普通的 SQL 查询效率呈直线下降,而且如果 where 中的查询条件较多时,其查询速度无法容忍。想想可知,假如我们查询淘宝的一个订单详情,如果查询时间高达几十秒,这么高的查询延时,任何用户都会抓狂。因此如何提高 SQL 语句查询效率,显得十分重要。 查询速度慢的原因 1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2、I/O 吞吐量小,形成了瓶颈效应。 3、没有创建计算列导致查询不优化。 4、内存不足 5、网络速度慢 6、查询出的数据量过大(可采用多次查询,其他的方法降低数据量) 7、锁或者死锁(这是查询慢最常见的问题,是程序设计的缺陷) 8、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。 9、返回了不必要的行和列 10、查询语句不好,没有优化 30 种 SQL 查询语句的优化方法: 1、应尽量避免在 where 子句中使用 != 或者 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。 2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: 1 select id from t where num is null ; 可以在 num 上设置默认值 0 ,确保表中 num 列没有 null 值,然后这样查询: 1

mysql海量数据的优化

試著忘記壹切 提交于 2019-12-08 18:12:46
下面是一部分比较重要的建议: 1、选择正确的存储引擎 以 MySQL为例,包括有两个存储引擎 MyISAM 和 InnoDB,每个引擎都有利有弊。 MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。 InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。但是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务。 2、优化字段的数据类型 记住一个原则,越小的列会越快。对于大多数的数据库引擎来说,硬盘操作可能是最重大的瓶颈。所以,把你的数据变得紧凑会对这种情况非常有帮助,因为这减少了对硬盘的访问。 如果一个表只会有几列罢了(比如说字典表,配置表),那么,我们就没有理由使用 INT 来做主键,使用 MEDIUMINT, SMALLINT 或是更小的 TINYINT 会更经济一些。如果你不需要记录时间,使用 DATE 要比 DATETIME 好得多。当然,你也需要留够足够的扩展空间。 3、为搜索字段添加索引 索引并不一定就是给主键或是唯一的字段。如果在你的表中,有某个字段你总要会经常用来做搜索

MySQL大表优化方案

坚强是说给别人听的谎言 提交于 2019-12-08 18:12:14
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在 千万级 以下,字符串为主的表在 五百万 以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 尽量使用 TINYINT 、 SMALLINT 、 MEDIUM_INT 作为整数类型而非 INT ,如果非负则加上 UNSIGNED VARCHAR 的长度只分配真正需要的空间 使用枚举或整数代替字符串类型 尽量使用 TIMESTAMP 而非 DATETIME , 单表不要有太多字段,建议在20以内 避免使用NULL字段,很难查询优化且占用额外索引空间 用整型来存IP 索引 索引并不是越多越好,要根据查询有针对性的创建,考虑在 WHERE 和 ORDER BY 命令上涉及的列建立索引,可根据 EXPLAIN 来查看是否用了索引还是全表扫描 应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,否则将导致引擎放弃使用索引而进行全表扫描 值分布很稀少的字段不适合建索引,例如"性别"这种只有两三个值的字段 字符字段只建前缀索引 字符字段最好不要做主键 不用外键,由程序保证约束 尽量不用 UNIQUE

阿里云服务器安装mysql,部署javaweb项目,个人浏览网上的一些经验做的总结,不足之处欢迎指导

巧了我就是萌 提交于 2019-12-08 16:56:21
阿里云服务器安装mysql,部署javaweb项目 首先,记住centOS7之后的很多命令都和老版本不同,具体的下面会介绍; centos7不支持mysql,内部集成了mariadb,而安装mysql的话会和mariadb文件冲突,所以需要先卸载mariadb,以下为卸载mariadb,安装mysql的步骤: rpm -qa | grep mariadb(列出安装过的rpm) 卸载:rpm -e mariadb-libs-5.5.37-1.el7_0.x86_64 为了方便,下面centos7叫”新版本“,centos前的叫”老版本“; 开始安装mysql 首先:看下图: 1.检测以前有没有安装过数据库可以用以下命令来检测: rpm -qa | grep MySQL(旧版本) rpm -qa | grep -i mysql(新版本) 2.有的话就删除: rpm -e 加上文件名 yum remove 文件名(用这个卸载需谨慎,容易删掉其他配置文件!!下图就是警告) 如果出现出现有依赖无法删除就使用下面的命令强制删: rpm -e --nodeps 文件名 rpm -ev (文件名) --nodeps 3.接着可以去找安装包了,tar,rpm,yum安装三种方式选择,下面提供了一种yum+rpm的安装方式: 3.1:因为CentOS 7的yum源中默认是没有mysql的。所以