【计算机本科补全计划】Mysql 学习小计(3)

正文之前

想到自己每天中午还要玩一小时手机,就自责不已,今天看成甲的好好学习一书,颇有收获,晚上写给大伙看,现在还是谢谢 Mysql,到了后面感觉越来越难了呢!!

正文


Mysql 事务

Mysql 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!简单点说,事务就是你要进行的一系列操作。你每输入一条指令,就类似于是进行了一个事务。在 ### Mysql 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 begin 或 START TRANSACTION,或者执行命令 set AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。

太过具体的内容暂时不说,说点平时用的上的。

Mysql 事务处理主要有两种方法: 1、用 begin, rollback, COMMIT来实现

  • begin 开始一个事务
  • rollback 事务回滚
  • COMMIT 事务确认

2、直接用 set 来改变 Mysql 的自动提交模式:

  • set AUTOCOMMIT=0 禁止自动提交,也就是说你的操作会被默认备份存储,然后如果你需要后退直接后退即可
  • set AUTOCOMMIT=1 开启自动提交

综上来看,我们开启自动提交会比较好,除非你能极强的把控自己记得提交,或者有别的需求,否则一般的学习与练习的话,回滚操作其实并非那么渴求的。不过这个东西,就好比是每一次操作都进行备份了,如果能实时回滚,确实很不错的。所以关闭自动提交貌似也是很好的工作习惯啊!!而且还支持打标记点,也就是说每一次回滚都只是回到打标记点的位置,而不会把之前做的所有工作一并付之东流~ 美滋滋


Mysql alter命令

当我们需要修改数据表名或者修改数据表字段时,就需要使用到 Mysql alter命令。综合以前的知识,大概建立一个架构:

从上面看得出来,数据库是由表以及表的关系构成的,在每个表内,都有行列之分,列是属性:姓名,编号这些,行就具体到每个人,对应什么学号,什么姓名,我们用delete配合where删除人,用alter修改列,通俗点说,如果表是一个学生管理系统,那么alter就是新开一门课,所有的同学都多了一门课,成绩暂时为NULL,如果是delete那就是开出一个同学,对别的同学没啥影响,就是少了一行而已。详情见下图:

如果你需要指定新增字段的位置,可以使用Mysql提供的关键字 first (设定位第一列), after 字段名(设定位于某个字段之后)。first 和 after 关键字只占用于 add 子句,所以如果你想重置数据表字段的位置就需要先使用 drop 删除字段然后使用 add 来添加字段并设置位置。

如果需要修改字段类型及名称, 你可以在alter命令中使用 modify 或 change 子句 。

其实change就可以直接不改名字只改类型达到modify的效果吧??

alter table 对 Null 值和默认值的影响

修改表名

WTF???为毛不能改?不管了。到时候直接复制一列,然后删除原来那一列好了。


Mysql 索引

  • 1.可以通过建立唯一索引或者主键索引,保证数据库表中每一行数据的唯一性.
  • 2.建立索引可以大大提高检索的数据,以及减少表的检索行数
  • 3.在表连接的连接条件 可以加速表与表直接的相连
  • 4.在分组和排序字句进行数据检索,可以减少查询时间中 分组 和 排序时所消耗的时间(数据库的记录会重新排序)
  • 5.建立索引,在查询中使用索引 可以提高性能

或者也可以用alter来创建索引

alter table table_name add index index_name ON (column(length))

删除表中索引:

drop index [indexName] ON mytable;

我一开始把索引视为指针,结果后来查了下发现我想错了。索引不存在别的实际的引用,只是我们建立索引的时候,单独的把一列或者多列组合起来,形成一个有序的排布,当我们需要检索我们建立了索引的列的时候,比如说我们在tableid上建立了索引,那么当我们需要用where来对tableid进行检索的时候,会首先检索索引,然后可以迅速的找到满足我们条件的行的地址,然后直接查询信息即可。这个过程对我们来说是不可见,或许当你的表格达到一定程序的时候,会在检索时间上显示出来。但是这个加速的过程确实是恐怖的,100倍的提升不是玩笑。

具体更多的索引的内容详见:Mysql - index 详解


Mysql 复制表

如果我们需要完全的复制Mysql的数据表,包括表的结构,索引,默认值等。 如果仅仅使用create table ... select 命令,是无法实现的。

  • 使用 SHOW create table 命令获取创建数据表(create table) 语句,该语句包含了原数据表的结构,索引等。
  • 复制以下命令显示的SQL语句,修改数据表名,并执行SQL语句,通过以上命令 将完全的复制数据表结构。
  • 如果你想复制表的内容,你就可以使用 insert into ... select 语句来实现。

第一步:

show create table tableuse;

第二步:完全复制上面的输出。然后直接修改表名就好了。

第三步:复制数据

insert into tableclone (tableid,createtime,Tableuse) select tableid,createtime,Tableuse from tableuse;

在教程下面看到的,哭死:?

create table targetTable LIKE sourceTable;
insert into targetTable select * FROM sourceTable;

Mysql 元数据

原文发布于微信公众号 - 工科狗和生物喵(gh_3507b116a1f8)

原文发表时间:2018-04-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏idba

MySQL 5.7 新特性之四

本系列文章基于5.7.20 版本讲述MySQL的新特性。从安装,文件结构,SQL ,优化 ,运维层面 复制,GITD等几个方面展开介绍5.7 的新特性和功能。同...

952
来自专栏应用案例

索引,视图,存储过程和触发器文档

实验案例一:验证索引的作用 1、首先创建一个数据量大的表,名称为“学生表”,分别有三列,学号,姓名和班级,如下图所示,学号为自动编号,班级为默认值“一班”。 ?...

2278
来自专栏菜鸟致敬

My SQL 简介

Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management Syste...

3417
来自专栏WindCoder

网易MySQL微专业学习笔记(十)-MySQL存储引擎

这个系列属于个人学习网易云课堂MySQL数据库工程师微专业的相关课程过程中的笔记,本篇为其“MySQL数据库对象与应用”中的MySQL数据类型相关笔记。

941
来自专栏沃趣科技

ASM 翻译系列第二十六弹:ASM 高级知识 Where is my data

原作者:Bane Radulovic 译者: 邱大龙 审核: 魏兴华 DBGeeK社群联合出品 Where is my data 有时候我们想要知道...

3707
来自专栏Netkiller

数据库进程间通信解决方案

数据库进程间通信解决方案 数据库与其他第三方应用程序进程间通信解决方案 摘要 你是否想过当数据库中的数据发生变化的时候出发某种操作?但因数据无法与其他进程通信(...

3475
来自专栏Linyb极客之路

20个【MySQL】经典面试题

一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录。

2653
来自专栏Netkiller

数据库进程间通信解决方案IPC

数据库进程间通信解决方案 数据库与其他第三方应用程序进程间通信解决方案 摘要 你是否想过当数据库中的数据发生变化的时候出发某种操作?但因数据无法与其他进程通信...

3203
来自专栏杨建荣的学习笔记

并行查询缓慢的问题分析(r5笔记第86天)

今天,数据迁移组的同事问我一个问题,说他们现在需要在迁移库中查看一些数据,但是查看的时候速度很慢,想让我们看看是不是数据库端出了什么问题。因为数据迁移的一些准备...

2836
来自专栏Java帮帮-微信公众号-技术文章全总结

【数据库】MySQL进阶四、select

【数据库】MySQL进阶四、select mysql中select * for update 注: FOR UPDATE 仅适用于InnoDB,且必须在事务区...

4377

扫码关注云+社区

领取腾讯云代金券