MySQL基础汇总

232 阅读13分钟

前言

数据存储方式

计算机数据(Data)的存储一般以硬盘为数据存储空间资源,从而保证计算机内的数据能够持续保存。对于数据的处理,一般会采用数据库相关的技术进行处理,从而保证数据处理的高效性。

采用数据库的管理模式不仅提高了数据的存储效率,而且在存储的层面上提高了数据的安全性。通过分类的存储模式让数据管理更加安全便捷,更能实现对数据的调用和对比,并且方便查询等操作的使用。

什么是数据库

数据库是数据管理的有效技术,是由一批数据构成的有序集合,这些数据被存放在结构化的数据表里。数据表之间相互关联,反映客观事物间的本质联系。数据库能有效地帮助一个组织或企业科学地管理各类信息资源。

数据是数据库中存储的基本对象,是按一定顺序排列组合的物理符号。数据有多种表现形式,可以是数字、文字、图像,甚至是音频或视频,它们都可以经过数字化后存入计算机。

数据库是数据的集合,具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享。

在日常生活中,人们可以直接用中文、英文等自然语言描述客观事物。在计算机中,则要抽象出对这些事物感兴趣的特征,并组成一个记录来描述。

例如,在学生档案中,学生信息是由学号、姓名、性别、年龄、籍贯、联系电话等特征组成的,那么这些具体的特征值所构成的一条记录就是一个学生的信息数据,例如“2016010102,张三,男,26,山西,计算机学院,185********”。

值得注意的是,数据的描述形式还不能完全表达其内容,需要经过解释。例如,对于上面这条学生记录,了解其含义的人会得到这样的信息:张三的学号是 2016010102,今年 26 岁,山西人,就读于计算机学院,他的联系电话是 185********;而不了解其语义的人则无法理解其含义。所以,数据和对数据的解释是不可分的,数据的解释是指对数据含义的说明,数据的含义也称数据的语义,因此数据与其语义密不可分,没有语义的数据是没有意义和不完整的。

数据库的存储结构

数据库的存储结构是指数据库中的物理数据和逻辑数据的表示形式、物理数据和逻辑数据之间关系映射方式的描述。在数据库技术中,可以使用两种形式描述客观现实的数据:物理数据描述和逻辑数据描述。物理数据和逻辑数据之间的转换通过数据库管理系统实现。

物理数据描述

物理数据描述是指数据在存储设备上的存储方式,物理数据是实际存放在存储设备上的数据,这些数据也称为物理记录。根据物理记录存储的位置,又可以分为有序存储和无序存储。

在物理数据描述中,使用的数据描述术语包括以下各项。
位(bit) :二进制的一个单位称为位,位只能取 1 或 0。
字节(byte) :8 个位称为一个字节,可以存放对应 ASCII 码的一个字符。
字(word) :若干个字节组成一个字。一个字所含的二进制的位数称为字长,许多计算机的字长是不同的,例如计算机的字长可以是 8 位、16 位、24 位、32 位等。
块(block) :内存储器和外存储器交换信息的最小单位,又称为物理块或物理记录,每块的大小通常为 256 字节、512 字节、1024 字节等。
卷(volume) :一台输入输出设备所能装载的全部有用信息,例如磁带机的一盘磁带即为一卷,磁盘设备的一个盘组也是一卷。
无序存储(unordered) :数据记录按照插入的顺序进行存储。

逻辑数据描述

逻辑数据描述是指用户或程序员用于操作的数据形式,逻辑数据是一种抽象的概念,是对客观现实世界的反映和记录,这些数据也可以称为逻辑记录。

逻辑数据包含两个层次,一个层次是对客观现实信息世界的描述,另一个层次是对数据库管理系统中数据的描述。

在对客观现实信息世界的描述中,使用的术语包括以下几项。
实体(entity) :客观现实存在的东西使用实体来描述。实体既可以是具体的、有形的对象,也可以是抽象的、无形的对象。例如,一本书是一个有形对象,一次借书过程则是一个无形的对象。
实体集(entities) :特性完全相同的同类实体的集合称为实体集。例如,一个图书馆所有的书籍是一个实体集,该图书馆的所有借书过程也是一个实体集。
属性(attribute) :实体的特性称为属性。每个属性都有一个值域,这些值域可以是整数类型、浮点数类型、字符类型或日期类型等。例如,实体书的属性包括书名、书号、出版日期、页数、价格以及出版社等,这些属性对应的值域分别为字符类型、字符类型、日期类型、整数类型、浮点数类型和字符类型等。
标识符(identifier) :能够唯一地标识每个实体的属性或属性集。例如,书的书号属性是实体书的标识符,借书过程实体的标识符包括借书证号、书号两个属性。

这些逻辑数据最终要通过数据库管理系统来转换成物理数据。在数据库管理系统中,描述逻辑数据的术语包括哪些呢?

下面以关系型数据库管理系统为例进行介绍。
数据项(data item) :也称为字段(field),标记实体属性的可以命名的最小信息单位,数据项的命名一般采用属性的描述性名称。这些名称可以是中文、英文或汉语拼音。
元组(tuple) :也称为记录(record),数据项的集合称为元组。一个元组表示一个具体的实体。
关系(relation) :在关系型数据库系统中,同一类元组所在的集合称为关系。关系适用于描述实体集,它包括一个实体集的所有元组。例如,所有的图书可以组成一个 books 关系。
键码(key) :在关系型数据库系统中,能够唯一地标识关系中每个元组的数据项或数据项的组合称为关系的键码。

客观实体经过两层逻辑数据的描述,最后转变成实际存储的物理数据。

数据库在开发中的作用

从数据库系统应用角度来看,数据库系统常见的运行与应用结构有:客户端/服务器结构、浏览器/服务器结构。

在客户端/服务器(Client/Server,C/S)结构中,数据库的使用者(如 DBA、程序设计者)通过命令行客户端、图形化界面管理工具或应用程序等连接到数据库管理系统,可以通过数据库管理系统查询和处理存储在底层数据库中的各种数据。

数据库使用者与命令行客户端、图形化界面管理工具或应用程序等直接交互,而不与数据库管理系统直接联系。

在这种结构中,命令行客户端、图形化界面管理工具或应用程序等称为“客户端”或“前台”,主要完成与数据库使用者的交互任务;而数据库管理系统则称为“服务器”或“后台”,主要负责数据管理。这种结构经常被称为“C/S”结构。

在客户端/服务器模式中,客户端和服务器可以同时工作在同一台计算机上,这种工作方式称为“单机方式”;也可以“网络方式”运行,即服务器被安装和部署在网络中某一台或多台主机上。

对于客户端应用程序的开发,目前常用的语言工具主要有 Visual C++、Delphi、.NET 框架、Visual Basic、Python 等。

数据库能有效存储数据,读取数据、查找数据更是方便,其实那些管理软件就是通过软件的界面向内部的数据库进行数据的增、删、改、查操作。

数据库创建

MySQL的字符集与字符排序规则

在创建数据库之前,我们要先聊聊数据库的字符集与字符排序规则

字符集 规定存储的数据编码格式。
字符排序规则 在规定的存储的数据编码格式下的比较规则,如区分不区分大小写等
说明:
字符集
常见的字符集有utf8和utf8mb4两种,在MySQL中utf8编码最多支持3字节的数据,utf8mb4最多支持4个字节的数据,移动端的表情数据是4个字节的字符,所以必须使用utf8mb4格式才能正确的存储.
字符排序规则
常见的字符排序规则有utf_bin和utf_general_ci两种,bin 是二进制, a 和 A 会别区别对待.例如你运行:

select * from table where a = 'a'

那么在utf8_bin中你就找不到 a = ‘A’ 的那一行, 而 utf8_general_ci 则可以 utf8_general_ci校对速度快,但准确度稍差。

所以我们创建数据库的时候会设置字符集为utf8mb4,字符排序规则为 utf8_general_ci

语法

CREATE DATABASE 数据库名;

创建数据库db_name

//创建数据库db_name
CREATE DATABASE db_name;
//创建字符集为utf8mb4字符排序规则为utf8_general_ci的数据库A
CREATE DATABASE A DEFAULT CHARACTER SET utf8mb4COLLATE utf8_general_ci;
//创建字符集为utf8 字符排序规则为utf8_general_ci的数据库B
CREATE DATABASE B DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
//查看数据库字符集
show variables like '%char%';

navicat里创建db_name数据库

navicat里创建db_name数据库

删除数据库

语法

drop database 数据库名;

例子

删除数据库db_name

drop database db_name;

navicat里删除 XXX 数据库

navicat里删除 XXX 数据库

选择数据库

我们本地安装的数据库软件上创建了A数据库和B数据,他们都存在一张a表,那么我们在查询a表数据时

select * from table where a;

软件就不能知道你此时需要查询那个数据库,所以我们在查询数据库前还需要先选择查询那个数据库

语法

use 数据库名;

例子

选择A数据库

use A;

数据类型

MySQL中定义数据字段的类型对你数据库的优化是非常重要的。
MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

MySQL支持所有标准SQL数值数据类型。

为了数据存储方便,我们在存储数据的时候,会用数字代表某些意思,如邮编代表地区

由于数据类型过多,我们前期不做过多的类型的介绍,就根据数据三大类型介绍几种我们常用的外加一个位数据类型(也称二进制类型)

二进制类型

bit 位字段类型 值只有 true (1)和 false(0),用来保存对和错,或者用来代表性别 男和女

数值类型

类型大小范围(有符号)范围(无符号)用途备注
tinyint1 字节(-128,127)(0,255)小整数值一般用来代表某些类型固定,且数量不超过127的
int或integer(一样的)4 字节(-2 147 483 648,2 147 483 647)(0,4 294 967 295)大整数值如果数据量不会太庞大,id我们可以用这这类
double8 字节(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度 浮点数值双精度代表可以存放小数位,一般用来存放带小数点的值,且精准度不需要太高
decimal对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值decimal是精准数据类型,用于要求非常高的精确度的计算中,一般涉及金钱的都用这个数据类型

日期和时间类型

类型大小范围(有符号)范围(无符号)用途备注
date31000-01-01/9999-12-31YYYY-MM-DD日期值例如 2020-04-03
time3‘-838:59:59’/‘838:59:59’HH:MM:SS时间值或持续时间23:59:59
year11901/2155YYYY年份值2020
datetime81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS混合日期和时间值2020-04-03 23:59:59 一般时间存放这个,取值的时候 如果只需要年份 可以转化

字符串类型

类型大小用途备注
varchar0-65535 字节变长字符串一般普通字符串存此类型
text0-65 535字节长文本数据遇到长的字符串时 用此类型
longtext0-4 294 967 295字节极大文本数据如图片转换为字节存储,或者其它超长文本

navicat里对应的类型

在这里插入图片描述

创建数据表

删除数据表

插入数据

查询数据