mysql

199 阅读9分钟

数据库的诞生

在数据库诞生之前,数据存储和数据管理已经存在了相当长的时间。当时数据管理主要是通过表格、卡片等方式进行,效率低下,需要大量人员参与,极易出错。

20世纪50年代,随着计算机的诞生和成熟,计算机开始运用于数据管理,与此同时,数据管理技术也迅速发展。传统的文件系统难以应对数据增长的挑战,也无法满足多用户共享数据和快速检索数据的需求。

在这样的背景下,20世纪60年代,数据库应运而生。在数据库技术领域,数据库所使用的典型数据模型主要有层次数据模型(Hierarchical Data Model)、网状数据模型(Network Data Model)和关系数据模型(Relational Data Model)。这三种模型是按照它们的数据结构来命名的,它们之间的根本区别就在于数据之间联系的表达方式不同。

再后来,由于互联网技术的发展,,数据规模爆炸式增长,单机数据库越来越难以满足用户需求,,解决这种问题的一个直观方法就是增加机器的数量,把数据库同时部署在多台机器上,分布式数据库就这样应运而生了。

为了使数据更加方便的被使用,降低使用成本,减少人员,配置等的重复利用,云数据库应运而生。云数据库即是数据库部署和虚拟化在云计算环境下,通过计算机网络提供数据管理服务的数据,云数据库将传统的数据库系统配置在“云上”,有专门的云服务提供商进行这些“云上”数据库系统的管理和部署工作,用户只需要通过付费的方式就能获取数据库服务。不同于传统数据库,云数据库通过计算存储分离、存储在线扩容、计算弹性伸缩来提升数据库的可用性和可靠性。 单机化存储明显比云存储更加安全。

数据库有两种类型:

1.关系型数据库 2.非关系型数据库。 关系型数据库一般像excel表格保存数据,而非关系型数据用键值对的形式保存。

MySQL是大家常用的的工具,用于处理和保存大量数据,以轻量,速度快和开放源码著称是一种关系型数据库。但有人认为其中重要的功能是实现了前后端分离。学习数据库是学习后端的必要途径。还有一些其他常用的一些数据库管理系统(MySQL、Oracle、DB2、SqlServer) 学习MySQL应主要学习sql sql是一种结构化查询语句,用于更新,管理,修改数据库。大多数数据管理系统都建立在sql上,是各种数据库交互的基础。

一。SQL指令:

DDL:数据定义指令,数据定义语言:(用来完成数据库的创建,删除和修改表结构等)

create DQL:数据查询语言(对数据库中的表进行查询)

select DML:数据操作语言(对表中的数据进行增删改等操作)

insert TPL:事务控制语言(拥有管理数据库中的事务)

DCL:数据控制语言(定义数据库的访问权限,安全级别等)

二.sql写法规则: 每条语句结束必须都有分号结束 sql不区分大小写 ’-- ‘,#是单行注释 /* */是多行注释。

注意事项 MySQL在创建之后会自动创建4个库,不能随便修改。 1.information_schema:是虚拟库,不占用系统空间,存储数据库启动之后的参数 2.mysql:存储用户权限的系统 3.performa_schema:用于收集数据库服务参数等 4.sys:用于开发者查询性能问题的库

四。sql语句

对数据库进行操作

1. create database 库名 charset=编码格式 (创建数据库)
2. show databases(查询所有数据库) 
3. show create databa 库名:(查询指定数据库) 
4. alert database 库名 character set 编码 (改变编码格式) 
5. use 库名 (切换数据库) 
6. select database (查看当前数据库) 
7. drop database 库名(删除指定数据库) 

五数据类型:

(1)字符串类型:

- 1.char(n):最大可存255个字符,长度固定,n为显示的字符 
- 2.varchar():最大可储存65535个字符,长度可变。 
- char查询效率高。varchar长度可变,节省磁盘资源 
- enum:在指定的数据中选择一个数据(单选) 
- set:在指定的数据中选择一个或多个数据(多选) 

(2)数值类型

- tinyint 整数(1字节) 
- smallint 整数类型(2字节)
- mediumint 整数类型(3字节)
- int 整数(4字节)
- bigint(8字节)
- float(m,d)单精浮点数,保存小数点后面有6到7位(m表示数据总长度,保留的小数位) 
- double(m,d)双精度点数,保留小数点后15位 浮点数保存时存在精度丢失。 

(3)时间类型:

- year(年) 
- time(时分秒)
- date(年月日)
- datetime()这个也是时间类型,表示什么记不清了 写入时间必须用引号 

表: 表是在库文件之下的,类似于excel表格的一种文件。

- 表的创建 creat table 表名(字段名多个字段名用逗号分开) 
- 写入文件 insert into 表名 values(插入内容,每个字段的内容用逗号分离)当插入多个内容时每个内容用括号括起来,并且用逗号进行分离。
- replace intoinsert into功能类似,不同点在于:replace into 首先尝试插入数据到表中,
1.  如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据;
1.  否则,直接插入新数据。
-  修改字段名 alter table 表名 change 旧的字段名 新的字段名 数据类型
-   添加字段名 alert table 表名 add 字段名 数据类型 after 
-   修改表名 alert table 旧的表名 rename 新的表名 
-   修改字段类型alter table 表名 modify column 字段名 类型 
-   删除字段名 alter table 表名 drop column 字段名
-    删除表 drop table 表名
-     清除表数据 delete from 表名 
-     truncate table 在功能上,与不带where字句的delete语句相同;二者均删除表中的全部行,但truncate tabledelete速度更快,且使用的系统和事务日志资源少。 truncate 删除表中的所有行,但表的结构及其列,约束,索引等保持不变。新行标识所用的技术值重置为该列的种子。如果想保留标识计数值,轻盖拥delete 。如果要删除表定义及其数据,请使用drop table 语句。
-     查看库下的表 show tables 
-     查看表结构 desc(降序)表名,ASC(升序)表名 
-     表结构 查看创建表的语句 show create 表名
-      查看全部据 select *from 表名
-       查看某个字段的数据 select(字段名) from 表名 
-       利用where方法查询方法 select *from 表名 where 限制条件

约束条件在创建表栏时使用

  -      not null 该栏下的数据不能为空’
  -      unique 在该栏中数据不能重复
  -      primary key 该栏下数据不能为空,且不能重复
  -      auto_increment 该栏必须有约束条件(该栏下数据不能为空),数据类型为整形,在不插入的条     下自动向该栏中加数据,数字默认为上一个数据加上一个数值,该值默认为1.
  -     fulltext全文索引。

函数:

自带函数

        -     avg()求平均
        -     sum()求合计
        -     max()求最大
        -     min()求最小
        -     rank() over 它是跳跃的、间断的排名
        -     rank_number() over 对于每个唯一的行集,将重新开始行号
        -     dense_rank() over 排序数字是连续的、不间断。当有相同的分数时,它们的排名结果是并列
        -     left(name,4)截取左边的4个字符的
        -     right(name,4)截取左边的4个字符
        -     stbstring(name,5,3) 截取name这个字段 从第五个字符开始 只截取之后的3个字符
        -     substring_index('www.baidu.com', '.', 2) 截取第二个 '.' 之前的所有字符
        -     substr(name, 1, CHAR_LENGTH(name)-3) 截取name字段,取除name字段后三位的所有字符
        -     timestampdiff(时间单位,开始时间,结束时间)
        -     date_add(时间,interval 增加的时间)
        -     group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
        -     concat(字符串1, 字符串2,...) 字符串参数用逗号隔开!
        -     concat_ws()函数 和 concat()函数一样,也是将多个字符串连接成一个字符串,但是可以指定分隔符!

返回值: 结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。

自定义函数

注意: 中括号是可选的

自定义函数格式
-      delimiter 结束符
-      create func 函数名(传入的数据) returns 数据类型
     -      begin 
-      return 返回的数据
-      end 结束符
-      deliniter
-      select 函数()(使用函数)
储存器格式
-        delimiter 结束符
-        create procedure 存储名(['in','out'] 参数)
-        begin
-        存储方式
-        end 结束符
-        delimiter
参数说明
-     in 传入参数
-     out 传出参数
-     call 存储器(使用存储器)

触发器

-     delimiter 结束符
-     create trigger 触发器名 【after,before】 insert on 表名 for each ROW
-     begin
-     declare num int(声明一个变量,declare只能用在触发器中);
-     触发行动
-     end 结束符
-     delimiter

索引

     -     主键索引
     -     唯一索引
     -     普通索引
     -     当读的操作大于写的操作时建立索引可以提高效率,反过来不建议使用索引。
     -     索引的操作
     -     index 普通索引
     -     unique index唯一索引
     -     primary key 主键索引
     -     fulltext 全文索引
     -     在创建表时在被当作索引的栏加上以上关键字。在表名之前,主键索引在后。,将栏目改成索引栏目,在没有索引的表中加入索引用create index 索引 类型 on 表名(以哪一个字段);
  • 索引的添加
      -      alter table table 表名 add 索引类型 索引名(索引列表)
      -      在创建表时加入索引的关键字
    
  • 索引的删除
      -     drop index 索引名 on 表名
      -     alter table 表名 drop index 索引名    
    

事务

- 四大好处

         -   原子性,持久性,隔离性,一致性。
         -   关键字
         -   beigin数据的开始
         -   rollback事务的回滚
         -   commit事务的提交

- 隔离级别

         -    read uncommitted(读取未提交的数据)
         -    read committed(读取已提交的数据 )
         -    repeatable   read(提交的数据读不到,但可以重复读取,会导致幻想读)
         -    serializable(排队读取)

- 存储引擎

-    InnoDB(MySQL默认的存储引擎,读和写较为平衡)