目录
前言
一.数据库概念
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。
数据库是一个管理数据的软件。
数据库存储的介质有两种:磁盘和内存。
MySQL是数据库的一种。MySQL是一个网络服务,具有客户端和服务器端。底层用的TCP协议。应用层的协议是MySQL自己的协议。
我们安装了MySQL后,就连着服务器端和客户端一起安装了。如下:
而我们连接的MySQL就是客户端。
MySQL是一个网络服务,底层用的是TCP协议,默认端口号绑定的是3306。
由于是网络服务,说明我们在连接时,跨网络连接服务器端。
连接MySQL服务器端的指令:
mysql -h [IP地址] -P [端口号] -u root -p 如果不加-h个-P默认连接的本机的服务器
连接本机的MySQL服务器。
如果想跨网络连接MySQL,在连接时加上IP地址和端口号即可,如下:
mysql -h 150.158.195.106 -P 3306 -u root -p
MySQL管理数据的本质:
客户端数据MySQL语句,相当于MySQL请求,发送到网络中。服务器收到请求,解析请求,然后做出对应的操作(增,删,改)。
安装一个数据库服务器,只是在机器上安装了一个数据管理系统的软件,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
为了保存引用中的实体数据,一般会在数据库中创建多个表,以保存程序中的实体数据。
MySQL保存数据:
将服务器端对应路径下建立文件夹(数据库),在文件夹下创建文件(表),数据保存在文件中。
数据库的优势在于更好的管理数据,并且安全性高。
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
存储引擎:数据库管理系统如何存储数据,如何让为存储的数据建立索引和如何更新,查询数据等技术的实现方法。
MySQL的核心就是插件式的存储引擎,支持多种存储引擎。
查看存储引擎:
数值越界测试:
在编写C/C++程序时,一般出现越界的情况,是不会直接报错的,可能会因为截断导致结果不对,这是需要程序员来控制的。
但是在MySQL中,出现越界的情况为了保证数据的正确性,会直接报错,这是一种约束。约束使用者必须输入对的值。
说明:
案例:
但是在实际中,一般不使用unsigned,对于整形可能放不下的数据,无符号整形一般也放不下。
bit(M):位段类型。M表示使用的位数,范围1~64。如果不填M,默认为1。
举例:
越界:
语法:float [m,d] [unsigned]:表示小数类型,M表示显示长度,d表示小数点的位置,占用空间4字节
案例:
float(4,2)无符号的范围在0~99.99。写法 float(4,2) unsigned,但是在实际编写是不常使用,因为有符号数也包括了无符号数的范围。
语法:decimal(m,d)[unsigned]:表示小数类型,m指定长度,d表示小数点位置。
使用和float相同。
decimal和float的区别在于:精度不一样。
建议小数字段,字段类型设置为decimal。
语法:char(L):固定长度字符串,L是可以存储的字符长度,单位为字符,最大长度值可以是255。
案例:
字符在utf8下占3字节,char 长度是以字符为单位的,不论汉字还是字符'a'都被看作成了字符。
char固定长度的最大值为255。
语法:varchar(L):可变长度字符串。L表示字符最大长度。最大长度65535字节。
说明:
char和varchar对比:
常见的日期有如下三个:
创建一个带时间的表:
改设定提供了若干个选项值,最终一个单元格中,实际值存储选项中的一个值;出于效率考虑,这些值实际存储的是"数字",因为这些选项值依次对应数字:1,2,3,4...最多65535个;当我们添加枚举值时,也可以添加数字编号。
改设定中提供了多个选项值,最中单元格中,其中任意多个选项值,于效率考虑,这些值实际存储的是"数字",因为这些选项值依次对应数字:1,2,4,8,16...最多64个.
说明:不建议在添加枚举值和集合值时,采用数字方式,不利于阅读。
案例:
建立一个表,来调查人的喜好。
插入一些值:
使用数字插入:
查找喜欢登山的人:
由于用上面语句找是严格匹配,找到的是爱好仅仅是登山的人。
项要找出所有喜欢登山的人,利用集合查询函数find_in_set函数。
介绍find_in_set函数:
find_in_set(sub,str_list):如果sub在str_list中返回下标,如果不在返回0。
查询所有爱好登山的人:
MySQL语句没有进行大小写字母的严格区分。
/etc/my.cnf路径下的文件,为MySQL的配置文件:
语法:create database [if not exists] 数据库名
"[]"里的为可选项,可加,可不加。加上的意思就是:如果不存在就创建库。
案例:
说明:当我们创建数据库时,没有加指定字符集和校验规则,默认字符集使用:utf8,校验规则是:utf8_general_ci。
查看默认字符集和校验规则:
查看数据库支持的字符集:
字符集:主要是控制用什么语言。比如utf8可以使用中文。
命令:show charset;
查看数据库支持的校验规则:
校验规则:两字符集之间的比较规则。
命令:show collation;
校验规则对数据规则:
创建一个库,检验方式不区分大小写:
进入改数据库,创建表,并插入数据
显示表单:
创建一个库,检验方式区分大小写。
创建一个表格,插入和上面一样的值。进行一样的操作。
不区分大小写的查询结果:
区分大小写的查询结果:
不区分大小写结果排序:
区分大小写结果排序:
show create database 数据库名
说明:
主要是修改数据库的字符集和校验规则。
将test数据库的字符集改为gbk
语法:drop database [if exists] 数据库名;
作用:对应数据库的文件夹被删除,级联删除,里面的数据表全部删除。
删除test1数据库
语法:
create table 表名 (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
案例:
说明:
进入/ect/mt.cnf文件中的datadir文件中,可以查看数据库,进入数据库可以查看文件(表):
上面存储引擎为MyISAM。表的文件为:
存储引擎为innodb的创建的文件:
查看表结构:
select * from 表名;
select into 表名 (针对的字段) values (对应字段插入的数据);
alter table 表名 add (增加的字段名字+其它约束条件):在表中增加字段
alter table 表名 modify (要修改表字段的约束条件):修改表中的字段
alter table 表名 drop (要删除的字段)
案例:
创建一个表:插入几个值:
alter table 表名 change 要修改的字段 新字段 + 约束条件;
注意:新字段需要完整定义
alter table 要修改的表名 rename to(可省略) 新表名;
语法:drop table [if exists](可省略) 表名;