mysql引言
- MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
- MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
- MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
- 由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。
- 其他关系型数据库: oracle | sqlserver
mysql的安装教程
1、首先在百度搜索MySQL,如图选择第一个搜索项,如图所示:
2、在打开的页面中,选择下图中的“download”连接,如图所示:
3.、对于MySQL的下载分为多个版本,我们只需要下载服务器就足够了。大约30M多,选择下图的连接,如图所示:
4、最后献上5.5.28这个服务器的下载连接地址:
http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.28-win32.msi
接下来是我的MySQL数据库服务器的安装步骤:
1、首先单击MySQL5.5.21的安装文件,出现该数据库的安装向导界面,单击“next”继续安装,如图所示:
2、在打开的窗口中,选择接受安装协议,单击“next”继续安装,如图所示:
3、在出现选择安装类型的窗口中,有“typical(默认)”、“Complete(完全)”、“Custom(用户自定义)”三个选项,我们选择“Custom”,因为通过自定义可以更加的让我们去熟悉它的安装过程,对于学习MySQL数据库很有帮助,单击“next”继续安装,如图所示:
4、在出现自定义安装界面中选择mysql数据库的安装路径,这里我设置的是“d:\Program File\MySQL”,单击“next”继续安装,如图所示:
5、接下来进入到准备安装的界面,首先确认一下先前的设置,如果有误,按“back”返回,没有错误,单击“Install”按钮继续安装,如图所示:
6、单击“Install”按钮之后出现如下正在安装的界面,经过很少的时间,MySQL数据库安装完成,出现完成MySQL安装的界面,如图所示:
这个界面单击“next”就行。
注意要选择上边的“Launch the MySQL Instance Configuration Wizard”选项,这是要启动MySQL的配置,也是最关键的地方(也可以以后设置),单击“Finish”按钮,进入到配置界面。
7、MySQL数据库的安装十分简单,关键是安装完成之后的配置,单击完成之后出现如下的配置界面向导,单击“next”进行配置,如图所示:
8、在打开的配置类型窗口中选择配置的方式,“Detailed Configuration(手动精确配置)”、“Standard Configuration(标准配置)”,为了熟悉过程,我们选择“Detailed Configuration(手动精确配置)”,单击“next”继续,如图所示:
9、在出现的窗口中,选择服务器的类型,“Developer Machine(开发测试类)”、“Server Machine(服务器类型)”、“Dedicated MySQL Server Machine(专门的数据库服务器)”,我们仅仅是用来学习和测试,默认就行,单击“next”继续,如图所示:
10、在出现的配置界面中选择mysql数据库的用途,“Multifunctional Database(通用多功能型)”、“Transactional Database Only(服务器类型)”、“Non-Transactional Database Only(非事务处理型)”,这里我选择的是第一项, 通用安装,单击“next”继续配置,如图所示:
11、在出现的界面中,进行对InnoDB Tablespace进行配置,就是为InnoDB 数据库文件选择一个存储空间,如果修改了,要记住位置,重装的时候要选择一样的地方,否则可能会造成数据库损坏,当然,对数据库做个备份就没问题了,如图所示:
12、在打开的页面中,选择mysql的访问量,同时连接的数目,“Decision Support(DSS)/OLAP(20个左右)”、“Online Transaction Processing(OLTP)(500个左右)”、“Manual Setting(手动设置,设置为15个)这里选择手动设置,单击“next”继续,如图所示:
13、在打开的页面中设置是否启用TCP/IP连接,设定端口,如果不启用,就只能在自己的机器上访问mysql数据库了,这也是连接java的操作,默认的端口是3306,并启用严格的语法设置,如果后面出现错误,可以将“Add firewall exception for this port ”这个选项选上,单击“next”继续,如图所示:
14、在打开的字符编码的页面中,设置mysql要使用的字符编码,第一个是西文编码,第二个是多字节的通用utf8编码,第三个是手动,我们选择utf-8,如果在这里没有选择UTF-8这个编码的化,在使用JDBC连接数据库的时候,便会出现乱码,到那时需要加上如下的代码“useUnicode=true&characterEncoding=UTF-8 ”,才可以解决乱码问题,为了以后的方便所以设置为UTF-8编码,但是有一个问题,那就是当用哪个控制台插入汉字的时候,会报错,查询带汉字的表时,无法显示汉字,所在需要在每次进入MySQL后,设置一个系统参数“set names gbk”,即可解决该问题,接下来单击“next”,继续配置,如图所示:
15、在打开的页面中选择是否将mysql安装为windows服务,还可以指定Service Name(服务标识名称),是否将mysql的bin目录加入到Windows PATH(加入后,就可以直接使用bin下的文件,而不用指出目录名,比如连接,“mysql–u username –p password;”就可以了,单击“next”继续配置,如图所示:
16、在打开的页面中设置是否要修改默认root用户(超级管理员)的密码(默认为空),“New root password”,如果要修改,就在此填入新密码,并启用root远程访问的功能,不要创建匿名用户,单击“next”继续配置,如图所示:
17、到这里所有的配置操作都已经完成,单击Execute按钮执行配置,如图所示:
18、过了几分钟,出现如下的提示界面就代表MySQL配置已经结束了,并提示了成功的信息。
19、在服务中将mysql数据库启动,并在命令窗口中输入“mysql–h localhost –u root -p”或者是“mysql -h localhost -uroot -p密码”,接着在出现的提示中输入用户的密码,如图所示:
从图中可以看到mysql数据库在启动之后,成功的登录了,在此我们可以对数据库进行操作了。
如果程序卡死:(未响应),1、需要卸载重新装:控制面板--》程序和功能--》点击卸载程序
2、把C盘中ProgramDate文件夹里的mysql文件jar删除:删除需谨慎、3.安装目录删除
mysql的常用操作
数据库
-
# 查看所有的数据库
-
SHOW DATABASES ;
-
# 创建一个数据库
-
CREATE DATABASE k;
-
# 删除一个数据库
-
DROP DATABASE k;
-
# 使用这个数据库
-
USE k;
表
-
# 查看所有的表
-
SHOW TABLES ;
-
# 创建一个表
-
CREATE TABLE n(id INT, name VARCHAR(10));
-
CREATE TABLE m(id INT, name VARCHAR(10), PRIMARY KEY (id), FOREIGN KEY (id) REFERENCES n(id), UNIQUE (name));
-
CREATE TABLE m(id INT, name VARCHAR(10));
-
# 直接将查询结果导入或复制到新创建的表
-
CREATE TABLE n SELECT * FROM m;
-
# 新创建的表与一个存在的表的数据结构类似
-
CREATE TABLE m LIKE n;
-
# 创建一个临时表
-
# 临时表将在你连接MySQL期间存在。当断开连接时,MySQL将自动删除表并释放所用的空间。也可手动删除。
-
CREATE TEMPORARY TABLE l(id INT, name VARCHAR(10));
-
# 直接将查询结果导入或复制到新创建的临时表
-
CREATE TEMPORARY TABLE tt SELECT * FROM n;
-
# 删除一个存在表
-
DROP TABLE IF EXISTS m;
-
# 更改存在表的名称
-
ALTER TABLE n RENAME m;
-
RENAME TABLE n TO m;
-
# 查看表的结构(以下五条语句效果相同)
-
DESC n; # 因为简单,所以建议使用
-
DESCRIBE n;
-
SHOW COLUMNS IN n;
-
SHOW COLUMNS FROM n;
-
EXPLAIN n;
-
# 查看表的创建语句
-
SHOW CREATE TABLE n;
表的结构
-
# 添加字段
-
ALTER TABLE n ADD age VARCHAR(2) ;
-
# 删除字段
-
ALTER TABLE n DROP age;
-
# 更改字段属性和属性
-
ALTER TABLE n CHANGE age a INT;
-
# 只更改字段属性
-
ALTER TABLE n MODIFY age VARCHAR(7) ;
表的数据
-
# 增加数据
-
INSERT INTO n VALUES (1, 'tom', '23'), (2, 'john', '22');
-
INSERT INTO n SELECT * FROM n; # 把数据复制一遍重新插入
-
# 删除数据
-
DELETE FROM n WHERE id = 2;
-
# 更改数据
-
UPDATE n SET name = 'tom' WHERE id = 2;
-
# 数据查找
-
SELECT * FROM n WHERE name LIKE '%h%';
-
# 数据排序(反序)
-
SELECT * FROM n ORDER BY name, id DESC ;
键
-
# 添加主键
-
ALTER TABLE n ADD PRIMARY KEY (id);
-
ALTER TABLE n ADD CONSTRAINT pk_n PRIMARY KEY (id); # 主键只有一个,所以定义键名似乎也没有什么用
-
# 删除主键
-
ALTER TABLE n DROP PRIMARY KEY ;
-
# 添加外键
-
ALTER TABLE m ADD FOREIGN KEY (id) REFERENCES n(id); # 自动生成键名m_ibfk_1
-
ALTER TABLE m ADD CONSTRAINT fk_id FOREIGN KEY (id) REFERENCES n(id); # 使用定义的键名fk_id
-
# 删除外键
-
ALTER TABLE m DROP FOREIGN KEY `fk_id`;
-
# 修改外键
-
ALTER TABLE m DROP FOREIGN KEY `fk_id`, ADD CONSTRAINT fk_id2 FOREIGN KEY (id) REFERENCES n(id); # 删除之后从新建
-
# 添加唯一键
-
ALTER TABLE n ADD UNIQUE (name);
-
ALTER TABLE n ADD UNIQUE u_name (name);
-
ALTER TABLE n ADD UNIQUE INDEX u_name (name);
-
ALTER TABLE n ADD CONSTRAINT u_name UNIQUE (name);
-
CREATE UNIQUE INDEX u_name ON n(name);
-
# 添加索引
-
ALTER TABLE n ADD INDEX (age);
-
ALTER TABLE n ADD INDEX i_age (age);
-
CREATE INDEX i_age ON n(age);
-
# 删除索引或唯一键
-
DROP INDEX u_name ON n;
-
DROP INDEX i_age ON n;
视图
-
# 创建视图
-
CREATE VIEW v AS SELECT id, name FROM n;
-
CREATE VIEW v(id, name) AS SELECT id, name FROM n;
-
# 查看视图(与表操作类似)
-
SELECT * FROM v;
-
DESC v;
-
# 查看创建视图语句
-
SHOW CREATE VIEW v;
-
# 更改视图
-
CREATE OR REPLACE VIEW v AS SELECT name, age FROM n;
-
ALTER VIEW v AS SELECT name FROM n ;
-
# 删除视图
-
DROP VIEW IF EXISTS v;
联接
-
# 内联接
-
SELECT * FROM m INNER JOIN n ON m.id = n.id;
-
# 左外联接
-
SELECT * FROM m LEFT JOIN n ON m.id = n.id;
-
# 右外联接
-
SELECT * FROM m RIGHT JOIN n ON m.id = n.id;
-
# 交叉联接
-
SELECT * FROM m CROSS JOIN n; # 标准写法
-
SELECT * FROM m, n;
-
# 类似全连接full join的联接用法
-
SELECT id,name FROM m
-
UNION
-
SELECT id,name FROM n;
函数
-
# 聚合函数
-
SELECT count(id) AS total FROM n; # 总数
-
SELECT sum(age) AS all_age FROM n; # 总和
-
SELECT avg(age) AS all_age FROM n; # 平均值
-
SELECT max(age) AS all_age FROM n; # 最大值
-
SELECT min(age) AS all_age FROM n; # 最小值
-
# 数学函数
-
SELECT abs(-5); # 绝对值
-
SELECT bin(15), oct(15), hex(15); # 二进制,八进制,十六进制
-
SELECT pi(); # 圆周率3.141593
-
SELECT ceil(5.5); # 大于x的最小整数值6
-
SELECT floor(5.5); # 小于x的最大整数值5
-
SELECT greatest(3,1,4,1,5,9,2,6); # 返回集合中最大的值9
-
SELECT least(3,1,4,1,5,9,2,6); # 返回集合中最小的值1
-
SELECT mod(5,3); # 余数2
-
SELECT rand(); # 返回0到1内的随机值,每次不一样
-
SELECT rand(5); # 提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。
-
SELECT round(1415.1415); # 四舍五入1415
-
SELECT round(1415.1415, 3); # 四舍五入三位数1415.142
-
SELECT round(1415.1415, -1); # 四舍五入整数位数1420
-
SELECT truncate(1415.1415, 3); # 截短为3位小数1415.141
-
SELECT truncate(1415.1415, -1); # 截短为-1位小数1410
-
SELECT sign(-5); # 符号的值负数-1
-
SELECT sign(5); # 符号的值正数1
-
SELECT sqrt(9); # 平方根3
-
SELECT sqrt(9); # 平方根3
-
# 字符串函数
-
SELECT concat('a', 'p', 'p', 'le'); # 连接字符串-apple
-
SELECT concat_ws(',', 'a', 'p', 'p', 'le'); # 连接用','分割字符串-a,p,p,le
-
SELECT insert('chinese', 3, 2, 'IN'); # 将字符串'chinese'从3位置开始的2个字符替换为'IN'-chINese
-
SELECT left('chinese', 4); # 返回字符串'chinese'左边的4个字符-chin
-
SELECT right('chinese', 3); # 返回字符串'chinese'右边的3个字符-ese
-
SELECT substring('chinese', 3); # 返回字符串'chinese'第三个字符之后的子字符串-inese
-
SELECT substring('chinese', -3); # 返回字符串'chinese'倒数第三个字符之后的子字符串-ese
-
SELECT substring('chinese', 3, 2); # 返回字符串'chinese'第三个字符之后的两个字符-in
-
SELECT trim(' chinese '); # 切割字符串' chinese '两边的空字符-'chinese'
-
SELECT ltrim(' chinese '); # 切割字符串' chinese '两边的空字符-'chinese '
-
SELECT rtrim(' chinese '); # 切割字符串' chinese '两边的空字符-' chinese'
-
SELECT repeat('boy', 3); # 重复字符'boy'三次-'boyboyboy'
-
SELECT reverse('chinese'); # 反向排序-'esenihc'
-
SELECT length('chinese'); # 返回字符串的长度-7
-
SELECT upper('chINese'), lower('chINese'); # 大写小写 CHINESE chinese
-
SELECT ucase('chINese'), lcase('chINese'); # 大写小写 CHINESE chinese
-
SELECT position('i' IN 'chinese'); # 返回'i'在'chinese'的第一个位置-3
-
SELECT position('e' IN 'chinese'); # 返回'i'在'chinese'的第一个位置-5
-
SELECT strcmp('abc', 'abd'); # 比较字符串,第一个参数小于第二个返回负数- -1
-
SELECT strcmp('abc', 'abb'); # 比较字符串,第一个参数大于第二个返回正数- 1
-
# 时间函数
-
SELECT current_date, current_time, now(); # 2018-01-13 12:33:43 2018-01-13 12:33:43
-
SELECT hour(current_time), minute(current_time), second(current_time); # 12 31 34
-
SELECT year(current_date), month(current_date), week(current_date); # 2018 1 1
-
SELECT quarter(current_date); # 1
-
SELECT monthname(current_date), dayname(current_date); # January Saturday
-
SELECT dayofweek(current_date), dayofmonth(current_date), dayofyear(current_date); # 7 13 13
-
# 控制流函数
-
SELECT if(3>2, 't', 'f'), if(3<2, 't', 'f'); # t f
-
SELECT ifnull(NULL, 't'), ifnull(2, 't'); # t 2
-
SELECT isnull(1), isnull(1/0); # 0 1 是null返回1,不是null返回0
-
SELECT nullif('a', 'a'), nullif('a', 'b'); # null a 参数相同或成立返回null,不同或不成立则返回第一个参数
-
SELECT CASE 2
-
WHEN 1 THEN 'first'
-
WHEN 2 THEN 'second'
-
WHEN 3 THEN 'third'
-
ELSE 'other'
-
END ; # second
-
# 系统信息函数
-
SELECT database(); # 当前数据库名-test
-
SELECT connection_id(); # 当前用户id-306
-
SELECT user(); # 当前用户-root@localhost
-
SELECT version(); # 当前mysql版本
-
SELECT found_rows(); # 返回上次查询的检索行数
用户
-
# 增加用户
-
CREATE USER 'test'@'localhost' IDENTIFIED BY 'test';
-
INSERT INTO mysql.user(Host, User, Password) VALUES ('localhost', 'test', Password('test')); # 在用户表中插入用户信息,直接操作User表不推荐
-
# 删除用户
-
DROP USER 'test'@'localhost';
-
DELETE FROM mysql.user WHERE User='test' AND Host='localhost';
-
FLUSH PRIVILEGES ;
-
# 更改用户密码
-
SET PASSWORD FOR 'test'@'localhost' = PASSWORD('test');
-
UPDATE mysql.user SET Password=Password('t') WHERE User='test' AND Host='localhost';
-
FLUSH PRIVILEGES ;
-
# 用户授权
-
GRANT ALL PRIVILEGES ON *.* TO test@localhost IDENTIFIED BY 'test';
-
# 授予用'test'密码登陆成功的test@localhost用户操作所有数据库的所有表的所有的权限
-
FLUSH PRIVILEGES ; # 刷新系统权限表,使授予权限生效
-
# 撤销用户授权
-
REVOKE DELETE ON *.* FROM 'test'@'localhost'; # 取消该用户的删除权限
存储过程
-
# 创建存储过程
-
DELIMITER // # 无参数
-
CREATE PROCEDURE getDates()
-
BEGIN
-
SELECT * FROM test ;
-
END //
-
CREATE PROCEDURE getDates_2(IN id INT) # in参数
-
BEGIN
-
SELECT * FROM test WHERE a = id;
-
END //
-
CREATE PROCEDURE getDates_3(OUT sum INT) # out参数
-
BEGIN
-
SET sum = (SELECT count(*) FROM test);
-
END //
-
CREATE PROCEDURE getDates_4(INOUT i INT) # inout参数
-
BEGIN
-
SET i = i + 1;
-
END //
-
DELIMITER ;
-
# 删除存储过程
-
DROP PROCEDURE IF EXISTS getDates;
-
# 修改存储过程的特性
-
ALTER PROCEDURE getDates MODIFIES SQL DATA ;
-
# 修改存储过程语句(删除再重建)略
-
# 查看存储过程
-
SHOW PROCEDURE STATUS LIKE 'getDates'; # 状态
-
SHOW CREATE PROCEDURE getDates_3; # 语句
-
# 调用存储过程
-
CALL getDates();
-
CALL getDates_2(1);
-
CALL getDates_3(@s);
-
SELECT @s;
-
SET @i = 1;
-
CALL getDates_4(@i);
-
SELECT @i; # @i = 2
其他语句
-
# 查看所有的表信息(包括视图)
-
SHOW TABLE STATUS;
其他
-
# 数据库备份
-
mysqldump -u root -p db_name > file.sql
-
mysqldump -u root -p db_name table_name > file.sql
-
# 数据库还原
-
mysql -u root -p < C:\file.sql
MySQL 数据类型
MySQL中定义数据字段的类型对你数据库的优化是非常重要的。
MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。
数值类型
MySQL支持所有标准SQL数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 字节 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 字节 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 字节 | (-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的值 | 小数值 |
日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
TIMESTAMP类型有专有的自动更新特性,将在后面描述。
类型 | 大小 (字节) | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
字符串类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-65535 字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。