MySQL原理设计与应用
Posted qq_40055200
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL原理设计与应用相关的知识,希望对你有一定的参考价值。
概述:
数据库(DataBase,DB):按照数组结构来组织,存储和管理数据的仓库,其本身可被看作电子化的文件柜,用户可以对文件中的数据进行增删改查等操作。
数据库系统是指计算机系统中引入数据库后的系统,除了数据库,还包括数据库管理系统(DBMS).数据库应用程序。
SQL语言(Structured Query Language,结构化查询语言)是一种数据库查询语言和程序设计语言,主要用于管理数据库中的数据,如存取数据,查询数据,更新数据等
SQL是由4部分组成的
数据定义语言
数据库定义语言(Data Definition Language,DDL)主要用于定义数据库,表等
例如,CREATE语句用于创建数据库,数据表等,ALTER语句用于修改表的定义等,DROP语句用于删除数据库,删除表等;
数据操作语言
数据操作语言(Data Mainpulation Language,DML)主要用于对数据库进行添加,修改和删除操作。
例如,INSERT语句用于插入数据,UPDATE语句用于修改数据,DELETE语句用于删除数据
数据查询语言
数据查询语言(Data Query Language,DQL)主要用于查询数据
例如,使用SELECT语句可以查询数据库中的一条数据或多条数据
数据控制语言
数据控制语言(Data Control Language,DCL)主要用于控制用户的访问权限
例如,GRANT语句用于给用户增加权限,REVOKE语句主要用于收回用户得权限,COMMIT语句用于提交事物,ROLLBACK语句用于回滚事物
数据库操作
创建数据库
创建数据库就是在数据库系统中划分一块存储数据的空间。
CREATE DATABASE 数据库名称[库选项]
CREATE DATABASE 表示创建数据库
数据库名称可以是字母,数字和下划线组成的任意字符串
“库选项”用于设置此数据库的相关特性,如字符集CHARSET,校对集COLLATE
语法内使用"[]"括起来的选项表示可选参数
下面是创建一个名称为mydb的数据库,具体sql语句与执行结果如下。
mysql>CREATE DATABASE mydb;
Query OK,1 row affected (0.00 sec)
查看所有数据库
查看所有的数据库
SHOW DATABASE
MYSQL服务器已有4个数据库,这些数据库都是MySQL安装时自动创建的
+-------------------+
|information_schema |
|performance_schema |
|mysql |
|sys |
+-------------------+
information_schema和performance_schema 数据库分别是MySQL服务器的数据字典(保存所有数据表和库的结构信息)和性能字典(保存全局变量等的设置)
“mysql”数据库主要负责MySQL服务器自己需要使用的控制和管理信息,如用户的权限关系等
sys是系统数据库,包括了存储过程,自定义函数等信息
MYSQL原理设计与应用
概述
数据库(Database,DB)是按照数据结构来组织、存储和管理数据的仓库,其本身可被看作电子化的文件柜,用户可以对文件中的数据进行增删改查等操作。
数据库系统是指在计算机系统中引入数据库后的系统,除了数据库,还包括数据库管理系统(Database Management System,DBMS)、数据库应用程序。
数据库技术的发展
🐬人工管理阶段
- 数据不在计算机中长期保存
- 没有专门的数据管理软件,数据需要应用程序自己管理
- 数据是面向应用程序的,不同的应用程序之间无法共享数据
- 数据不具有独立性,完全依赖于应用程序
🐬文件系统阶段
- 数据可以在计算机外存设备上长期保存,可以对数据反复进行操作
- 通过文件系统管理数据,文件系统提供了文件管理功能和存取方法
- 在一定程度上实现了数据独立性和共享性,但非常的薄弱
🐬数据库系统阶段
- 数据结构化
- 数据共享
- 数据独立性高
- 数据统一管理与控制
三级模式
美国国家标准协会(American National Standards Institute,ANSI)所属的标准计划与需求委员会(Standards Planning and Requirements Committee,SPARC)在1971年公布的研究报告中提出了 ANSI-SPARC体系结构,即三级模式结构(或三层体系结构)。
ANSI-SPARC最终没有成为正式标准,但它仍然是理解数据库管理系统的基础。
三级模式是指数据库管理系统从三个层次来管理数据,分别是外部层(External Level)、概念层(Conceptual Level)和内部层(Internal Level)。
这三个层次分别对应三种不同的模式,分别是外模式、概念模式和内模式。
在外模式与概念模式之间,以及概念模式与内模式之间,还存在映像,即二级映像。
外模式面向应用程序,描述用户的数据视图;内模式(又称物理模式、存储模式)面向物理上的数据库,描述数据在磁盘中如何存储;概念模式(又称为模式、逻辑模式)面向数据库设计人员,描述数据的整体逻辑结构。
由于三级模式比较抽象,为了好理解,假设有一个电子表格来保存商品信息表,如下:
🐬概念模式
概念模式类似于表格的列标题,他描述了商品表中包含哪些信息。
概念模式在数据库中描述的信息还有很多,如多张表之间的联系,表中每一列的数据类型和长度等。
🐬内模式
Excel表格另存为文件时,可以选择保存的文件路径、保存类型等,这些与存储想关的描述信息相当于内模式。
在数据库中内模式描述数据的物理结构和存储方式,如堆文件、索引文件、散列(Hash)文件等。
🐬外模式
在打开一个电子表格会显示表格中全部的数据,将数据提供给用户时,出于权限,安全控制等因素考虑,只允许用户看到一部分数据,或不同用户看到不同的数据,这样的需求就可以用视图来实现。视图和基本表的关系如下:
基本表中的数据是实际储存在数据库中的,而视图中的数据是查询或计算出来的。由此可见,外模式可以为不同的用户需求创建不同的视图,由于不同的用户需求不同,数据显示方式也会多种多样。
一个数据库中会有多个外模式,而概念模式和内模式则只有一个
二级映像
三级模式是数据的三个抽象级别,每个级别关系的重点不同。为了使三级模式之间产生关联,数据库管理系统在三级模式之间提供了二级映像功能。
二级映像是一种规则,它规定了映像双方如何进行转换。通过二级映像,体现了逻辑和物理两个层面的数据独立性。
🐬逻辑独立性
外模式/概念模式映像体现了逻辑独立性。逻辑独立性是指当修改了概念模式,不影响上一层的外模式。
例如,将表库存和销量拆分到另一张表中,此时概念模式发生了更改,但可以通过改变外模式/概念模式的映像,继续为用户提供原有视图。
由此可见,逻辑独立性能够让使用视图的用户感觉不到基本表的改变。
🐬物理独立性
概念模式/内模式映像体现了物理独立性。物理独立性是指修改了内模式,不影响上层的概念模式和外模式。
例如,在 Excel 中将 .xls 文件另存为 .xlsx 文件,虽然文件格式变了,但打开文件后显示的表格内容一般不会发生改变。
在数据中,更换了更先进的存储结构,或者创建索引来加快查询速度,内模式会发生改变。此时,只需要改变概念模式/内模式映像,就不会影响到原有的概念模式。
物理独立性使得用户不必了解数据库内部的存储原理,即可正常使用数据库来保存数据。数据库管理系统会自动将用户的操作转换成物理级数据库的操作。
数据库相关的人员
数据库系统涉及一些人员,主要包括数据库管理员(Database Administrator,DBA)、应用程序员(Application Programmer)和最终用户(End User)。
🐬数据库管理员
数据库管理员负责管理和维护数据库,参与数据库的设计、测试和部暑。
🐬应用程序员
应用程序员负责为最终用户设计和编写程序,并进行调试和安装,以便最终用户利用应用程序来对数据库进行存取操作。
🐬最终用户
最终用户一般为非计算机专业人员,通过应用程序访问数据库。
数据模型
数据建模
数据建模是对现实世界中的各类数据的抽象组织,以确定数据库的管辖范围、数据的组织形式等。
数据建模大致分为3个阶段,分别是概念建模阶段、逻辑建模阶段、物理建模阶段,相应的产物分别是概念模型、逻辑模型和物理模型。
概念模型是现实世界到机器世界的中间层,它将现实世界中的客观对象(如学生、班级、课程)抽象成信息世界的数据。
逻辑模型是指数据的逻辑结构,可以选择层次模型、网状模型或关系模型。
在完成逻辑模型后,最后使用物理模型描述数据如何进行实际存储,也就是将逻辑模型转换成计算机能够识别的模型。
概念模型的术语
在概念模型中可以通过一些术语来对现实世界进行抽象。
🐬实体
实体(Entity)是指客观存在并可相互区分的事物,如学生、班级、课程。
🐬属性
属性(Attribute)是指实体所具有的某一特性,一个实体可以由若干个属性来描述。
例如,学生实体的属性有学号、学生姓名和学生性别。属性由两部分组成,分别是属性名和属性值。
🐬联系
联系(Relationship)是指实体与实体之间的联系,有一对一、一对多、对多对三种情况。
例如,每个学生都有一个学生证,学生和学生证之间是一对一的联系;一个班级有多个学生,班级和学生是一对多的联系;一个学生可以选修多门课程,一门课程又可以被多个学生选修,学生和课程之间就形成了多对多的联系。
🐬实体型
实体型(EntityType)即实体类型,通过实体名(如学生)及其属性名集合(如“学号、学生姓名、学生性别”)来抽象描述同类实体。
🐬实体集
实体集(Entity Set)是指同一类型的实体集合,如全校学生就是一个实体集。
E-R图
E-R图也称为实体-联系图(Entity Relationship Diagram),是一种用图形表示的实体联系模型,由Peter Chen于1976年提出。
E-R图提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。其通用的表示方式如下:
实体: 用矩形框表示,将实体名写在框内。
属性: 用椭圆框表示,将属性名写在框内,用连线将实体与属性连接。
联系: 用菱形框表示,将联系名写在框内,用连线将相关的实体连接,并在连线旁标注联系类型(一 0 对 一 “1:1”、一对多 “1:n”、多对多 “n:m”)。
关系模型
关系模型由IBM公司研究员 Edgar Frank Codd 于1970年发表的论文中提出,经过多年的发展,已经成为目前最常用、最重要的模型之一。在关系模型中有一些基本的概念。
🐬关系
关系(Relation)一词与数学领域有关,它是集合基础上的一个重要的概念,用于反映元素之间的联系和性质。
从用户角度来看,关系模型的数据结构是二维表,即通过二维表来组织数据。一个关系对应一张二维表,表中的数据包括实体本身的数据和实体间的联系。
🐬属性
二维表中的列称为属性(Attribute),每个属性都有一个属性名。
🐬元组
二维表中的每一行数据称为一个元组(Tuple)。
根据不同的习惯,属性也可以称为字段(Field),元组也可以称为记录(Record)。
🐬域
域(Domain)是指属性的取值范围。
🐬关系模式
关系模式(Relation Schema)是关系的描述,通常可以简记为“关系名(属性1,属性2,…,属性n)。
🐬键
在二维表中,若要唯一标识某一条记录,需要用到键(又称为关键字、码)。
关系模型的完整性
为了保证数据库中数据的正确性和相容性,需要对关系模型进行完整性约束。完整性通常包括实体完整性、参照完整性和用户自定义完整性。
🐬实体完整性
实体完整性要求关系中的主键不能重复,且不能取空值。
空值是指不知道、不存在或无意义的值。
由于关系中的元组对应现实世界中互相之间可区分的个体,这些个体使用主键来唯一标识,若主键为空或重复,则无法唯一标识每个个体。
🐬参照完整性
参照完整性要求关系中的外键要么取空值,要么取被参照关系中的某个元组的主键值。
例如,通过学生所属的班级号可以找到对应的班级,这就符合参照完整性;而如果对应的班级被删除了,学生通过班级号找不到班级,就不符合参照完整性。
🐬用户自定义完整性
用户自定义完整性是用户针对具体的应用环境定义的完整性约束条件,由DBMS检查用户自定义的完整性
关系运算
关系模型可以使用关系代数(Relational Algebra)来进行关系运算。关系代数是一种抽象的查询语言,是研究关系模型的数学工具。关系代数运算符主要包括并、差、交、笛卡儿积、选择、投影、连接和除。
并、差、交
并(Union)、差(Difference)、交(Intersection)运算要求参与运算的两个关系具有相同数量的属性,其运算结果是一个具有相同数量属性的新关系。
笛卡尔积
选择、投影
选择(Selection)是在一个关系中将满足条件的元组找出来,即水平方向筛选。
投影(Projection)是在一个关系中去掉不需要的属性,保留需要的属性,即垂直方向筛选。
连接
连接是在两个关系的笛卡儿积中选取属性间满足一定条件的元组。
由于笛卡儿积的结果可能会包含很多没有意义的元组,所以相比之下连接运算更为实用。
常用的连接方式有等值连接(Equi-Join)和自然连接(Natural Join)。
自然连接是一种特殊的等值连接,要求R和S必须有相同的属性组,进行等值连接后再去除重复的属性组。
除
如果把笛卡儿积看作乘法运算,则除法是笛卡儿积的逆运算。
R÷S1 表示查询学号为2的学生所选的课程;R÷S2 表示查询学号为2和3的学生共同选择的课程。
SQL语言
SQL (Structured Query Language,结构化查询语言) 是一种数据库查询语言和程序设计语言,主要用于管理数据库中的数据,如存取数据、查询数据、更新数据等。
SQL是IBM公司于1975-1979年开发出来的,在20世纪80年代,SQL被美国国家标准学会(ANSI)和国际标准化组织(International Organization for Standardization,ISO)定义为关系数据库语言的标准。
SQL是由4部分组成的。
🐬数据定义语言
数据库定义语言(Data Definition Language,DDL)主要用于定义数据库、表等。
例如,CREATE语句用于创建数据库、数据表等,ALTER语句用于修改表的定义等,DROP语句用于删除数据库、删除表等。
🐬数据操作语言
数据操作语言(Data Manipulation Language,DML)主要用于对数据库进行添加、修改和删除操作。
例如,INSERT语句用于插入数据,UPDATE语句用于修改数据,DELETE语句用于删除数据。
🐬数据查询语言
数据查询语言(Data Query Language,DQL)主要用于查询数据。
例如,使用SELECT语句可以查询数据库中的一条数据或多条数据。
🐬数据控制语言
数据控制语言(Data Control Language,DCL)主要用于控制用户的访问权限。
例如,GRANT语句用于给用户增加权限,REVOKE语句用于收回用户的权限,COMMIT语句用于提交事务,ROLLBACK语句用于回滚事务。
安装MYSQL
下载地址: https://dev.mysql.com/downloads/mysql/
本文安装的是mysql5.7.22版作为演示。
0️⃣解压下载好的mysql压缩包,我这里解压到C:\\mysql5.7目录。
1️⃣打开命令提示符窗口,在命令模式下,切换到 MYSQL 安装目录下的bin目录
cd C:\\mysql5.7\\bin
2️⃣输入安装命令
mysqld -install
🐬在安装MySQL时,还有一些常见的问题需要注意
MySQL安装的服务名默认为 “MySQL”,如果该名称已经存在,则会安装失败,提示The service already exists!
此时可能是系统中已经安装了MySQL,可以通过如下命令进行卸载,卸载后再进行安装。
mysqld -remove
MySQL允许在安装或卸载时指定服务名称,从而实现多个MySQL服务共存。
例如,当需要同时安装MySQL5.7和8.0时,分别指定不同的服务名称即可实现。
mysqld -install "服务名称"
mysqld -remove "服务名称"
MySQL服务默认监听3306端口,如果该端口被其他服务占用,会导致客户端无法连接服务器。
在命令行中可用 netstat -ano
命令查看端口占用情况。
为了获知该进程是哪一个程序,执行 tasklist | findstr "4204”
命令
当前是 mysqld.exe 占用了3306端口,说明MySQL服务正在工作。如果是其他程序占用了3306端口,只需将对应的服务停止即可。
3️⃣使用文本编辑器创建配置文件 C:\\mysql5.7\\my.ini,编写如下:
[mysqld]
basedir=C:\\mysql5.7
datadir=C:\\mysql5.7\\data
port=3306
basedir 表示MySQL的安装目录;datadir 表示数据库文件的保存目录;port 表示MySQL服务的端口号。
在没有配置文件的情况下,MySQL会自动检测安装目录、数据文件目录。
但由于不同MySQL版本的路径可能有区别,所以建议通过配置文件来指定。
另外,Linux系统中通常使用 my.cnf 作为配置文件的文件名,在Windows系统中也可以使用该文件名。
4️⃣初始化数据库
创建my.ini配置文件后,数据库文件目录 C:\\mysql5.7\\data 还没有创建。接下来需要通过MySQL的初始化功能,自动创建数据文件目录
mysqld --initialize-insecure
“-initialize”表示初始化数据库,“-insecure”表示忽略安全性。
当省略 “insecure” 时,MySQL将自动为默认用户 “root” 生成一个随机的复杂密码,而加上 “insecure” 时,“root”用户的密码为空。由于自动生成的密码输人比较麻烦,因此这里选择忽略安全性。
MySQL5.5和5.6版本中已经提供了data目录,不需要初始化数据库。只有安装5.7和8.0版本时需要执行上述命令。
5️⃣管理MySQL服务
MySQL安装完成后,需要启动服务进程,否则客户端无法连接数据库。在前面的配置过程中,已经将MySQL安装为Windows服务。
MySQL服务不仅可以通过Windows服务管理器启动,还可以通过命令行来启动。
使用管理员身份打开命令提示符,输人如下命令启动名称为 MySQL 的服务。
net start MySQL
停止服务
net stop MySQL
6️⃣登录MYSQL
在 MySQL 的 bin 目录中,mysql.exe 是 MySQL 提供的命令行客户端工具,用于访问数据库。
该程序不能直接双击运行,需要打开命令行窗口,执行 cd C:\\mysql5.7\\bin 命令切换工作目录,然后执行如下命令登录MySQL服务器。
mysql -u root
“mysql”表示运行当前目录下的 mysql.exe。
“-u root” 表示以root用户的身份登录,其中,“-u”和“root”之间的空格可以省略。
如果需要退出MySQL,可以直接使用 exit 或 quit 命令。
命令行客户端工具还有一些常用选项。其中,“-h” 用于指定登录的MySQL服务器地址(域名或IP),如“-hlocalhost” 或 “-h 127.0.0.1” 表示登录本地服务器。选项“-P”(必须用大写字母P)用于指定连接的端口号,如“-P3306”表示连接3306端口。
7️⃣设置密码
为了保护数据库的安全,需要为登录MvSQL服务器的用户设置密码。
下面以设置root用户的密码为例,登录MySQL后,执行如下命令即可。
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
上述命令表示为 localhost 主机中的 root 用户设置密码,密码为“123456”。
当设置密码后,退出MySQL,然后重新登录时,就需要输入刚才设置的密码。
在登录有密码的用户时,需要使用的命令如下。
mysql -uroot -p123456
在上述命令中,“-p123456” 表示使用密码 “123456” 进行登录。如果在登录时不希望密码被直接看到,可以省略“-p”后面的密码,然后按回车键,会提示输入密码。
在设置密码后,如果需要取消密码,可以使用如下命令。
mysql>ALTER USER 'root'@ 'localhost' IDENTIFIED BY ''
上述命令将密码设为空,即可免密码登录。
8️⃣设置环境变量
在启动 MYSQL 客户端前,确保命令提示符当前位于 C:\\mysql5.7\\bin 目录,执行命令将 bin 目录添加到环境变量。
setx PATH "%PATH%;C:\\mysql5.7\\bin"
执行上述命令后,关闭当前命令行窗口,重新打开一个新的命令行窗口即可生效。
数据库操作
创建数据库
创建数据库就是在数据库系统中划分一块存储数据的空间。
🐬语法格式
CREATE DATABASE 数据库名称[库选项]
CREATE DATABASE 表示创建数据库;
数据库名称可以是字母、数字和下划线组成的任意字符串;
“库选项” 用于设置此数据库的相关特性,如字符集CHARSET,校对集COLLATE。
语法内使用 “[ ]” 括起来的选项表示可选参数。
下面创建一个名称为 mydb 的数据库,具体SQL语句与执行结果如下。
mysql>CREATE DATABASE mydb;
Query OK,1 row affected (0.00 sec)
在创建数据库后,MySQL.会在存储数据的data目录中创建一个与数据库同名的子目录(即mydb),同时会在mydb目录下生成一个 db.opt 文件,保存数据库选项,打开data\\mydb\\db.opt文件,如下所示。
default-character-set=latin1
default-collation-Latin1——swedish_ci
mydb 数据库的默认字符集为 latin1,校对集为 Latin1_swedish_ci。
创建的数据库已存在,则程序会报错,可以在创建数据库名称前添加 IN NOT EXISTS
。表示指定的数据库不存在时执行创建,否则忽略此操作。
查看数据库
🐬查看所有的数据库
SHOW DATABASE
MySQL服务器已有4个数据库,这些数据库都是MySQL安装时自动创建的。
+-------------------+
|information_schema |
|performance_schema |
|mysql |
|sys |
+-------------------+
information_schema 和 performance_schema 数据库分别是 MySQL 服务器的数据字典(保存所有数据表和库的结构信息)和性能字典(保存全局变量等的设置)。
“mysql” 数据库主要负责MySQL服务器自己需要使用的控制和管理信息,如用户的权限关系等。
sys 是系统数据库,包括了存储过程、自定义函数等信息。
🐬查看指定数据库的创建信息
SHOW CREATE DATABASE 数据库名称;
选择数据库
由于MySQL服务器中的数据需要存储到数据表中,而数据表需要存储到对应的数据库下,并且MYSQL服务器中又可以同时存在多个数据库,因此,在对数据和数据表进行操作前,首先需要选择数据库。
USE 数据库名称;
🐬登录 MYSQL 时选择数据库
mysql -u 用户名 -p 密码 数据库名
删除数据库
DROP DATABASE 数据库名称;
若删除数据库不存在,mysql服务器会报错,可以在数据库名前添加 IF EXISTS
来判断删除的数据库是否存在,存在就删,不存在就不执行删除操作。
数据表操作
创建数据表
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 表名
(字段名 字段类型 [字段属性] …) [表选项]
TEMPORARY: 表示临时表,仅在当前会话中可见,并且在会话关闭时自动删除。
字段名:指的是数据表的列名。
字段类型:设置字段中保存的数据类型,如时间日期类型等。
字段属性:指的是字段的某些特殊约束条件。
表选项:用于设置表的相关特性,如存储引擎(ENGINE)、字符集(CHARSET)和校对集(COLLATE)。
在操作数据表之前,应该使用 USE 数据库名
指定操作是在哪个数据库中进行,否则会抛出 No database selected
错误。
🐬例如:创建名为 goods 的数据表
create table goods (
id int comment '编号',
name varchar(32) comment '商品名'
);
INT用于设置字段数据类型是整型。
VARCHAR(L)表示可变长度的字符串,L表示字符数,如VARCHAR(32)表示可变的字符数是32。
COMMENT用于在创建表时添加注释内容,并将其保存到表结构中。
查看数据表
SHOW TABLES [LIKE 匹配模式];
若不添加可选项 LIKE匹配模式
,表示查看当前数据库中的所有数据表;
若添加则按照 匹配模式
查看数据表。其中,匹配模式符有两种,分别为 %
和 _
。前者表示匹配一个或多个字符,代表任意长度的字符串,长度也可以为0,后者仅可以匹配一个字符。
LIKE 后的匹配模式必须使用单引号或双引号包裹
🐬查看数据表的相关信息
SHOW TABLES STATUS [FROM 数据库名] [LIKE 匹配模式];
修改数据表
🐬修改数据表名称
语法格式1:
ALTER TABLE 旧表名 RENAME [TO|AS] 新表名;
语法格式2:
RENAME TABLE 旧表名1 TO 新表名1 [旧表名2 TO 新表名2] ...;
🐬修改表选项
ALTER TABLE 表名 表选项 = 值;
查看表结构
🐬查看数据表的字段信息
查看所有字段的信息
DESCRIBE | DESC 数据表名;
查看指定字段信息
DESCRIBE | DESC 数据表名 字段名;
🐬查看数据的创建语句
SHOW CREATE TABLE 表名;
🐬查看数据表结构
语法格式1:
SHOW [FULL] COLUMNS FROM 数据表名 [FROM 数据库名];
语法格式2:
SHOW [FULL] COLUMNS FROM 数据库名.数据表名;
可选项 FULL 表示显示详细内容,在不添加的情况下查询结果与 DESC 的结果相同。
在添加 FULL 选项时此语句不仅可以查看到 DESC 语句查看的信息,还可以查看到字段的权限、COMMENT字段的注释信息等。
修改表结构
🐬修改字段名
ALTER TABLE 数据表名 CHANGE [COLUMN] 旧字段名 新字段名 字段类型 [字段属性];
数据类型表示新字段名的数据类型,不能为空,即使与旧字段的数据类型相同,也必须重新设置。
🐬修改字段类型
ALTER TABLE 数据表名 MODIFY [COLUMN] 字段名 新字段类型 [字段属性];
🐬修改字段的位置
ALTER TABLE 数据表名 MODIFY [COLUMN] 字段名1 数据类型 [字段属性] [FIRST | AFTER 字段名2];
🐬新增字段
语法格式1:新增一个字段,并可指定其位置
ALTER TABLE 数据表名 ADD [COLUMN] 新字段名 字段类型 [FIRST | AFTER字段名];
语法格式2:同时新增多个字段
ALTER TABLE 数据表名 ADD [COLUMN] (新字段名1 字段类型1, 新字段名2 字段类型2,…);
在不指定位置的情况下,新增的字段默认添加到表的最后。另外,同时新增多个字段时不能指定字段的位置。
🐬删除字段
ALTER TABLE 数据表名 DROP [COLUMN] 字段名;
删除数据表
DROP [TEMPORARY] TABLE [IF EXISTS] 数据表 1 [,数据表2] ...;
数据操作
添加数据
🐬为所有的字段添加数据
严格按照数据表结构(字段的位置)插入对应的值。
INSERT [INTO] 数据表名 VALUES | VALUE (值1 [,值2] ...);
在MySQL中,若创建的数据表未指定字符集,则数据表及表中的字段将使用默认的字符集latin1。
因此,若用户插入的数据中含有中文,则会出现错误提示。
为为了解决以上中文插入的问题,通常在创建数据表时添加表选项,设置数据表的字符集。
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 表名 (字段名 字段类型[字段属性] ...) [DEFAULT] CHARACTER SET[CHARSET [=] utf8;
🐬为部分字段添加数据
除了为数据表中所有字段添加数据外,还可以通过指定字段名的方式增加数据。
其中指定的字段名可以是数据表中全部的字段,也可以是部分的字段。
INSERT [INTO] 数据表名(字段名1 [,字段名2 ...) VALUES | VALUE (值1[, 值2] ...);
除此之外,MySQL中还提供了另外一种使用 INSERT 语句为指定字段添加数据的方式。
INSERT [INTO] 数据表名 SET 字段名1 = 值1 [,字段名2 = 值2] ...;
🐬一次添加多行数据
INSERT [INTO] 数据表名 [(字段列表)] VALUES | VALUE (值列表)[,值列表] ...;
在多数据插入时,若一条数据插人失败,则整个插人语句都会失败。
查询数据
🐬查询表中全部数据
SELECT * FROM 数据表名;
🐬查询表中部分字段
SELECT (字段名1, 字段名2, 字段名3, ...) FROM 数据表名;
🐬简单条件查询数据
SELECT (字段名1, 字段名2, 字段名3, ...) FROM 数据表名 WHERE 字段名 = 值;
修改数据
UPDATE 数据表名 SET 字段名1 = 值1[,字段名2 = 值2] [WHERE 条件表达式];
若没有where条件,那么表中对应的字段全部都会被修改
删除数据
DELETE FROM 数据表名 [WHERE 条件表达式];
常用转义字符
转义字符 | 含义 | 转义字符 | 含义 |
---|---|---|---|
\\0 | 空字符(NULL) | \\t | 制表符(HT) |
\\r | 回车符(CR) | \\b | 退格(BS) |
\\n | 换行符(LE) | \\’ | 单引号 |
\\" | 双引号 | \\% | %(常用于LIKE条件) |
\\\\ | 反斜线 | \\_ | _(常用于LIKE条件) |
数据类型
数字类型
🐬整数类型
数据类型 | 字节数 | 无符号数的取值范围 | 有符号数的取值范围 |
---|---|---|---|
TINYINT | 1 | 0~255 | - 128 ~ 127 |
SMALLINT | 2 | 0~65 535 | - 32 768 ~ 32 767 |
MEDIUMINT | 3 | 0~16 777 215 | - 8 388 608 ~ 8 388 607 |
INT | 4 | 0~4 294 967 295 | - 2 147 483 648 ~ 2 147 483 647 |
BIGINT | 8 | 0 ~ 18 446 744 073 709 551 615 | - 9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 |
不同整数类型所占用的字节数和取值范围都是不同的。
占用字节数最小的是TINYINT,占用字节数最大的是BIGINT。
不同整数类型的取值范围可以根据字节数计算出来。例如,TINYINT 类型的整数占用1字节,1字节是8位,那么,TINYINT 类型无符号数的最大值就是 2^8 - 1
(即255), 有符号数的最大值就是 2^7 - 1
(即127)。
若使用无符号数据类型,需要在数据类型右边加上 UNSIGNED
关键字来修饰,例如,INT UNSIGNED
表示无符号 INT 类型。
+------+-----------------+----+----+--------+------+
|Field |TYPE |NUll|KEY |Default |Extra |
+------+-----------------+----+----+--------+------+
|int_1 |int(11) |YES | |NULL | |
|int_2 |int(10) unsigned |YES | |NULL | |
+------+-----------------+----+----+--------+------+
数据类型右边使用小括号数字标注了显示宽度。默认情况下,显示宽度是取值范围所能表示的最大宽度。对于有符号类型,符号也占用一个宽度。
例如,255的显示宽度为3,一128的显示宽度为4。
❗显示宽度与取值范围无关,若数值的位数小于显示宽度,会填充空格,若大于显示宽度,则不影响显示结果。
为字段设置零填充(ZEROFILL)时,若数值宽度小于显示宽度,会在左侧填充0。
例如,在 my_Int 表中设置零填充和宽度
CREATE TABLE my_Int (
int_1 INT(3) ZEROFILL,
int_2 TINYINT(6) ZEROFILL
);
设置零填充后,字段自动设为无符号类型,这是因为负数不能使用负填充。
🐬浮点数类型
数据类型 | 字节数 | 负数的取值范围 | 非负数的取值范围 |
---|---|---|---|
FLOAT | 4 | -3.402 823 466E + 38 ~-1.175 494 351E-38 | 0 和 1.175 494 351E-38~3.402 823 466E+38 |
DOUBLE | 8 | -1.797 693 134 862 315 7E + 308 ~ -2. 225 073 858 507 201 4E-308 | 0 和 2.225 073 858 507 201 4E-308~1.797 693 134 862 315 7E + 308 |
列举的取值范围是理论上的极限值,但根据不同的硬件或操作系统,实际范围可能会小。
当浮点数类型使用 UNSIGNED
修饰为无符号时,取值范围将不包含负数。
浮点数类型虽然取值范围很大,但是精度并不高。FLOAT的精度为6位或7位,DOUBLE 的精度大约为15位。如果超出精度,可能会导致给定的数值与实际保存的数值不一致,发生精度损失。
🐬定点数类型
定点数类型(DECIMAL) 通过 DECIMAL(M,D) 设置位数和精度,其中,M表示数字总位数(不包括“.”和“—”),最大值为65,默认值为10;D表示小数点后的位数,最大值为30,默认值为0。
例如,DECIMAL(5,2) 表示的取值范围是 -999.99~999.99。
若小数部分超出范围,会进行四舍五人,并出现 Data truncated(数据截断) 警告。
若整数部分超出范围,数据会插人失败,提示 Out of range value(超出取值范围)错误。
浮点数类型也可以设置位数和精度,如 float(8,2),但仍有可能损失精度。在实际使用时应避免使用浮点数类型,以免出现不能人为控制的问题。因此,对于小数类型的设置,推荐使用定点数类型并设置合理的范围可以使计算更为准确。
🐬BIT类型
BIT(位) 类型用于存储二进制数据,语法为BIT(M),M表示位数,范围为1~64。
时间和日期类型
数据类型 | 取值范围 | 日期格式 | 零 值 |
---|