编程语言
C#编程语言基础
C#面向对象与多线程
C#数据及文件操作
JavaScript基础
JavaScript的数据类型和变量
JavaScript的运算符和表达式
JavaScript的基本流程控制
JavaScript的函数
JavaScript对象编程
JavaScript内置对象和方法
JavaScript的浏览器对象和方法
JavaScript访问HTML DOM对象
JavaScript事件驱动编程
JavaScript与CSS样式表
Ajax与PHP
ECMAScript6的新特性
Vue.js前端开发
PHP的常量与变量
PHP的数据类型与转换
PHP的运算符和优先规则
PHP程序的流程控制语句
PHP的数组操作及函数
PHP的字符串处理与函数
PHP自定义函数
PHP的常用系统函数
PHP的图像处理函数
PHP类编程
PHP的DataTime类
PHP处理XML和JSON
PHP的正则表达式
PHP文件和目录处理
PHP表单处理
PHP处理Cookie和Session
PHP文件上传和下载
PHP加密技术
PHP的Socket编程
PHP国际化编码
MySQL数据库基础
MySQL数据库函数
MySQL数据库账户管理
MySQL数据库基本操作
MySQL数据查询
MySQL存储过程和存储函数
MySQL事务处理和触发器
PHP操作MySQL数据库
数据库抽象层PDO
Smarty模板
ThinkPHP框架
Python语言基础
Python语言结构与控制
Python的函数和模块
Python的复合数据类型
Python面向对象编程
Python的文件操作
Python的异常处理
Python的绘图模块
Python的NumPy模块
Python的SciPy模块
Python的SymPy模块
Python的数据处理
Python操作数据库
Python网络编程
Python图像处理
Python机器学习
TensorFlow深度学习
Tensorflow常用函数
TensorFlow用于卷积网络
生成对抗网络GAN
MySQL是一个小型关系数据库管理系统,具有体积小、速度快、成本低等特点,还开放源码,所以许多中小型网站都选择MySQL作为网站数据库。InnoDB存储引擎将InnoDB表保存在一个表空间内,最大容量64TB,可以轻松处理拥有上千万条记录的大型数据库。
可视化管理工具phpMyAdminphpMyAdmin是由PHP写成的MySQL数据库管理系统,管理者可以使用Web界面管理MySQL数据库。使用phpMyAdmin无需安装客户端软件,只要客户机上有浏览器即可进行管理操作。
要开发一个动态网站,数据库的使用是必不可少的。PHP几乎支持所有的数据库,与其中的MySQL数据库更是最佳组合,可以充分发挥二者的优势。
1.MySQL存储引擎:
存储引擎,就是如何存储数据、如何为存储的数据建立索引、如何更新数据、如何查询数据等技术的实现方法。在关系数据库中,数据是以表的形式存储,所以存储引擎也可称为表类型。MySQL数据库提供了多种存储引擎。
1)查询MySQL中支持的存储引擎:
SHOW ENGINES;
或
SHOW VARIABLES LIKE 'have%';
一般支持的存储引擎有MyISAM、CSV、MRG_MYISAM、BLACKHOLE、FEDERATED、InnoDB、ARCHIVE、MEMORY。
2)InnoDB存储引擎:
InnoDB提供了事务、回滚、崩溃修复哪里和多版本并发控制的事务安全。此外,InnoDB支持自动增长列AUTO_INCREMENT、支持外键FOREIGN KEY,但读写效率稍差,占用的数据空间相对比较大。常用于需要密集更新、事务处理、自动灾难恢复的场合。是默认的存储引擎。
3)MyISAM存储引擎:
MyISAM存储引擎的表为3个文件,文件名称与表名相同,扩展名分别为.frm、.myd和.myi,其中.frm存储表的结构,.myd存储数据,.myi存储索引。MyISAM存储引擎占用空间小,处理速度极快,但不支持事务的完整性和并发性。MyISAM支持静态、动态和压缩型存储,其中静态表性能非常高,但每列分配固定空间,无论是否使用。静态表不能使用xBLOB、xTEXT或VARCHAR数据类型,有任何一列为这些类型就定义为动态的。动态表占用空间少,但性能下降,而且内容发生改变很可能需要移动位置并导致碎片产生,需要常见使用OPTIMIZE TABLE整理碎片。如果是只读表,可以使用myisampack工具转换为压缩表以减少空间。
4)MEMORY存储引擎:
MEMORY存储引擎使用存储在内存中的内容来创建表,所有数据放在内存中,处理速度极快,但数据容易丢失,生命周期短。MEMORY表按固定长度格式存储,不支持BLOB、TEXT或VARCHAR数据类型,只用于临时需要且丢失数据不会对应用产生实质影响的场合,存储空间也有限。
2.数据类型:
在创建数据库表时,需要指定创建的每一个列的数据类型。在MySQL数据库中包含大量的类型,可以分为3类:数字类型、日期和时间类型和字符串类型。这3种数据类型需要不同的存储空间。
1)数字类型:
MySQL支持所有的ANSI/ISO SQL92数字类型,包括准确数字的数据类型numeric、decimal、integer和smallint,也包括近似数字的数据类型float、real和double precision。数字类型可分为整型和浮点型两类。对于小数点来说,可以指定小数点后数字的位数。对于整型数据,也可以指定为无符号类型。
整数类型如下表(其中的M指定最大的显示长度):
类型 |
取值范围 |
存储空间 |
描述 |
tinyint[(M)] |
-127~+128或0~255 |
1 |
非常小的整数 |
bit |
-127~+128或0~255 |
1 |
和tinyint一样 |
bool |
|
1 |
和tinyint一样 |
smallint[(M)] |
-32768~32768或0~65535 |
2 |
小类型整数 |
mediumint[(M)] |
-8388608~8388608或0~16777215 |
3 |
中类型整数 |
int[(M)] |
-2^31~2^31-1或0~2^32-1 |
4 |
一般整数 |
integer[(M)] |
|
4 |
同int |
bigint[(M)] |
-2^63~2^63-1或0~2^64-1 |
8 |
大类型整数 |
浮点类型如下表:
类型 |
取值范围 |
存储空间 |
描述 |
float(精度) |
取决于精度 |
可变 |
用于指定单精度和双精度浮点数 |
float[(M,D)] |
±1.175494351E-38 |
4 |
单精度浮点数,等同于float(4),但是指定显示宽度和小数位数 |
double[(M,D)] |
±1.7976931348623157E+308 |
8 |
双精度浮点数,等同于float(8),但是指定显示宽度和小数位数 |
double precision[(M,D)] |
同上 |
|
double[(M,D)]同义词 |
real[(M,D)] |
同上 |
|
double[(M,D)]同义词 |
decimal[(M,D)] |
可变 |
M+2 |
浮点数,以char存储,范围取决于显示宽度 |
numeric[(M,D)] |
同上 |
|
numeric同义词 |
dec[(M,D)] |
同上 |
|
numeric同义词 |
fixed[(M,D)] |
同上 |
|
numeric同义词 |
2)日期和时间类型:
MySQL支持多种日期和时间类型。常用的日期类型有datetime、date、timestamp、time和year。每一个类型都有合法值范围,当赋给一个不合法的值时,将会被“0”所替代。
常用的日期和时间数据类型如下表:
类型 |
取值范围 |
描述 |
date |
1000-01-01~9999-12-31 |
日期,以YYYY-MM-DD格式显示 |
time |
22:58:59~23:58:59 |
时间,以HH:MM:SS格式显示 |
datetime |
1000-01-01 00:00:00~ |
日期和时间,以YYYY-MM-DD HH:MM:SS格式显示 |
timestamp[(M)] |
1970-01-01 00:00:00~ |
时间标签,在处理报告时使用的显示格式取决于M的值 |
year |
70-69(1970~2069) |
年份可以指定两位数字和四位数字的格式 |
下表给出了timestamp所有的可显示类型:
指定的数据类型 |
显示 |
timestamp |
YYYYMMDDHHMMSS |
timestamp(2) |
YY |
timestamp(4) |
YYMM |
timestamp(6) |
YYMMDD |
timestamp(8) |
YYYYMMDD |
timestamp(10) |
YYMMDDHHMM |
timestamp(12) |
YYMMDDHHMMSS |
timestamp(14) |
YYYYMMDDHHMMSS |
在使用日期和时间类型的数据类型时需要注意:
⑴对于datetime、date、timestamp和year类型,MySQL使用下列规则解析存在二义性的年份值,在范围00~69内的年值被转换为2000~2069,在范围70~99内的年份值被转换为1970~1999。
⑵设置timestamp列值。任何timestamp列均可被设置一个不同于当前操作日期与时间的值,这通过为该列明确指定一个所期望的值来实现。当该记录被建立时,让MySQL设置该列值,这将初始化该列为当前日期和时间。以后,当对该记录行的其他列执行更新时,将timestamp列值明确地指定为它原来的值。
3)字符串类型:
字符串可以分为3类。第1类为普通字符串,即小段文本,包括char(固定长度字符)类型和varchar(可变长度字符)类型。可以指定每种类型的宽度。无论数据大小是多少,char类型的列都会用空格补充空白,但是varchar列宽会随数据大小变化。
第2类为TEXT和BLOB类型。这些类型大小可变,分别适用于长文本或二进制数据。BLOB全称为Binary Large Object(二进制大对象),它支持任何数据,例如图像或声音数据。
在实际应用中,除了TEXT区分大小写而BLOB不区分之外,TEXT和BLOB列是相同的。因为这些列类型可以容纳大量的数据,所以在使用它们时需要特别地考虑。
第3类包括两种特殊类型,SET和ENUM。SET类型用来指定列中的值必须来自一个特定集合中的指定值。列值可以包含来自该集合的多个值。在指定的集合中,最大可以有64个元素。
类型 |
取值范围 |
描述 |
[NATIONAL]char(M) |
0~255个字符 |
固定长度为M的字符串。其中,M的取值范围为0~255。NATIONAL关键字指定了应该使用的默认字符集,BINARY关键字指定了数据是区分大小写的(默认区分大小写),ASCII关键字指定了在该列中使用Latinl字符集,UNICODE关键字指定了使用Ucs字符串。 |
char |
|
char(1)的同义词 |
[NATIONAL]varchar(M) |
0~255个字符 |
除了可变长度,其他与上一项相同 |
下面示例说明在char(4)和varchar(4)列中存储不同的字符串的不同:
值 |
char(4) |
存储需求 |
varchar(4) |
存储需求 |
'' |
'' |
需要4个字节 |
'' |
需要1个字节 |
'ab' |
'ab' |
需要4个字节 |
'ab' |
需要3个字节 |
'abcd' |
'abcd' |
需要4个字节 |
'abcd' |
需要5个字节 |
'abcdjds' |
'abcd' |
需要4个字节 |
'abcd' |
需要5个字节 |
char和varchar列值以省略字母大小写的方式进行排序和比较,除非在表建立时BINARY属性被指定。BINARY属性意味着,该列值根据MySQL服务器正在运行的机器的ASCII表顺序按字母大小写敏感的方式进行排序和比较。BINARY并不影响该列如何被存储和检索。
类型 |
取值范围 |
描述 |
TINYBLOB |
2^8(即255) |
小二进制大对象(BLOB)字段 |
TINYTEXT |
2^8(即255) |
小TEXT字段 |
BLOB |
2^16(即65535) |
常规大小二进制大对象(BLOB)字段 |
TEXT |
2^16(即65535) |
常规大小TEXT字段 |
MEDIUMBLOB |
2^24(即16777215) |
中型大小二进制大对象(BLOB)字段 |
MEDIUMTEXT |
2^24(即16777215) |
中型大小TEXT字段 |
LONGBLOB |
2^32(即4294947295) |
长二进制大对象(BLOB)字段 |
LONGTEXT |
2^32(即4294947295) |
长TEXT字段 |
一个BLOB是一个可以保存可变数量的数据的二进制对象。4个BLOB类型之间的不同仅在于它们能保存值的最大长度不一致。4个TEXT类型对应于4个BLOB类型,并且有相同的最长长度和存储需求。
BLOB和TEXT类型的唯一差别就是,对BLOB值是以字母大小写敏感的方式进行排序和比较,而对TEXT值以忽略字母大小写方式进行排序和比较。换句话说,TEXT是一个忽略字母大小写的BLOG。
类型 |
集合中的最大值 |
描述 |
ENUM('value1','value2', …) |
65535 |
该类型的类只可以容纳所列值之一或者为NULL |
SET('value1','value2', …) |
64 |
该类型的类可以容纳一组值或者为NULL |
ENUM是一个字符串对象,某值通常选自一个允许值列表中,该列表在表创建时的列规格说明中明确地列出来。
在下列情况下,ENUM值也可以是空串("")或NULL:
·如果将一个无效值插入一个ENUM(即一个不在允许值列表中的字符串)。空字符串将作为一个特殊的错误值被插入。事实上,这个字符串有别于一个“普通的”空字符串,因为这个字符串有个数字索引值为0。
·如果一个ENUM被声明为NULL,NULL也是该列的一个合法值,并且该列的默认值也将为NULL。如果一个ENUM被声明为NOT NULL,该列的默认值将是该列表所允许值的第一个成员。
每个枚举值均有一个索引值:在列说明中列表值所允许的成员值从1开始编号。空字符串错误值的索引为0。这就意味着,可以使用下面所示的SELECT语句找出被赋予无效ENUM值的记录行。
mysql> select * from tablename where enum1=0;
如果在一个数字语境中检索一个ENUM,列值的索引将被返回。例如,可以按下面这样使用数字值检索一个ENUM列:
mysql> select enum1+1 from t1;
如果将一个数字存储到一个ENUM中,数字将作为一个索引值,并且存储的值是该索引值所对应的枚举成员。
SET是一个字符串对象,它可以有0或更多个值,每个值均必须选自一个允许值列表中,该列表在表创建时被指定。包括多个集合成员的SET列值,用逗号将各成员分隔开。
3.算术运算符:
算术运算符是MySQL中最常用的一类运算符,包括加、减、乘、除和求余。见下表:
符号 |
作用 |
符号 |
作用 |
符号 |
作用 |
符号 |
作用 |
+ |
加法运算 |
- |
减法运算 |
* |
乘法运算 |
/ |
除法运算 |
% |
求余运算 |
DIV |
乘法运算,同/ |
MOD |
求余运算,同% |
|
|
其中,+、-、*可以同时运算多个操作数,/和%虽然也能运算多个操作数,但不太好,而DIV和MOD只能运算2个操作数。进行除法和求余运算时,如果地2个参数为0,结果为NULL。
4.比较运算符:
比较运算符是查询数据时最常用的一类运算符。见下表:
运算符 |
名称 |
示例 |
运算符 |
名称 |
示例 |
= |
等于 |
Id=5 |
Is not null |
n/a |
Id is not null |
> |
大于 |
Id>5 |
Between |
n/a |
Id between 1 and 15 |
< |
小于 |
Id<5 |
In |
n/a |
Id in(3,4,5) |
>= |
大于等于 |
Id>=5 |
Not in |
n/a |
Name not in (shi,li) |
<= |
小于等于 |
Id<=5 |
Like |
模式匹配 |
Name like ('shi%') |
!=或<> |
不等于 |
Id!=5 |
Not like |
模式匹配 |
Name not like ('shi%') |
Is null |
n/a |
Id is null |
Regexp |
常规表达式 |
Name 正则表达式 |
REGEXP运算符经常与^ $ .一起使用,^匹配字符串的开始,$匹配字符串的结尾,.匹配字符串中的一个字符。
5.逻辑运算符:
用来判断表达式的真假,表达式为真返回1,表达式为假返回0。见下表:
运算符 |
作用 |
运算符 |
作用 |
&&或AND |
与 |
!或NOT |
非 |
||或OR |
或 |
XOR |
异或 |
6.位运算符:
在二进制数上进行计算。见下表:
运算符 |
作用 |
运算符 |
作用 |
& |
按位与 |
| |
按位或 |
~ |
按位取反 |
^ |
按位异或 |
<< |
按位左移 |
>> |
按位右移 |
7.运算符的优先级:
优先级 |
运算符 |
1 |
! |
2 |
~ |
3 |
^ |
4 |
*, / ,DIV ,%, MOD |
5 |
+, - |
6 |
>>, << |
7 |
& |
8 |
| |
9 |
=, <=>, < ,<=, >, >=, !=, <>, IN, IS NULL, LIKE, REGEXP |
10 |
BETWEEN AND, CASE, WHEN, THEN, ELSE |
11 |
NOT |
12 |
&&, AND |
13 |
||, OR, XOR |
14 |
:= |