实际开发中,出现在代码中的sql包括:insert ,delete, update ,select
增删改查有一个术语:CRUD操作
即:create retrieve (检索)update delete
在MySQL当中,凡是标识符是可以使用飘号 ` 括起来的,但最好不要用,不通用。
MySQL默认使用的存储引擎是InnoDB方式–可以自己设定
存储引擎这个名字只有在MySQL中存在(Oracle中有对应的机制,不叫存储引擎,没有特殊的名字,就是“表的存储方式”)
默认采用的字符集是UTF8
基于wamp–cmd操作–(以下mysql命令,不是sql语言)
1.从c盘切换到d盘–d:
2.输入路径–cd: D:wamp64binmysqlmysql5.7.14bin
3.mysql -u账户 -p密码,为防止密码隐私,可以直接mysql -u账户 -p
4.成功后,界面是:
5.展示所有数据库–show databases;
6.创建数据库–create database 数据库名;
7.使用数据库–use 数据库名字;
8.查看当前使用数据库中有哪些表–show tables;
9*(可选).初始化数据库数据–source sql脚本的路径;
10.删除数据库–drop database 数据库名;
11.展示数据库中的表–show tables;
12.查表的结构–desc 表名;
13.查看当前使用的是哪个数据库–select database();
14.查看mysql的版本号–select version();
15.结束一条语句–G --不过用;也可以
16.退出mysql–exit
17.查看创建表的语句–show create table 表名;
18.查看引擎–show engines
19.查看sql语句的执行计划,可以看到查看了几条(rows)等等–explain sql语句
内连接:假设a和b表进行连接,使用内连接的话,凡是a表和b表能够匹配上的记录查询出来,这就是内连接,如果没有匹配的,则不显示。ab两张表没主副之分,两张表平等
外连接:假设a和b表进行连接,使用外连接的话,ab两张表中有一张表是主表,一张表是副表,主要查询主表中的数据,捎带着查询副表,当副表中的数据没有和主表的数据进行匹配上,副表自动模拟出null与之匹配。
外连接分类?
左外连接(左连接):表示左边的这张表是主表
右外连接(右连接):表示右边的这张表是主表
外连接最重要的特点是:
主表的数据无条件的全部查询出来
InnoDB:
优点:支持事务、行级锁、外键等。这种存储引擎数据的安全得到保障
表的结构存储在*.frm文件中
数据存储在tablespace这样的的表空间中(逻辑概念),无法被压缩,无法转换为只读
在MySQL服务器崩溃后提供自动恢复的功能
支持级联删除和级联更新
MEMORY:
缺点:不支持事务,数据容易丢失,因为所有数据和索引都是存储在内存当中的。
优点:查询速度最快
以前叫做HEPA引擎
为什么?因为他们这三个语句都是和数据库表当中的“数据”相关的,事务的存在是为了保存数据的完整性、安全性。
事务的特性?
事务包括四大特性:
原子性:事务是最小的工作单元,不可再分
一致性:事务必须保证多条DML语句同时成功或者同时失败
隔离性:事务和事务之间是隔离的
持久性:最终数据必须持久化到硬盘文件中,事务才算成功的结束
关于事务之间的隔离性?
事务隔离性存在隔离级别,理论上隔离级别包括4个:
第一级别:读未提交(read uncommitted)–演示添加链接描述
对方事务还没有提交,我们当前事务可以读取到对方未提交的数据;
读未提交存在脏读(Dirty Read)现象:表示读到了脏数据,即数据不稳定,一断电就没有了。
第二级别:读已提交(read committed)–演示添加链接描述
对方事务提交之后的数据我方可以读取到;
读已提交存在的问题是:不可重复读,即对方一提交就读到新的,无法做到数据一直是相同的。
但解决了:脏读现象。
第三级别:可重复读(repeatable read)–演示:添加链接描述
这种隔离级别解决了:不可重复读的问题。
但存在的问题是:读取到的数据是幻象的,只要对方提交过,即使对方已经删除或者增加,读取到的数据依旧还是原数据,类似于读取备份数据。
第四级别:序列化读/串行化读(serializable)–演示:添加链接描述
解决了所有的问题;
效率低,需要事务排队
mysql事务默认情况下是自动提交的
自动提交?即只要执行任意一条DML语句则提交一次。
如何关闭自动提交?用 start transaction
mysql数据库操作流程:
表示当正常执行DML时候,会自动提交,此时如果回滚,即输入 rollback ,没有任何用处,表中数据还是一样的,因为数据已经自动提交到了内存里面;
当输入start transaction后,此时会关闭自动提交,事务机制开启,假设此时的数据是a,在执行DML后,这时候如果输出,数据是DML后的数据b,如果此时回滚,即输入rollback,然后输出,数据为a,且事务机制结束。因为数据还没有提交内存里面去;
当输入start transaction后,此时会关闭自动提交,事务机制开启,假设此时的数据是a,在执行DML后,这时候如果输出,数据是DML后的数据b,如果此时commit,即数据提交,此时输出数据,则会是b。如果此时回滚,即输入rollback,则输出的数据为b,因为数据已经提交了,而回滚只能回滚到上一次的数据提交点。
索引为什么可以提高检索效率?
其实最根本的原理是缩小了扫描的范围
索引虽然可以提高检索效率,但是不可以随意的添加索引,因为索引也是数据库当中的对象,也需要数据库不断的维护,是有维护成本的。比如,表中的数据经常被修改这样就不合适添加索引,因为数据一旦修改,索引需要重新排序,进行维护
添加索引是给某一个字段,或者说某些字段添加索引
当data5字段上没有添加索引的时候,以上sql语句会进行全表扫描,扫描data5字段中所有的值,而当添加索引的时候,以上sql语句会根据索引扫描,快速定位
什么时候考虑给字段添加索引?(满足什么条件)
数据量庞大(根据客户的需求,满足线上的环境)
该字段很少的DML操作(因为字段进行修改操作,索引也需要维护)
该字段经常出现在where子句中(经常根据哪个字段查询)
注意:主键和具有unique约束的字段会自动添加索引,所以根据主键查询效率较高,尽量根据主键检索。
增加索引:
删除索引对象
索引底层采用的数据结果是:B+Tree
索引分类:
单一索引:给单个字段添加索引
复合索引:给多个字段联合起来添加1个索引
主键索引:主键上会自动添加索引
唯一索引:有unique约束的字段会自动添加索引
怎么创建视图?怎么删除视图?
对视图进行增删改查,会影响到原表数据,(通过视图影响原表数据的,不是直接操作的原表),可以对视图进行CRUD操作,但是创建视图必须用DQL语句,即select语句
视图的作用?
视图可以隐藏表的实现 细节,保密级别较高的系统,数据库只对外提供相关的视图,java程序员只对视图对象进行CRUD
将数据库当中的数据导出
在windows的dos命令窗口中执行:(导出整个库)
mysqldump 数据库名> 输出到这个sql脚本文件的路径,其实就是保存路径+取名(假设为D:a.sql) -u用户名 -p密码
在windows的dos命令窗口中执行:(导出指定数据库中的指定表)
mysqldump 数据库名 表名> 输出到这个sql脚本文件的路径,其实就是保存路径+取名(假设为D:a.sql) -u用户名 -p密码
导入数据
1.create database 数据库名
2.use 数据库名
3.source 脚本文件(D
三范式内容:
第一范式:
任何一张表都应该有主键,并且每一个字段原子性不可再分
如:
图中没有主键,其次联系方式可以再分,因此不符合第一范式
修改后:
注:原子性:指事务的不可分割性,一个事务的所有操作要么不间断地全部被执行,要么一个也没有执行。
第二范式:建立在第一范式的基础上,所有非主键字段完全依靠主键,不能产生部分依赖
如:
因此不满足第二范式,当然最好不要用复合主键。解决方案:
第三范式:建立在第二范式的基础之上,所有非主键字段直接依赖主键,不能产生传递依赖
如:
不满足第三范式,解决办法:
一对多,多对多表格设计在上面。
一对一表格设计,2种方案:
外键唯一、主键共享
外键唯一:
完全版参考:
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《sql总结》, 一起来围观吧 https://blog.csdn.net/weixin_/article/details/?utm_source=app&app_version=4.5.8
到此这篇.sql文件有什么用(sql文件有什么用)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/sqlbc/22109.html