MySQL|数据库(MySQL)概念和操作

目录

前言
一.数据库概念
1.1 什么是数据库
1.2 什么是MySQL
1.3 客户端,服务器,数据库和表的关系
1.4 MySQL架构
1.5.1SQL语句分类
1.5.2 存储引擎
二.数据类型
2.1 数据类型分类
2.2 数值类型
2.2.1 tinyint类型
2.2.2 bit类型
2.2.3 float类型
2.2.4 decimal类型
2.3 字符串类型
2.3.1 char类型
2.3.2 varchar类型
2.4 日期和时间类型
2.5 enum和set
三.MySQL的操作
3.1 库的操作
3.1.1 创建数据库
3.1.2 校验规则和字符集
3.1.3 查看数据库
3.1.4 修改数据库
3.1.5 删除数据库
3.2 表的操作
3.2.1 创建表
3.2.2 查看表中的数据
3.2.3 往表中插入数据
3.2.4 修改表
3.2.5 删除表
前言我们都知道文件可以用来保存数据,那为什么还需要数据库呢?
首先文件保存数据有以下几个缺点:

  • 文件安全性问题
  • 文件不利于数据的查找和管理
  • 文件在程序中控制不方便
于是专家们为了更有利于管理数据,设计出了数据库。下面重点介绍现在主流的数据库,MySQL。
一.数据库概念 1.1 什么是数据库 数据库是一个管理数据的软件。
数据库存储的介质有两种:磁盘和内存。
1.2 什么是MySQL MySQL是数据库的一种。MySQL是一个网络服务,具有客户端和服务器端。底层用的TCP协议。应用层的协议是MySQL自己的协议。
我们安装了MySQL后,就连着服务器端和客户端一起安装了。如下:
MySQL|数据库(MySQL)概念和操作
文章图片

而我们连接的MySQL就是客户端。
MySQL是一个网络服务,底层用的是TCP协议,默认端口号绑定的是3306。
MySQL|数据库(MySQL)概念和操作
文章图片

由于是网络服务,说明我们在连接时,跨网络连接服务器端。
连接MySQL服务器端的指令:
mysql -h [IP地址] -P [端口号] -u root -p 如果不加-h个-P默认连接的本机的服务器

连接本机的MySQL服务器。
MySQL|数据库(MySQL)概念和操作
文章图片

如果想跨网络连接MySQL,在连接时加上IP地址和端口号即可,如下:
mysql -h 150.158.195.106 -P 3306 -u root -p

MySQL管理数据的本质:
客户端数据MySQL语句,相当于MySQL请求,发送到网络中。服务器收到请求,解析请求,然后做出对应的操作(增,删,改)。
1.3 客户端,服务器,数据库和表的关系
  • 安装一个数据库服务器,只是在机器上安装了一个数据管理系统的软件,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
  • 为了保存引用中的实体数据,一般会在数据库中创建多个表,以保存程序中的实体数据。
MySQL|数据库(MySQL)概念和操作
文章图片

MySQL保存数据:
将服务器端对应路径下建立文件夹(数据库),在文件夹下创建文件(表),数据保存在文件中。
数据库的优势在于更好的管理数据,并且安全性高。
1.4 MySQL架构 MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
MySQL|数据库(MySQL)概念和操作
文章图片

1.5.1SQL语句分类
  • DDL(data definition language):数据定义语言,用来维护存储数据的结构。代表指令:create,drop,alter...
  • DML(data manipulation language):数据操作语言,用来对数据进行操作。代表指令:insert,delete,update...
    • DML中有单独分了一个DQL,数据查询语句。代表指令:select
  • DCL(Data Control Language):数据控制语句,主要负责权限管理和事务。代表指令:grant,revoke,commit...
1.5.2 存储引擎
存储引擎:数据库管理系统如何存储数据,如何让为存储的数据建立索引和如何更新,查询数据等技术的实现方法。
MySQL的核心就是插件式的存储引擎,支持多种存储引擎。
查看存储引擎:
MySQL|数据库(MySQL)概念和操作
文章图片

二.数据类型 2.1 数据类型分类 MySQL|数据库(MySQL)概念和操作
文章图片

2.2 数值类型 MySQL|数据库(MySQL)概念和操作
文章图片

2.2.1 tinyint类型
数值越界测试:
在编写C/C++程序时,一般出现越界的情况,是不会直接报错的,可能会因为截断导致结果不对,这是需要程序员来控制的。
但是在MySQL中,出现越界的情况为了保证数据的正确性,会直接报错,这是一种约束。约束使用者必须输入对的值。
MySQL|数据库(MySQL)概念和操作
文章图片

说明:
  • 在MySQL中,整形可以指定是有符号和无符号的,默认是有符号的。
  • 可以通过unsigned来说明某个字段是无符号的。
案例:
MySQL|数据库(MySQL)概念和操作
文章图片

但是在实际中,一般不使用unsigned,对于整形可能放不下的数据,无符号整形一般也放不下。
2.2.2 bit类型
bit(M):位段类型。M表示使用的位数,范围1~64。如果不填M,默认为1。
举例:
MySQL|数据库(MySQL)概念和操作
文章图片

  • 如果保存的数据只有两态,我梦可以定义成bit(1),节省空间。比如:男女。
越界:
MySQL|数据库(MySQL)概念和操作
文章图片

2.2.3 float类型
语法:float [m,d] [unsigned]:表示小数类型,M表示显示长度,d表示小数点的位置,占用空间4字节
案例:
  • float(4,2)表示的范围为-99.99~99.99,MySQL在保存值是会四舍五入。因为4位最大的数位9999,小数点在第二位。
MySQL|数据库(MySQL)概念和操作
文章图片

MySQL|数据库(MySQL)概念和操作
文章图片

float(4,2)无符号的范围在0~99.99。写法 float(4,2) unsigned,但是在实际编写是不常使用,因为有符号数也包括了无符号数的范围。
2.2.4 decimal类型
语法:decimal(m,d)[unsigned]:表示小数类型,m指定长度,d表示小数点位置。
使用和float相同。
decimal和float的区别在于:精度不一样。
MySQL|数据库(MySQL)概念和操作
文章图片

  • float表示精度大约7位。
  • decimal整数最大位数m为65,支持小数点最大位数d是30。如果d被省略,默认为0。如果m被省略,默认为10。
建议小数字段,字段类型设置为decimal。
2.3 字符串类型 2.3.1 char类型
语法:char(L):固定长度字符串,L是可以存储的字符长度,单位为字符,最大长度值可以是255。
  • 说明char长度是固定长度的。超过固定长度,会报错,小于固定长度,仍然会开辟L大小的空间。
案例:
字母在utf8下占1字节,中文字符在utf8下占3字节。
MySQL|数据库(MySQL)概念和操作
文章图片

但是。har 长度是以字符为单位的,不论汉字还是字符'a'都被看作成了字符。所以下面长度的中文也可以存入。
MySQL|数据库(MySQL)概念和操作
文章图片

char固定长度的最大值为255。
MySQL|数据库(MySQL)概念和操作
文章图片

2.3.2 varchar类型
语法:varchar(L):可变长度字符串。L表示字符最大长度。最大长度65535字节。
  • 说明:可变长度意思是,如果字符长度M小于L,只会申请M大小的空间。但是大于L会报错。
MySQL|数据库(MySQL)概念和操作
文章图片

说明:
  • varchar是可变长度的,那怎么知道超过了总长度呢?
  • varchar的有效字节是65535,但是会有1~3字节用于记录实际数据的字符长度,所以有效字节是65532。
  • 实际varchar的字符长度,需要需要看在这个编码下一个字符占多少字节,再用varchar有效字节数除以一字符占多少字节,就是最大字符长度。比如:utf8下,一字符占3字节,于是varchar的最大长度为65532/3=21844。
char和varchar对比:
MySQL|数据库(MySQL)概念和操作
文章图片

  • 在数据确定长度的情况下,使用定长
  • 在数据长度不确定的情况下,是用变长
  • 定长磁盘空间比较浪费,但是效率高
  • 变长磁盘空间节省,效率低。
  • 定长的意思是,直接开辟对应大小空间。
  • 变长的意思是,在不超过最大长度的情况下,用多少,开辟多少空间。
2.4 日期和时间类型 常见的日期有如下三个:
  • date:日期,格式'yyyy - mm - dd',占用3字节。
  • datetime:时间日期格式:'yyyy- mm - ddHH : ii : ss',表示范围从1000到9999,占用8字节。
  • timestamp:时间戳,从1970年1月1日开始计算,显示格式'yyyy- mm - ddHH : ii : ss',占用4字节。不需要用户输入。
创建一个带时间的表并插入时间
MySQL|数据库(MySQL)概念和操作
文章图片

更新数据:
MySQL|数据库(MySQL)概念和操作
文章图片

2.5 enum和set
  • enum:枚举,单选类型。语法:enum('选项1','选项2','选项3'...)
改设定提供了若干个选项值,最终一个单元格中,实际值存储选项中的一个值;出于效率考虑,这些值实际存储的是"数字",因为这些选项值依次对应数字:1,2,3,4...最多65535个;当我们添加枚举值时,也可以添加数字编号。
  • set:集合。多选类型。语法:set('选项1','选项2','选项3'...)
改设定中提供了多个选项值,最中单元格中,其中任意多个选项值,于效率考虑,这些值实际存储的是"数字",因为这些选项值依次对应数字:1,2,4,8,16...最多64个.
说明:不建议在添加枚举值和集合值时,采用数字方式,不利于阅读。
案例:
建立一个表,来调查人的喜好。
MySQL|数据库(MySQL)概念和操作
文章图片

插入一些值:
MySQL|数据库(MySQL)概念和操作
文章图片

使用数字插入:
MySQL|数据库(MySQL)概念和操作
文章图片

查找喜欢登山的人:
MySQL|数据库(MySQL)概念和操作
文章图片

由于用上面语句找是严格匹配,找到的是爱好仅仅是登山的人。
项要找出所有喜欢登山的人,利用集合查询函数find_in_set函数。
介绍find_in_set函数:
find_in_set(sub,str_list):如果sub在str_list中返回下标,如果不在返回0。
MySQL|数据库(MySQL)概念和操作
文章图片

查询所有爱好登山的人:
MySQL|数据库(MySQL)概念和操作
文章图片

三.MySQL的操作 MySQL语句没有进行大小写字母的严格区分。
/etc/my.cnf路径下的文件,为MySQL的配置文件:
MySQL|数据库(MySQL)概念和操作
文章图片

3.1 库的操作 3.1.1 创建数据库
语法:createdatabase[if not exists]数据库名
"[]"里的为可选项,可加,可不加。加上的意思就是:如果不存在就创建库。
案例:
  • 创建名字为db1的数据库
MySQL|数据库(MySQL)概念和操作
文章图片

说明:当我们创建数据库时,没有加指定字符集和校验规则,默认字符集使用:utf8,校验规则是:utf8_general_ci。
  • 创建数据库,自定义字符集
MySQL|数据库(MySQL)概念和操作
文章图片

  • 创建数据库,自定义字符集和校验规则
MySQL|数据库(MySQL)概念和操作
文章图片

3.1.2 校验规则和字符集
查看默认字符集和校验规则:
MySQL|数据库(MySQL)概念和操作
文章图片

查看数据库支持的字符集:
字符集:主要是控制用什么语言。比如utf8可以使用中文。
命令:show charset;
查看数据库支持的校验规则:
校验规则:两字符集之间的比较规则。
命令:show collation;
校验规则对数据规则:
  • 不区分大小
创建一个库,检验方式不区分大小写:
MySQL|数据库(MySQL)概念和操作
文章图片

进入改数据库,创建表,并插入数据
MySQL|数据库(MySQL)概念和操作
文章图片

显示表单:
MySQL|数据库(MySQL)概念和操作
文章图片

  • 区分大小写
创建一个库,检验方式区分大小写。
MySQL|数据库(MySQL)概念和操作
文章图片

创建一个表格,插入和上面一样的值。进行一样的操作。
  • 进行查询
不区分大小写的查询结果:
MySQL|数据库(MySQL)概念和操作
文章图片

区分大小写的查询结果:
MySQL|数据库(MySQL)概念和操作
文章图片

不区分大小写结果排序:
MySQL|数据库(MySQL)概念和操作
文章图片

区分大小写结果排序:
MySQL|数据库(MySQL)概念和操作
文章图片

3.1.3 查看数据库
  • 查看所有数据库
MySQL|数据库(MySQL)概念和操作
文章图片

  • 查看某个数据库
showcreatedatabase数据库名
MySQL|数据库(MySQL)概念和操作
文章图片

说明:
  1. MySQL建议关键字用大写,区分字符,但是并不是必须的。
  2. 数据库名字的反引号'',是为了反之使用的数据库名刚好是关键字。
  3. /*......*/ 这个并不是注释,而是为了兼容更多版本。
  • 显示当前在哪个数据库中
【MySQL|数据库(MySQL)概念和操作】MySQL|数据库(MySQL)概念和操作
文章图片

  • 显示数据库中的表单
MySQL|数据库(MySQL)概念和操作
文章图片

3.1.4 修改数据库
主要是修改数据库的字符集和校验规则。
将test数据库的字符集改为gbk
MySQL|数据库(MySQL)概念和操作
文章图片

3.1.5 删除数据库
语法:drop database [if exists]数据库名;
作用:对应数据库的文件夹被删除,级联删除,里面的数据表全部删除。
删除test1数据库
MySQL|数据库(MySQL)概念和操作
文章图片

3.2 表的操作 3.2.1 创建表
语法:
createtable表名 (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
  • field 表示列名
  • datatype 表示列的类型
  • character set 字符集,如果没有指定字符集,则以所在数据库的默认字符集为准
  • collate 校验规则,如果没有指定校验规则,则以所在数据库的默认校验规则为准
案例:
MySQL|数据库(MySQL)概念和操作
文章图片

说明:
  • 不同的存储引擎,创建表的文件不一样
进入/ect/mt.cnf文件中的datadir文件中,可以查看数据库,进入数据库可以查看文件(表):
MySQL|数据库(MySQL)概念和操作
文章图片

  • 不同存储引擎,创建表的文件不一样。
MySQL|数据库(MySQL)概念和操作
文章图片

上面存储引擎为MyISAM。表的文件为:
MySQL|数据库(MySQL)概念和操作
文章图片

  • user.MYD:表数据
  • user.MYI:表索引
  • 还要有一个user.frm:表结构
存储引擎为innodb的创建的文件:
  • person.ibd:保存数据和索引
  • person.frm:表结构
查看表结构:
MySQL|数据库(MySQL)概念和操作
文章图片

3.2.2 查看表中的数据
select * from 表名;
MySQL|数据库(MySQL)概念和操作
文章图片

3.2.3 往表中插入数据
  • 针对某字段插入
selectinto表名(针对的字段)values (对应字段插入的数据);
MySQL|数据库(MySQL)概念和操作
文章图片

  • 针对每一个字段插入
    • selectinto表名(输入所有字段)values (对应字段插入的数据);
    • selectinto表名values (所有字段插入的数据);
MySQL|数据库(MySQL)概念和操作
文章图片

3.2.4 修改表
altertable表名add(增加的字段名字+其它约束条件):在表中增加字段
altertable表名modify(要修改表字段的约束条件):修改表中的字段
altertable表名drop (要删除的字段)
案例:
创建一个表:插入几个值:
MySQL|数据库(MySQL)概念和操作
文章图片

  • 在表中增加字段
MySQL|数据库(MySQL)概念和操作
文章图片

  • 修改字段约束条件
MySQL|数据库(MySQL)概念和操作
文章图片

MySQL|数据库(MySQL)概念和操作
文章图片

  • 删除字段
MySQL|数据库(MySQL)概念和操作
文章图片

  • 修改字段名
altertable表名change要修改的字段新字段 + 约束条件;
注意:新字段需要完整定义
MySQL|数据库(MySQL)概念和操作
文章图片

  • 修改表的名字
altertable要修改的表名renameto(可省略)新表名;
MySQL|数据库(MySQL)概念和操作
文章图片

3.2.5 删除表
语法:droptable[ifexists](可省略)表名;
MySQL|数据库(MySQL)概念和操作
文章图片




    推荐阅读