RDBMS数据表的操作
RDB第2章 数据库和表的基本操作
本章学习目标
熟练掌握MySQL支持的数据类型
熟练掌握数据库的基本操作
熟练掌握数据表的基本操作
上一章讲解了数据库的基本概念和MySQL的安装等内容,本章将继续讲解MySQL支持的数据类型、数据库和数据表的基本操作。
2.1 MySQL支持的数据类型
要学习怎样使用MySQL操作数据库,首先要了解其支持的数据类型,MySQL支持所有标准的SQL数据类型,主要分数值类型、日期时间类型和字符串类型三类,接下来详细讲解这几种数据类型。
2.1.1 数值类型
MySQL支持所有标准SQL中的数值类型,其中包括严格数据类型,例如INTEGER、SMALLINT、DECIMAL和NUMBERIC,以及近似数值数据类型,例如FLOAT、REAL和DOUBLE PRESISION,并在此基础上进行扩展,扩展后增加了TINYINT、MEDIUMINT和BIGINT这三种长度不同的整型,另外还增加了BIT类型,用来存放位数据。
MySQL中不同数值类型所对应的字节大小和取值范围是不同的,具体如表2.1所示。
表2.1 MySQL数值类型
数据类型 |
字节数 |
无符号数的取值范围 |
有符号数的取值范围 |
TINYINT |
1 |
0~255 |
-128~127 |
SMALLINT |
2 |
0~65535 |
-32768~32767 |
MEDIUMINT |
3 |
0~16777215 |
-8388608~8388607 |
INT / INTEGER |
4 |
0~4294967295 |
-2147483648~2147483647 |
BIGINT |
8 |
0~18446744073709551615 |
-9223372036854775808~ 9223372036854775807 |
FLOAT |
4 |
0和1.175494351E-38~ 3.402823466E+38 |
-3.402823644E+38~ -1.175494351E-38 |
DOUBLE |
8 |
0和2.2250738585072014E-308~ 1.7976931348623157E+308 |
-1.7976931348623157E+308~ 2.2250738585072014E-308 |
DECIMAL(M,D) |
M+2 |
0和2.2250738585072014E-308~ 1.7976931348623157E+308 |
-1.7976931348623157E+308~ 2.2250738585072014E-308 |
表2.1中可以看出,占用字节最小的是TINYINT,占用字节数最大的是BIGINT,DECIMAL类型的取值范围与DOUBLE类型相同。
MySQL中支持的五个主要整数类型是TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT。这些类型在很大程度上是相同的,只是它们存储值的大小是不相同的。
MySQL支持的三个浮点类型是FLOAT、DOUBLE和DECIMAL类型。FLOAT数值类型用于表示单精度浮点数值,而DOUBLE数值类型用于表示双精度浮点数值。
2.1.2 字符串类型
MySQL提供了八个基本的字符串类型,分别为CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和SET类型,可以存储的范围从简单的一个字符到巨大的文本块或二进制字符串数据,常见的字符串类型所对应的字节大小和取值范围如表2.2所示。
表2.2 MySQL字符串类型
数据类型 |
字节数 |
类型描述 |
CHAR |
0~255 |
定长字符串 |
VARCHAR |
0~255 |
可变长字符串 |
TINYBLOB |
0~255 |
不超过 255 个字符的二进制字符串 |
TINYTEXT |
0~255 |
短文本字符串 |
BLOB |
0~65535 |
二进制形式的长文本数据 |
TEXT |
0~65535 |
长文本数据 |
MEDIUMBLOB |
0~16777215 |
二进制形式的中等长度文本数据 |
MEDIUMTEXT |
0~16777215 |
中等长度文本数据 |
LOGNGBLOB |
0~4294967295 |
二进制形式的极大文本数据 |
LONGTEXT |
0~4294967295 |
极大文本数据 |
VARBINARY(M) |
0~M |
允许长度0~M个字节的定长字节符串,值的长度+1个字节 |
BINARY(M) |
0~M |
允许长度0~M个字节的定长字节符串 |
表2.2列出了常见的字符串类型,其中有些类型比较相似,接下来详细讲解一些容易混淆的类型。
1.CHAR和VARCHAR类型
CHAR 类型用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。这个大小修饰符的范围是0~255,比指定长度大的值将被截短,而比指定长度小的值将会用空格作填补。
CHAR类型可以使用BINARY修饰符。当用于比较运算时,这个修饰符使CHAR以二进制方式参与运算,而不是以传统的区分大小写的方式。
CHAR类型的一个变体是VARCHAR 类型。它是一种可变长度的字符串类型,并且也必须带有一个范围在0~255之间的指示器。CHAR和VARCHGAR不同之处在于MYSQL数据库处理这个指示器的方式,CHAR把这个大小视为值的大小,在长度不足的情况下就用空格补足。而VARCHAR类型把它视为最大值并且只使用存储字符串实际需要的长度(增加一个额外字节来存储字符串本身的长度)来存储值,所以短于指示器长度的VARCHAR类型不会被空格填补,但长于指示器的值仍然会被截短。
VARCHAR类型可以根据实际内容动态改变存储值的长度,因此在不能确定字段需要多少字符时使用VARCHAR类型可以大大地节约磁盘空间、提高存储效率,VARCHAR类型在使用BINARY修饰符时与CHAR类型完全相同。
2.TEXT和BLOB类型
对于字段长度超过255的情况下,MySQL提供了TEXT和BLOB两种类型。根据存储数据的大小,它们都有不同的子类型。这些大型的数据用于存储文本块或图像、声音文件等二进制数据类型。
TEXT类型和BLOB类型的相同点具体如下。
在TEXT或BLOB列的存储或检索过程中,不存在大小写转换,当未运行在严格模式时,如果为BLOB或TEXT列分配一个超过该列类型的最大长度值时,值会被截取。如果截掉的字符不是空格,将会产生一条警告。
BLOB和TEXT列都不能有默认值。
当保存或检索BLOB和TEXT列的值时不删除尾部空格。
对于BLOB和TEXT列的索引,必须指定索引前缀的长度。
TEXT类型和BLOB类型的不同点具体如下。
TEXT值是大小写不敏感的,而BLOB是大小写敏感的。
TEXT被视为非二进制字符串,而BLOB被视为二进制字符串。
TEXT列有一个字符集,并且根据字符集的校对规则对值进行排序和比较,BLOB列没有字符集。
可以将TEXT列视为VARCHAR列,在大多数情况下,可以将BLOB列视为足够大的VARBINARY列。
BLOB可以储存图片,而TEXT不可以,TEXT只能储存纯文本文件。
2.1.3 日期时间类型
在处理日期和时间类型的值时,MySQL带有不同的数据类型可供选择。它们可以被分成简单的日期、时间类型和混合的日期、时间类型。根据要求的精度,子类型在每个分类型中都可以使用,并且MySQL带有内置功能,可以将多样化的输入格式变为一个标准格式。日期和时间类型同样有对应的字节数和取值范围等,如表2.3所示。
表2.3 MySQL日期和时间类型
数据类型 |
字节数 |
取值范围 |
日期格式 |
零值 |
YEAR |
1 |
1901~2155 |
YYYY |
0000 |
DATE |
4 |
1000-01-01~9999-12-3 |
YYYY-MM-DD |
0000-00-00 |
TIME |
3 |
-838:59:59~838:59:59 |
HH:MM:SS |
00:00:00 |
DATETIME |
8 |
1000-01-01 00:00:00~ 9999-12-31 23:59:59 |
YYYY-MM-DD HH:MM:SS |
0000-00-00 00:00:00 |
TIMESTAMP |
4 |
1970-01-01 00:00:01~ 2038-01-19 03:14:07 |
YYYY-MM-DD HH:MM:SS |
0000-00-00 00:00:00 |
表2.3中,每种日期和时间类型都有一个有效范围。如果插入的值超过这个范围,系统会报错,并将0值插入到数据库中,不同的日期与时间类型有不同的0值,上表中已经详细列出。接下来详细讲解上表中的几种数据类型。
1.YEAR
YEAR类型使用1个字节来表示年份,MySQL中以YYYY的形式来显示YEAR类型的值,为YEAR类型的字段赋值表示方法如下。
使用4位字符串和数字表示。其范围是1901~2155。输入格式为'YYYY'或YYYY。例如,输入‘2008’或者2008,可直接保存2008。如果超过了范围,就会插入0000。
使用两位字符串表示。‘00’~‘69’转换为2000~2069,‘70’~‘99’转换为1970~1999。例如,输入‘35’,YEAR值会转换成2035,输入‘90’,YEAR值会转换成1990。
使用两位数字表示。1~69转换为2001~2069,70~99转换为1970~1999。这里就不再举例。
另外,一般用YEAR类型来表示年份,所以在对该字段进行相关操作的时候,最好使用四位字符串或者数字表示,不要使用两位的字符串和数字。
有时可能会插入0或者‘0’。这里要严格区分0和‘0’,如果向YEAR类型的字段插入0,存入该字段的年份是0000;如果向YEAR类型的字段插入‘0’,存入的年份是2000。
2.TIME类型
TIME类型使用3个字节来表示时间。MySQL中以HH:MM:SS的形式显示TIME类型的值。其中,HH表示时,取值范围为0~23,MM表示分,取值范围为0~59,SS表示秒,取值范围是0~59。
TIME类型的范围可以从‘-838:59:59’~‘838:59:59’。虽然小时的范围是0~23,但是为了表示某种特殊需要的时间间隔,将TIME类型的范围扩大了。而且还支持了负值。TIME类型的字段赋值表示方法如下。
表示‘D HH:MM:SS’格式的字符串。其中,D表示天数,取值范围是0~34。保存时,小时的值等于(D*24+HH)。例如,输入‘2 11:30:50’,TIME类型会转换为59:30:50。当然,输入时可以不严格按照这个格式,可以是‘HH:MM:SS’、'HH:MM'、'D HH:MM'、'D HH'、'SS'等形式。例如,输入‘30’,TIME类型会自动转换为00:00:30。
表示‘HHMMSS’格式的字符串或HHMMSS格式的数值,例如,输入‘123456’,TIME类型会转换成12:34:56。如果输入0或者‘0’,那么TIME类型会转换为0000:00:00。
使用current_time或者current_time()或者now()输入当前系统时间,这些属于MySQL的函数,会在以后的章节讲解。
还需注意的是,一个合法的TIME值,如果超出了TIME的范围,将被截取为范围最接近的端点。举个例子,‘880:00:00’将会被转换为838:59:59。另外,无效的TIME值,在命令行下无法被插入到表中。
3.DATE类型
DATE类型使用4个字节来表示日期。MySQL中是以YYYY-MM-DD的形式显示DATE类型的值。其中,YYYY表示年,MM表示月,DD表示日。DATE类型的范围是‘1000-01-01’~‘9999-12-31’。DATE类型的字段赋值表示方法如下。
表示‘YYYY-MM-DD’或‘YYYYMMDD’格式的字符串,DATE类型可以表达的范围是‘1000-01-01’~‘9999-12-31’。例如,输入‘4008-2-8’,DATE类型将转换为4008-02-08;输入‘40080308’,DATE类型将转换为4008-03-08。
MySQL中还支持一些不严格的语法格式,任何标点都可以用来做间隔符。如‘YYYY/MM/DD’、‘YYYY@MM@DD’和‘YYYY.MM.DD’等分隔形式。例如,输入‘2011.3.8’,DATE类型将转换为2011-03-08。
表示‘YY-MM-DD’或者‘YYMMDD’格式的字符串,其中‘YY’的取值,‘00’~‘69’转换为2000~2069,‘70’~‘99’转换为1970~1999,与YEAR类型类似。例如,输入‘35-01-02’,DATE类型将转换为2035-01-02,输入‘800102’,DATE类型将转换为1980-01-02。
同样的,MySQL中也支持一些不严格的语法格式,如‘YY/MM/DD’,‘YY@MM@DD’,‘YY.MM.DD’等分隔形式。例如,输入‘89@3@8’,DATE类型将转换为1989-03-08。
YYYYMMDD或YYMMDD格式的数字表示。其中,‘YY’的取值,‘00’~‘69’转换为2000~2069,‘70’~‘99’转换为1970~1999。与year类型类似。例如,输入20080808,DATE类型将转换为2008-08-08;输入790808,DATE类型将转换为1979-08-08;输入0,那么DATE类型会转化为0000-00-00。
使用current_date或now()输入当前系统时间,这些属于MySQL的函数,会在以后的章节讲解。
在实际开发中,如果只需要记录日期,选择DATE类型是最合适的,因为DATE类型只占用4个字节,需要注意的是,虽然MySQL支持DATE类型的一些不严格的语法格式,但是,在实际应用中,最好还是选择标准形式。日期中使用“-”做分隔符,时间用“:”做分隔符,中间用空格隔开,格式如2016-03-17 16:27:55。当然如果有特殊需要,可以使用“@”,“*”等特殊字符做分隔符。
4.DATETIME类型
DATETIME类型使用8个字节来表示日期和时间。MySQL中以‘YYYY-MM-DD HH:MM:SS’的形式来显示DATETIME类型的值。从其形式上可以看出,DATETIME类型可以直接用DATE类型和TIME类型组合而成。DATETIME类型的字段赋值表示方法如下。
表示‘YYYY-MM-DD HH:MM:SS’或‘YYYYMMDDHHMMSS’格式的字符串。这种方式可以表达的范围是‘1000-01-01 00:00:00’~‘9999-12-31 23:59:59’。例如,输入‘2008-08-08 08:08:08’,DATETIME类型会自动转换为2008-08-08 08:08:08,输入‘20080808080808’,同样转换为2008-08-08 08:08:08。
MySQL中还支持一些不严格的语法格式,任何的标点都可以用来做间隔符。情况与DATE类型相同,而且时间部分也可以使用任意的分隔符隔开,这与TIME类型不同,TIME类型只能用‘:’隔开。例如,输入‘2008@08@08 08*08*08’,数据库中DATETIME类型统一转换为2008-08-08 08:08:08。
表示‘YY-MM-DD HH:MM:SS’或‘YYMMDDHHMMSS’格式的字符串。其中‘YY’的取值,‘00’~‘69’转换为2000~2069,‘70’~‘99’转换为1970~1999。与YEAR类型和DATE类型相同。例如,输入‘69-01-01 11:11:11’,数据库中插入2069-01-01 11:11:11,输入‘70-01-01 11:11:11’,数据库中插入1970-01-01 11:11:11。
使用now()来输入当前系统日期和时间,这属于MySQL的函数,会在后面的章节讲解。
DATETIME类型用来记录日期和时间,其作用等价于DATE类型和TIME类型的组合。一个DATETIME类型的字段可以用一个DATE类型的字段和一个TIME类型的字段代替。但是如果需要同时记录日期和时间,选择DATETIME类型是个不错的选择。
5.TIMESTAMP类型
TIMESTAMP类型使用4个字节来表示日期和时间。TIMESTAMP类型的范围是1970-01-01 08:00:01~2038-01-19 11:14:07。MySQL中也是以‘YYYY-MM-DD HH:MM:SS’的形式显示TIMESTAMP类型的值。从其形式可以看出,TIMESTAMP类型与DATETIME类型显示的格式是一样的。给TIMESTAMP类型的字段赋值的表示方法基本与DATETIME类型相同。值得注意的是,TIMESTAMP类型范围比较小,没有DATETIME类型的范围那么大。因此输入值时要保证在TIMESTAMP类型的有效范围内。
2.2 数据库的基本操作
前面讲解了MySQL支持的数据类型,接下来详细讲解数据库的相关操作。
2.2.1 创建和查看数据库
创建数据库就是在数据库系统中划分一块存储数据的空间,在MySQL中,创建数据库的语法格式如下所示。
CREATE DATEBASE 数据库名称;
以上示例中是创建数据库的语法,这里要注意的是,数据库名称是唯一的,不能重复。
例2-1 创建一个名为qianfeng的数据库,SQL语句如下所示。
CREATE DATABASE qianfeng;
执行结果如下所示。
mysql> CREATE DATABASE qianfeng;
Query OK, 1 row affected (0.01 sec)
以上执行结果证明SQL语句运行成功,为了验证数据库系统中是否创建了名为qianfeng的数据库,需要查看数据库,查看数据库的SQL语句如下所示。
SHOW DATABASES;
例2-2 查看所有已存在的数据库,SQL语句如下所示。
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| qianfeng |
| test |
+--------------------+
5 rows in set (0.00 sec)
从以上执行结果中可看出,数据库中一共存在五个数据库,其中有四个MySQL自动创建的库,还有一个名为qianfeng的库是例2-1创建的数据库。
另外,还可以查看已经创建的数据库信息,语法格式如下所示。
SHOW CREATE DATABASE 数据库名称;
例2-3 查看创建的数据库qianfeng的信息,SQL语句如下所示。
mysql> SHOW CREATE DATABASE qianfeng;
+----------+---------------------------------
----------------------------------+
| Database | Create Database |
+----------+---------------------------------
----------------------------------+
| qianfeng | CREATE DATABASE `qianfeng`
/*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+----------------------------------
---------------------------------+
1 row in set (0.00 sec)
以上执行结果显示了数据库qianfeng的创建信息,例如编码方式为utf8。
除了以默认编码方式创建数据库,还可以指定编码方式创建数据库,例如创建一个名为qianfeng2的数据库,编码指定为gbk,SQL语句如下所示。
mysql> CREATE database qianfeng2 character set gbk;
Query OK, 1 row affected (0.00 sec)
执行成功后,可以查看数据库qianfeng2的信息,SQL语句如下所示。
mysql> SHOW CREATE DATABASE qianfeng2;
+----------+---------------------------------
----------------------------------+
| Database | Create Database |
+----------+---------------------------------
----------------------------------+
| qianfeng | CREATE DATABASE `qianfeng2`
/*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+----------------------------------
---------------------------------+
1 row in set (0.00 sec)
从执行结果可看出,新创建的数据库qianfeng2,编码方式为gbk。
2.2.2 使用数据库
创建数据库后,如果在创建的数据库中进行操作,还需要切换到该数据库,具体语法格式如下。
USE 数据库名;
例2-4 切换到数据库qianfeng,SQL语句如下所示。
mysql> USE qianfeng;
Database changed
看到Database changed提示,证明已经切换到了数据库qianfeng,另外,在使用数据库时,还可以查看当前使用的是哪个数据库,SQL语句如下所示。
mysql> SELECT database();
+------------+
| database() |
+------------+
| qianfeng |
+------------+
1 row in set (0.00 sec)
从执行结果可看出,此时使用的是数据库qianfeng。
2.2.3 修改数据库
前面讲解了如何创建和查看数据库,数据库创建完成后,编码也就确定了,若想修改数据库的编码,可以使用ALTER DATABASE语句实现,具体语法格式如下。
ALTER DATABASE 数据库名称 DEFAULT CHARACTER
SET 编码方式 COLLATE 编码方式_bin;
例2-5 将数据库qianfeng的编码修改为gbk,SQL语句如下所示。
mysql> ALTER DATABASE qianfeng DEFAULT CHARACTER
SET gbk COLLATE gbk_bin;
Query OK, 1 row affected (0.01 sec)
修改完成后,可以查看是否修改成功,SQL语句如下所示。
mysql> SHOW CREATE DATABASE qianfeng;
+----------+---------------------------------
----------------------------------+
| Database | Create Database |
+----------+---------------------------------
----------------------------------+
| qianfeng | CREATE DATABASE `qianfeng`
/*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+----------------------------------
---------------------------------+
1 row in set (0.00 sec)
从以上执行结果可看出,数据库qianfeng的编码为gbk,说明数据库的编码修改成功。
2.2.4 删除数据库
删除数据库就是将数据库系统中已经存在的数据库删除,删除后,数据库中所有数据会被清除,为数据库分配的空间也将被回收,删除数据库的语法格式如下。
DROP DATABASE 数据库名称;
例2-6 将数据库qianfeng删除,SQL语句如下所示。
mysql> DROP DATABASE qianfeng;
Query OK, 0 rows affected (0.01 sec)
删除完成后,为了验证删除数据库的操作是否成功,可以查看数据库系统中的所有库,SQL语句如下所示。
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
从以上执行结果可看出,数据库系统中已经不存在名称为qianfeng的数据库,证明数据库的删除操作成功。
2.3 数据表的基本操作
前面讲解了对数据库的操作,接下来还需要学习对数据表的操作。
2.3.1 创建数据表
数据库创建成功后,就可以在已经创建的数据库中创建数据表,在建表之前,要使用“USE 数据库名”切换到操作的数据库,创建数据表的语法格式如下所示。
CREATE table 表名(
字段名1 数据类型,
字段名2 数据类型,
……
字段名n 数据类型
);
以上示例中,表名指的是创建数据表的名称,字段名指的是数据表的列名。
例2-7 在数据库qianfeng中创建一个学生表stu,如表2.4所示。
表2.4 stu表
字段名称 |
数据类型 |
备注说明 |
stu_id |
INT(10) |
学生编号 |
stu_name |
VARCHAR(50) |
学生姓名 |
stu_age |
INT(10) |
学生年龄 |
首先,创建数据库qianfeng,SQL语句如下所示。
CREATE DATABASE qianfeng;
然后使用该数据库,SQL语句如下所示。
mysql> USE qianfeng;
Database changed
创建数据表stu,SQL语句如下所示。
mysql> CREATE TABLE stu(
-> stu_id INT(10),
-> stu_name VARCHAR(50),
-> stu_age INT(10)
-> );
Query OK, 0 rows affected (0.08 sec)
此时可以查看数据表是否创建成功,使用SHOW TABLES语句即可,SQL语句如下所示。
mysql> SHOW TABLES;
+--------------------+
| Tables_in_qianfeng |
+--------------------+
| stu |
+--------------------+
1 row in set (0.00 sec)
从执行结果中可看出,数据库中已经成功创建stu表。
2.3.2 查看数据表
创建完成数据表后,可以通过SHOW CREATE TABLE查看数据表,语法格式如下所示。
SHOW CREATE TABLE 表名;
例2-8 查看前面创建的stu表,SQL语句如下所示。
mysql> SHOW CREATE TABLE stu;
+-------+----------------------------------------------
---------------------------------------------------------
--------------------------------------
-----------------------+
| Table | Create Table
|
+-------+-------------------------------------------------
-----------------------------------------------------------
---------------------------------
-----------------------+
| stu | CREATE TABLE `stu` (
`stu_id` int(10) DEFAULT NULL,
`stu_name` varchar(50) DEFAULT NULL,
`stu_age` int(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+---------------------------------------------------
--------------------------------------------------------------
----------------------------
-----------------------+
1 row in set (0.02 sec)
执行结果中可看出,SHOW CREATE TABLE不仅可以查看表中的列,还可以查看表的字符编码等信息,但是显示的格式非常混乱,可以在查询语句后加上参数“\G”进行格式化,SQL语句如下所示。
mysql> SHOW CREATE TABLE stu\G;
*************************** 1. row ***************************
Table: stu
Create Table: CREATE TABLE `stu` (
`stu_id` int(10) DEFAULT NULL,
`stu_name` varchar(50) DEFAULT NULL,
`stu_age` int(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
执行结果中,显示的格式明显比之前整齐很多。
另外,如果只想查看表中列的相关信息,可以使用DESCRIBE语句,语法格式如下所示。
DESCRIBE 表名;
例2-9 使用DESCRIBE语句查看stu表,SQL语句如下所示。
mysql> DESCRIBE stu;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| stu_id | int(10) | YES | | NULL | |
| stu_name | varchar(50) | YES | | NULL | |
| stu_age | int(10) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
执行结果中列出了表中所有列的相关信息,另外还可以使用DESC的简写,SQL语句如下所示。
mysql> DESC stu;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| stu_id | int(10) | YES | | NULL | |
| stu_name | varchar(50) | YES | | NULL | |
| stu_age | int(10) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
这两种查询方式结果是一样的,因此一般使用简写的方式来查询。
2.3.3 修改数据表
前面讲解了如何创建和查看数据表,在实际开发中,数据表创建完成后,可能会对数据表的表名、表中的字段名、字段的数据类型等进行修改,接下来对数据表的修改进行详细讲解。
1.修改表名
在MySQL中,修改表名的语法格式如下所示。
ALTER TABLE 原表名 RENAME [TO] 新表名;
以上示例中,关键字TO是可选的,是否写TO关键字都不会影响SQL语句的执行,一般忽略不写。
例2-10 将例2-7创建的stu表的表名修改为student,SQL语句如下所示。
mysql> ALTER TABLE stu RENAME student;
Query OK, 0 rows affected (0.15 sec)
以上执行结果证明表名修改完成,为了进一步验证,可以使用SHOW TABLES查看库中的所有的表,SQL语句如下所示。
mysql> SHOW TABLES;
+--------------------+
| Tables_in_qianfeng |
+--------------------+
| student |
+--------------------+
1 row in set (0.00 sec)
从以上执行结果可看出,stu表名成功修改为student。
2.修改字段名
数据表中的字段也时常有变更的需求,修改字段名的语法格式如下所示。
ALTER TABLE 表名 CHANGE 原字段名 新字段名 新数据类型;
例2-11 将student表中的stu_age字段,修改为stu_sex,数据类型为VARCHAR(10),SQL语句如下所示。
mysql> ALTER TABLE student CHANGE stu_age stu_sex VARCHAR(10);
Query OK, 0 rows affected (0.24 sec)
Records: 0 Duplicates: 0 Warnings: 0
以上执行结果证明字段修改完成,为了进一步验证,可以使用DESC查看student表,SQL语句如下所示。
mysql> DESC student;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| stu_id | int(10) | YES | | NULL | |
| stu_name | varchar(50) | YES | | NULL | |
| stu_sex | varchar(10) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
从以上执行结果可看出,student表中的stu_age字段成功修改为stu_sex。
3.修改字段的数据类型
上面讲解了如何修改表中的字段,但有时并不需要修改字段,只需修改字段的数据类型,修改表中字段数据类型的语法格式如下所示。
ALTER TABLE 表名 MODIFY 字段名 数据类型;
例2-12 将student表中的stu_sex字段的数据类型修改为CHAR,SQL语句如下所示。
mysql> ALTER TABLE student MODIFY stu_sex CHAR;
Query OK, 0 rows affected (0.17 sec)
Records: 0 Duplicates: 0 Warnings: 0
以上执行结果证明字段数据类型修改完成,为了进一步验证,可以使用DESC查看student表,SQL语句如下所示。
mysql> DESC student;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| stu_id | int(10) | YES | | NULL | |
| stu_name | varchar(50) | YES | | NULL | |
| stu_sex | char(1) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
从以上执行结果可看出,student表中的stu_sex字段数据类型成功修改为CHAR类型。
4.添加字段
在实际开发中,可能随着需求的扩展,表中需要添加字段,MySQL中添加字段的语法格式如下所示。
ALTER TABLE 表名 ADD 新字段名 数据类型;
例2-13 在student表中添加stu_hobby字段,数据类型为VARCHAR(50),SQL语句如下所示。
mysql> ALTER TABLE student ADD stu_hobby VARCHAR(50);
Query OK, 0 rows affected (0.18 sec)
Records: 0 Duplicates: 0 Warnings: 0
以上执行结果证明字段添加成功,为了进一步验证,可以使用DESC查看student表,SQL语句如下所示。
mysql> DESC student;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| stu_id | int(10) | YES | | NULL | |
| stu_name | varchar(50) | YES | | NULL | |
| stu_sex | char(1) | YES | | NULL | |
| stu_hobby | varchar(50) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
从以上执行结果可看出,student表中添加了stu_hobby字段,并且该字段的数据类型为VARCHAR(50)。
5.删除字段
删除表中某一字段也是很可能出现的需求,MySQL中删除字段的语法格式如下所示。
ALTER TABLE 表名 DROP 字段名;
例2-14 将student表中stu_hobby字段删除,SQL语句如下所示。
mysql> ALTER TABLE student DROP stu_hobby;
Query OK, 0 rows affected (0.20 sec)
Records: 0 Duplicates: 0 Warnings: 0
以上执行结果证明字段删除成功,为了进一步验证,可以使用DESC查看student表,SQL语句如下所示。
mysql> DESC student;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| stu_id | int(10) | YES | | NULL | |
| stu_name | varchar(50) | YES | | NULL | |
| stu_sex | char(1) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
从以上执行结果可看出,student表中删除了stu_hobby字段。
6.修改字段的排列位置
在创建表时,表中字段的位置就已经确定,如果要修改表中字段的位置,同样需要使用ALTER TABLE来修改,MySQL中修改字段排列位置的语法格式如下所示。
ALTER TABLE 表名 MODIFY 字段名1 数据类型 FIRST|AFTER 字段名2;
以上示例中,字段名1是要修改位置的字段,FIRST是可选参数,表示将字段1修改为表的第一个字段,AFTER 字段名2表示将字段1插入到字段2的后面。
例2-15 将student表中stu_name字段放到stu_sex字段后面,SQL语句如下所示。
mysql> ALTER TABLE student MODIFY
-> stu_name VARCHAR(50) AFTER stu_sex;
Query OK, 0 rows affected (0.20 sec)
Records: 0 Duplicates: 0 Warnings: 0
以上执行结果证明字段位置修改成功,为了进一步验证,可以使用DESC查看student表,SQL语句如下所示。
mysql> DESC student;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| stu_id | int(10) | YES | | NULL | |
| stu_sex | char(1) | YES | | NULL | |
| stu_name | varchar(50) | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
从以上执行结果可看出,student表中stu_name字段排列在stu_sex字段后面了。
2.3.4 删除数据表
删除数据表是从数据库将数据表删除,同时删除表中存储的数据,在MySQL中使用DROP TABLE语句删除数据表,语法格式如下所示。
DROP TABLE 表名;
例2-16 将student表删除,SQL语句如下所示。
mysql> DROP TABLE student;
Query OK, 0 rows affected (0.09 sec)
以上执行结果证明student表删除成功,为了进一步验证,可以使用SHOW TABLES查看数据库中所有的表,SQL语句如下所示。
mysql> SHOW TABLES;
Empty set (0.00 sec)
从以上执行结果可看出,数据库为空,student表删除成功。
2.4 本章小结
本章详细讲解了MySQL支持的数据类型,对数据库的基本操作,例如创建、查看、修改和删除库做了介绍,最后讲解了数据表的基本操作。
2.5 习题
1.思考题
(1) 请简述MySQL支持的数值类型有哪些。
(2) 请简述MySQL支持的字符串类型有哪些。
(3) 请简述MySQL支持的日期时间类型有哪些。
(4) 请简述如何创建和查看数据库。
(5) 请简述如何创建数据表。
- 点赞
- 收藏
- 关注作者
评论(0)