数据库(1):数据库初识与基本操作

         "生命永无止境"


(一)Mysql初识

(1)为什么要有数据库? 

什么是数据库,顾名思义,肯定是用于存储的一项技术。

但是,保存数据 用文件不就行了?为什么非要格外弄一个数据库这样一个东西呢?

文件存储数据的缺陷:
1.存在不安全的隐患

2.不利于数据查询和读取。(IO进出,读取麻烦)

3.不利于存储海量的数据。

数据存储的介质:

磁盘

内存 

然而,内存中无法持久性地保存数据。通过磁盘中读取数据,又要经过多次用户态、内核态的切换,大量的IO进出,因此为了更加有效地管理数据,提出来数据库的概念! 

mysql的主流数据库很多:
1.SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目
2.Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL

3.MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。

.......

  

(2)什么是数据库

其实所谓安装数据库,本质上就是在自己的机器上安装一个软件。 

 ①从软件角度理解:

②从文件系统理解:
要理解数据库的使用,不得不谈到数据库、数据库表之间的关系。 

每一个开发人员都需要一个库(DB),为了更好的保存实体数据,也就需要多个表(table),用于保存实体数据。

 所以几乎对任何数据库的理解,就是一个基于应用层开发的  网络服务器!

数据库的存储引擎 

存储引擎: 数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法

show engines;  InnoDB是最常用的存储引擎。


(二)mysql基本操作 

(1)如何使用库?

① 查看库 和 切换库

show databases; 显示mysql所有的数据库

use + 数据库 ; 进入数据库

show create databases; 显示数据库创建的过程

  

②系统默认字符校验规则 与数据库创建

create database +DB(数据库名) ;创建数据库

上面抛出来了一个问题,也就是显示创建库的过程 有一串文段,这是什么呢??

其实就是创建一个 mysql支持的字符集或校验规则

create database db3 charset=utf8 collate utf8_general_ci;

                          charset(字符集)    collate(校验规则)             

 show charset; 查看字符集 以及校验规则

③修改、删除库

alter database + 数据库名 ; 这种修改主要 针对的是修改数据库的字符集,校验规则
 

drop database[if exist] + 数据库名 ;  

修改库的 字符集 

  

数据库删除

④数据库如何进行备份? 

mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径

mysql> source D:/mysql-5.7.22/mytest.sql;

 所以sorce 执行.sql 文件 实质上就是把sql里的命令敲一遍 也就还原了数据

⑤查看链接情况 

如果有时感觉数据库突然变得很慢,但是查不出是哪一个用户进行了登录。可以用下面的指令进行查询。

show processlist; 


(2)如何使用数据库表(table)

 ①创建表

create table table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;

 

②查看表结构

desc + 表名:

③修改表 

在项目实际开发中,经常修改某个表的结构,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等
 

alter table + Add ....

                 + drop ...

                 + modify\change ....

                 + rename (to) + 修改表名

注:modify 主要针对 存在的列表属性的更改

     change出新的列表属性名称 + 完整的列属性描述 

 添加表类属性;

 

对新增字段不会对原表结构有什么影响。 

更改属性modify\change

change: 

删除属性栏(table usr drop);注意不要 删错了

 修改表名(rename):

 

④删除表格

drop table + table_name;


(三)Mysql与约束

(1)Mysql的数据类型

在谈Mysql数据类型之前,有一个问题始终让我疑惑?

为什么需要有数据类型?没有数据类型 行不行?

我们从语言层面来看,如果此时我们存储一个整数,如果此时没有数据类型,那么大的内存空间,到底给这个整数分配多少空间呢?? 答案是不知道! 

因此我们才有不同的数据类型 int\double\char\long ......。是为了提高内存空间的使用效率。

但,对于sql语句而言,插入的数据如果 和 列表属性不一样,从根本上sql就会禁止掉!而不是采用C\C++编译器那样 给你截断\隐式类型转换.....

因此对于sql而言,引入数据类型,从而实现对一种对数据的 ”约束”,达到数据管理的目的

无符号有符号范围:

 

①tinyint型

 

②bit类型 

 bit[(M)] : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。

 bit的特性:

1.按照ASCII码 表对应显示。

2.因为M控制的是bit的 位数 因此如果默认设置1 ,可以节省空间的只存放0或1

③float\decimal

 float[(m, d)] [unsigned] : m指定显示长度,d指定小数位数,占用空间4个字节

如果float(4,2) 则可以表示 -99.99~99.99  并且mysql保存值时会进行四舍五入

 

decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数

decimal(5,2) 表示的范围是 -999.99 ~ 999.99

float vs decimal:

float表示的精度大约是7位

decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认是10。

④char\varchar 

char(L): 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255 

char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个, 最多只能是255

 

varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节

关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:

varchar的长度可以指定在0~65535之间,因为需要记录数据,所以会用掉1~3个字节。

(utf8情况下,一个字符占用3个字节)  当参数为n时,最大的长度为 65532 / 3= 21844

(gbk情况下,一个字符占用2字节)      同样可得  65532 / 2= 32766;

varchar vs char 

char\varchar的区别在于一个是变长 和 定长

定长的磁盘空间比较浪费,但是效率高。
变长的磁盘空间比较节省,但是效率低。
 

定长的意义是,直接开辟好对应的空间

变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。

⑤日期和时间类型

date :日期 'yyyy-mm-dd' ,占用三字节
datetime 时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从 1000 到 9999 ,占用八字节
timestamp :时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用四字节

⑥enum\set

enum:枚举,“单选”类型;

set:集合,“多选”类型;

enum为选项的每个选项值依次对应如下数字:1,2,3,....最多65535个;当我们添加枚举值时,也可以添加对应的数字编号。

set设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,.... 最多64个。

(2)表的其他属性

①空属性

两个值:null(默认的)和not null(不为空)

数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。

  

②默认值 

默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值

③列描述 

comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。

show create table + table_name ; 查看表的创建过程

④Zerofill 

格式化数据显示

所以zerofill完全是根据 数据类型(num) 来决定的。如果没有占用的位置,为自动填补0;

⑤主键 

主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型。

创建表的时候直接在字段上指定主键

追加、删除主键;

复合主键:
 

注:复合主键只有两个冲突,才会被禁止!

⑥自增长 

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键

 ⑦唯一键

一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。

所以唯一键实质上,是为了解决除开主键需要确定的唯一性外,其他情况下 要有的唯一性的复杂情况。

本质上 两者是不冲突 是一种补充关系。

⑧外键 

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null
 

foreign key (字段名) references 主表(列)


总结:

①mysql的产生在于 磁盘+内存存储数据难免繁琐,效率低。为了更好的管理数据,因此设计出了这样一款服务器软件。

②库、表的如何使用?
③表的约束:数据类型+空类型+ 默认值+Zerofill+主键、唯一键、外键 、auto_increament


本篇到此结束 

感谢你的阅读

祝你好运~ 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值