文章目录
学习目标:
- 了解并学习SQL语句
- 学会对数据库用户的操作
- 学会对数据库的增删改查
- 学会对数据表的增删改查
SQL的概念
什么是SQL
结构化查询语言(Structured Query Language)简称SQL,SQL语句就是对数据库进行操作的一种语言,类似数据库的数据库。
SQL作用
通过SQL语句我们可以方便的操作数据库中的数据、表、数据库。 SQL是数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。
SQL语句分类
-
DDL(Data Definition Language)数据定义语言:用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter等
-
DML(Data Manipulation Language)数据操作语言:用来对数据库中表的数据进行增删改。关键字:insert, delete, update等
-
DQL(Data Query Language) 数据查询语言:DQL语言并不是属于MYSQL官方的分类,但是对数据库的操作最多就是查询,所以把查询语句的语句称作为DQL语言
-
DCL(Data Control Language)数据控制语言:用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE等
-
TCL(Transaction Control Language) 事务控制语言或TPL事务处理语言:用于控制数据库的事务操作,关键字; COMMIT,SAVEPOINT,ROLLBACK等
-
CCL(Cursor Control Language)指针控制语言:像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。多用于存储过程中对结果集的处理。
SQL通用语法
- SQL语句可以单行或多行书写,以分号结尾。
- 可使用空格和缩进来增强语句的可读性。
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
语法:SELECT 字段名 FROM 表名;
SELECT * FROM student;
三种注释:
- 单行注释: – 注释内容
- # 注释内容(mysql特有)
- 多行注释: /* 注释 */
用户管理与权限管理
用户管理
查看用户
语法:select host,user,authentication_string from mysql.user;
select host,user,authentication_string from mysql.user;
mysql是MySQL数据库中的系统库,所有用户、权限、密码、时区等信息都存放在这个库里。
库名.表名的方式可以让我们跨库来引用某个特定库的表。
代码 | 含义 |
---|---|
localhost | 仅本机 |
% | 无限制 |
IP地址(192.168.1.1) | 只有对应ip的可以访问 |
- host:用户主机名,见上图
- user:用户名/连接数据库的账号
- authentication_string:加密后的密码
创建用户
语法:create user “用户名”@“主机名” identified by “密码”;
create user “abc”@“%” identified by “123”;
创建一个谁都可以连接(%)的账号:abc,密码为:123
修改用户
方法1:用alter修改用户密码
首先需要以root身份登录MySQL,然后再输入以下代码:
语法:create user “用户名”@“主机名” identified by “密码”;
ALTER USER ‘abc’@‘%’ IDENTIFIED BY ‘456’;
//刷新数据库,不然需要重新开启
flush privileges;
将谁都可以连接(%)的账号:abc的密码改为’456’
方法2:用mysqladmin
需要使用cmd来输入
需要使用cmd来输入
需要使用cmd来输入
语法:mysqladmin -u用户名 -p旧密码 password 新密码";
mysqladmin -uabc -p123 password 456
结果同上
方法3:忘记root密码,需要重置root密码**
详细请看这里
删除用户
drop user 用户名@‘主机名’;
drop user abc@‘%’;
删除访问权限是公共,账号是abc的。
权限管理
用户授权
初始创建的用户是不能访问数据库的,因为没有权限,因此我们需要给予权限
权限码 | 权限范围 |
---|---|
all | 所有权限 |
select | 查询权限 |
delete | 删除权限 |
update | 更新权限 |
create | 创建权限 |
drop | 删除数据库。数据表权限 |
语法:grant 权限码 on 数据库名.表名 to 用户名@主机名’;
grant select on mysql.* to abc@%';
FLUSH PRIVILEGES;
给予公共的abc对mysql的所有表的查询权限
查看用户权限
语法:show grants for 用户名@主机名;
show grants for ‘abc’@‘%’;
显示公共的abc的所有权限
取消用户授权
语法:REVOKE 权限码 ON 库名.表名 FROM 用户名@主机名;
REVOKE select ON mysql.* FROM abc@%;
取消公共的abc账号的查询mysql数据库的权限
数据定义语言(DDL)
操作数据库
创建数据库
1. 直接创建数据库
CREATE DATABASE 数据库名;
2. 判断是否存在并创建数据库(了解)
CREATE DATABASE IF NOT EXISTS 数据库名;
3. 创建数据库并指定字符集(了解)
CREATE DATABASE 数据库名 CHARACTER SET 字符集;
4. 具体操作:
- 直接创建数据库db1
CREATE DATABASE db1;
- 判断是否存在并创建数据库db2
CREATE DATABASE IF NOT EXISTS db2;
- 创建数据库并指定字符集为gbk
CREATE DATABASE db3 CHARACTER SET gbk;
查看数据库
1. 查看所有的数据库
SHOW databases;
2. 查看某个数据库的定义信息
语法:SHOW CREATE DATABASE 数据库名;
具体操作:
- 显示数据库a里面的所有表
SHOW CREATE DATABASE a;
修改数据库
语法:ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;
具体操作:
- 语法:DROP DATABASE 数据库名;
ALTER DATABASE db3 DEFAULT CHARACTER SET utf8;
将db3数据库的字符集改成utf8
删除数据库
具体操作:
- 删除db2数据库
DROP DATABASE db2;
使用数据库
- 查看正在使用的数据库
SELECT DATABASE();
- 使用/切换数据库
USE 数据库名;
具体操作:
- 查看正在使用的数据库
SELECT DATABASE();
- 使用db1数据库
USE db1;
操作表
如果已执行 use 数据库名; 可以省略数据库名。
创建表
语法:
CREATE TABLE [IF NOT EXISTS] 表名 (
字段名 字段类型 [ primary key | unique | not null | auto_increment |
| binary | default 缺省值 | comment 注释语句],
......
) [ ENGINE=InnoDB | DEFAULT CHARSET=utf8 ];
表可选项:
if not exists:如果不存在就执行
engine:设置数据引擎,默认为innodb
default charset:设置默认字符编码,可以简写成charset
字段可选项:
primary key:主键,值唯一,不可为null
unique:唯一键,值唯一,可以为null
not null:不可为null,不写这一项,则默认为可以接受null值
auto_increment:自动增长,只能与整数类型搭配,默认每次增长1
binary:与字符类型搭配,在字段比较时大小写敏感
default:设置缺省值,若插入值为null时,则使用默认值填充
comment:设置字段注释
示例:
MySQL的数值数据类型
MySQL支持所有标准SQL数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
整数类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 字节 | (-128,127) FF 1111 1111 | (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) | 极大整数值 |
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。表显示了需要的每个整数类型的存储和范围。
TINYINT,1字节,8位,16进制最大表示为FF,2进制表示最大为1111 1111,有符号,第一位为符号为(整数为0,负数为1),所以整数最大值为0111 1111(127),负数最大值为1111 1111(-128),无符号的最大值是255。
-
可以用unsigned控制是否有符号位
-
可以使用zerofill控制是否有前导零
-
也存在布尔类型。首先mysql是不支持布尔类型的,当把一个数据设置成布尔类型的时候,数据库会自动转换成tinyint(1)的数据类型,其实这个就是变相的布尔。 默认值也就是1,0两种,分别对应了布尔类型的true和false。
-
类型后面(1),代表的显示长度,只有跟zerofill配合起来才能用。简单地说,没有(1),会显示成00x数字,具体连数字带前导零总共几位,有(n)来限制。
我们在这里测试一下。
create table test1 ( c1 TINYINT, c2 tinyint UNSIGNED, c3 tinyint ZEROFILL );
然后执行sql,分别看看执行结果,分析报错信息。
insert into test1 values(1, 2, 3); insert into test1 values(-1, 2, 3); insert into test1 values(1, -2, 3); insert into test1 values(1, 2, -3); insert into test1 values(127, 2, -3); insert into test1 values(-128, 128, 3); insert into test1 values(-128, 256, 255);
总结:zerofill具备unsigned的隐藏属性,不能存负值。
SMALLINT,2字节,16位,16进制最大表示为FFFF。
MEDIUMINT,3字节,24位,16进制最大表示为FF FFFF。
INT或INTEGER ,4字节,32位 ,16进制最大表示为FFFF FFFF。
BIGINT,8字节,64位 ,16进制最大表示为FFFF FFFF FFFF FFFF。
这些类型都可以用unsigned和zerofill修饰。
浮点数类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
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) | 双精度 浮点数值 |
科学计数法,0.123 * 10^1。
创建该类型字段时,可以设置(M,D)模式控制数值范围
create table test4 (
f1 float,
f2 float(5, 2),
f3 float(16,4)
);
insert into test4 values (123.456789, 123.456789, 123.456789);
insert into test4 values (1234.56789, 1234.56789, 1234.56789);
insert into test4 values (12345.6789, 12345.6789, 12345.6789);
insert into test4 values (123456.789, 123456.789, 123456.789);
insert into test4 values (1234567.89, 1234567.89, 1234567.89);
insert into test4 values (12345678.9, 12345678.9, 12345678.9);
insert into test4 values (123456789, 123456789, 123456789);
select * from test4;
从上面看出:默认的float类型都只能存6个数字(包括小数点前后的位数),整数超过6位就被科学计数表示(id=4),小数位超出则需要四舍五入。
float(m,d):小数点后位数为d,即整数位数为(m-d),整数位超出则整数为(m-d)个,小数点后位数为(d)个9999,不用科学计算了;若小数位超出,则需要四舍五入。
单精度浮点数的精度是不高的,我们可以试试double。
drop table test5;
create table test5 (
d1 double,
d2 double(5, 2),
d3 double(16, 4)
);
insert into test5 values (123.456789, 123.456789, 123.456789);
insert into test5 values (1234.56789, 1234.56789, 1234.56789);
insert into test5 values (12345.6789, 12345.6789, 12345.6789);
insert into test5 values (123456.789, 123456.789, 123456.789);
insert into test5 values (1234567.89, 1234567.89, 1234567.89);
insert into test5 values (12345678.9, 12345678.9, 12345678.9);
insert into test5 values (123456789, 123456789, 123456789);
双精度浮点型的有效精度更高(16位左右),可以容纳更多的值。
定点小数类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
我们创建一个包含decimal类型字段的表
drop table test6;
create table test6 (
d1 decimal,
d2 decimal(6, 2),
d3 decimal(32, 4)
);
insert into test6 values (123.456789, 123.456789, 123.456789);
insert into test6 values (1234.56789, 1234.56789, 1234.56789);
insert into test6 values (12345.6789, 12345.6789, 12345.6789);
insert into test6 values (123456.789, 123456.789, 123456.789);
insert into test6 values (1234567.89, 1234567.89, 1234567.89);
insert into test6 values (12345678.9, 12345678.9, 12345678.9);
decimal型的默认整数位为10,小数位为0,即默认为整数。
在MySQL中,定点数以字符串形式存储,因此,其精度比浮点数要高,而且浮点数会出现误差,这是浮点数一直存在的缺陷。如果要对数据的精度要求比较高,还是选择定点数decimal比较安全。
MySQL 数值类型溢出处理(了解)
当 MySQL 在某个数值列上存储超出列数据类型允许范围的值时,结果取决于当时生效的 SQL 模式
-
如果启用了严格的 SQL 模式,则 MySQL 会根据 SQL 标准拒绝带有错误的超出范围的值,并且插入失败。
SET sql_mode = 'TRADITIONAL'; -- 将当前会话的模式设置严格模式
-
如果没有启用任何限制模式,那么 MySQL 会将值裁剪到列数据类型范围的上下限值并存储
- 当超出范围的值分配给整数列时,MySQL 会存储表示列数据类型范围的相应端点的值
- 当为浮点或定点列分配的值超出指定(或默认)精度和比例所隐含的范围时,MySQL 会存储表示该范围的相应端点的值
SET sql_mode = ''; -- 禁用所有模式
不光是insert 的时候,其他时候也可能会触发数值溢出。
数值表达式求值过程中的溢出会导致错误,例如,因为最大的有符号 BIGINT 值是 9223372036854775807,因此以下表达式会产生错误。
mysql> SELECT 9223372036854775807 + 1;
ERROR 1690 (22003): BIGINT value is out of range in '(9223372036854775807 + 1)'
为了在这种情况下使操作成功,需要将值转换为 unsigned
mysql> SELECT CAST(9223372036854775807 AS UNSIGNED) + 1;
+-------------------------------------------+
| CAST(9223372036854775807 AS UNSIGNED) + 1 |
+-------------------------------------------+
| 9223372036854775808 |
+-------------------------------------------+
1 row in set (0.00 sec)
整数数值之间的减去,如果其中一个类型为 UNSIGNED ,默认情况下会生成无符号结果。如果为负,则会引发错误。
mysql> SET sql_mode = '';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT CAST(0 AS UNSIGNED) - 1;
ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(cast(0 as unsigned) - 1)'
这种情况下,如果启用了 NO_UNSIGNED_SUBTRACTION SQL 模式,则结果为负。
mysql> SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT CAST(0 AS UNSIGNED) - 1;
+-------------------------+
| CAST(0 AS UNSIGNED) - 1 |
+-------------------------+
| -1 |
+-------------------------+
1 row in set (0.00 sec)
如果此类操作的结果用于更新 UNSIGNED 整数列,则结果将裁剪为列类型的最大值,如果启用了 NO_UNSIGNED_SUBTRACTION 则裁剪为 0。但如果启用了严格的 SQL 模式,则会发生错误并且列保持不变。
MySQL的日期时间数据类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
TIMESTAMP类型有专有的自动更新特性,将在后面描述。
日期时间类型 | 占用空间 | 日期格式 | 最小值 | 最大值 | 零值表示 |
---|---|---|---|---|---|
DATETIME | 8 bytes | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 | 9999-12-31 23:59:59 | 0000-00-00 00:00:00 |
TIMESTAMP | 4 bytes | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:00 | 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | 00000000000000 |
DATE | 4 bytes | YYYY-MM-DD | 1000-01-01 | 9999-12-31 | 0000-00-00 |
TIME | 3 bytes | HH:MM:SS | -838:59:59 | 838:59:59 | 00:00:00 |
YEAR | 1 bytes | YYYY | 1901 | 2155 | 0000 |
我们来创建 一个表试试。
drop table dt01;
create table dt01(
d1 year,
d2 date,
d3 time,
d4 datetime,
d5 timestamp
);
insert into dt01 values ('2020', '2020-3-4', '3:4:5','2020-3-4 3:4:5', null);
insert into dt01 values ('2020', '20200304', '131415','20200304131415', CURRENT_TIMESTAMP);
insert into dt01 values ('2020', '2020-3-4', '3:4:5','2020-3-4 3:4:5', CURRENT_TIMESTAMP);
insert into dt01 values ('2020', '2020:3:4', '03:04:05','2020:3:4 3:4:5', CURRENT_TIMESTAMP);
insert into dt01 values ('2020', '2020-3-4', '3:4:5',
STR_TO_DATE('2019-12-5 7:8:9', '%Y-%m-%d %H:%i:%s'), CURRENT_TIMESTAMP);
insert into dt01 values ('2020', '2020-3-4', '3:4:5',
STR_TO_DATE('2019*12*5 7&8&9', '%Y*%m*%d %H&%i&%s'), CURRENT_TIMESTAMP);
insert into dt01 values ('2020', '2020-3-4', '3:4:5',
STR_TO_DATE('2019年12月12日 7时8分9秒', '%Y年%m月%d日 %H时%i分%s秒'), CURRENT_TIMESTAMP);
日期时间类型转换成格式字符串,可以使用这种方法。
select date_format(now(), ‘%Y-%m-%d %H:%i:%s’);
格式字符串转换成日期时间类型,可以使用这个函数
STR_TO_DATE('2019-12-5 7:8:9', '%Y-%m-%d %H:%i:%s')
format可以使用的值为:
%M 月名字(January……December)
%W 星期名字(Sunday……Saturday)
%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
%Y 年, 数字, 4 位
%y 年, 数字, 2 位
%a 缩写的星期名字(Sun……Sat)
%d 月份中的天数, 数字(00……31)
%e 月份中的天数, 数字(0……31)
%m 月, 数字(01……12)
%c 月, 数字(1……12)
%b 缩写的月份名字(Jan……Dec)
%j 一年中的天数(001……366)
%H 小时(00……23)
%k 小时(0……23)
%h 小时(01……12)
%I 小时(01……12)
%l 小时(1……12)
%i 分钟, 数字(00……59)
%r 时间,12 小时(hh:mm:ss [AP]M)
%T 时间,24 小时(hh:mm:ss)
%S 秒(00……59) %s 秒(00……59)
%p AM或PM
%w 一个星期中的天数(0=Sunday ……6=Saturday )
%U 星期(0……52), 这里星期天是星期的第一天
%u 星期(0……52), 这里星期一是星期的第一天
%% 一个文字“%”。
MySQL的字符串类型
类型 | 大小 | 用途 |
---|---|---|
CHAR(n) | 0-255字符(*字符集字节数) | 定长字符串 |
VARCHAR(2000) | 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 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换,CHAR删除尾部的空格,VARCHAR则保留尾部的空格。
因为varchar要记录数据长度(系统根据数据长度自动分配空间),所以每个varchar数据产生后,系统都会在数据后面增加1-2个字节的额外开销:是用来保存数据所占用的空间长度
如果数据本身小于127个字符:额外开销一个字节;如果大于127个,就开销两个字节。
最大长度根据字符集换算,GBK每个字符2个字节,UTF8每个字符3个字节,utf8mb4每个字符4字节,那么
在GBK字符集下,varchar最大长度32766,UTF8最大长度21844,UTF8MB4最大长度16384。
我们来验证一下
create table test7 (
test_char varchar(21845)
) character set utf8;
create table test7 (
test_char varchar(32766)
) character set gbk;
create table test7 (
test_char varchar(16383)
) character set utf8mb4;
还有一个有趣的现象,mysql表的每行记录字节总和不能超过65535。
create table test7 (
c1 char(100),
c2 varchar(21845)
) character set utf8;
create table test7 (
c1 char(100),
c2 varchar(21744)
) character set utf8;
BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。
1.BLOB和text存储方式不同,TEXT以文本方式存储,英文存储区分大小写,而Blob是以二进制方式存储,不分大小写。
2.BLOB存储的数据只能整体读出。
3.TEXT可以指定字符集,BLOB不用指定字符集。
查看表
-
查看某个数据库中的所有表
SHOW TABLES;
-
查看表结构
DESC 表名;
-
查看创建表的SQL语句
SHOW CREATE TABLE 表名;
具体操作:
- 查看mysql数据库中的所有表
SHOW TABLES;
- 查看student的创建表SQL语句
SHOW CREATE TABLE student;``
快速创建一个表结构相同的表
CREATE TABLE 新表名 LIKE 旧表名;
具体操作:
-
创建s1表,s1表结构和student表结构相同
CREATE TABLE s1 LIKE student;
删除表
- 直接删除表
DROP TABLE 表名;
- 判断表是否存在并删除表(了解)
DROP TABLE IF EXISTS 表名;
具体操作:
-
直接删除表s1表
DROP TABLE s1
;
-
判断表是否存在并删除s1表
DROP TABLE IF EXISTS s1;
修改表结构
修改表结构使用不是很频繁,只需要知道下,等需要使用的时候再回来查即可
1. 添加表列
ALTER TABLE 表名 ADD 列名 类型;
具体操作:
-
为学生表添加一个新的字段remark,类型为varchar(20)
ALTER TABLE student ADD remark VARCHAR(20);
2.修改列类型
ALTER TABLE 表名 MODIFY 列名 新的类型;
具体操作:
-
将student表中的remark字段的改成varchar(100)
ALTER TABLE student MODIFY remark VARCHAR(100);
3.修改列名
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
具体操作:
-
将student表中的remark字段名改成intro,类型varchar(30)
ALTER TABLE student CHANGE remark intro varchar(30);
4.删除列
ALTER TABLE 表名 DROP 列名;
具体操作:
-
删除student表中的字段intro
ALTER TABLE student DROP intro;
5.修改表名
RENAME TABLE 表名 TO 新表名;
具体操作:
-
将学生表student改名成student2
RENAME TABLE student TO student2;
6. 修改字符集
ALTER TABLE 表名 character set 字符集;
具体操作:
-
将sutden2表的编码修改成gbk
ALTER TABLE student2 character set gbk;