在前面的文章中,我们创建了数据库,那么创建完数据库之后,就要在数据库中创建表,表中存储着数据记录(数据行),而一条记录是由不同的列组成的,那么每个列需要什么样的数据类型呢?
因此,在学习表的操作之前,我们需要了解SQL的数据类型。
一、数据类型
在面向对象软件开发的过程中,通常会先进行需求分析从而得到类和属性,类 是面向对象中的概 念,对应到数据库中的概念就是实体 ,类中的属性对应实体中的属性 。实体通常以表 的形式存在,每个实体对应⼀张表 ,表中的每条记录(数据行)就是实体的⼀个实例 ,每条记录又包含若干字段(或称为列) ,每个字段代表实体的⼀个属性。
如果要定义实体的属性,就要为属性命名并指定合适的数据类型。与其他编程语言类似,SQL中 规定了用于描述属性的数据类型。常用的数据类型有以下几类:
- 数据值类型
- 字符串类型
- 二进制类型
- 日期类型
1.数据值类型
分为整型和浮点型。
|--------------------------|-----|-------------------------------------------------------------------------------------------------------------------------------------|
| 类型 | 大小 | 说明 |
| BIT[(M)] | bit | 二进制数/位值类型,M是指定的位数(范围1~64),如果省略M,则默认是1。 |
| TINYINT[(M)] | 1字节 | 取值范围 -2^7 ~ 2^7-1 ,无符号取值范围 2^8-1 。tinyint(1)对应Boolean/BOOL类型。 |
| SMALLINT[(M)] | 2字节 | 取值范围 -2^15 ~ 2^15-1 ,⽆符号取值范围 2^16-1 。 |
| INT([M]) | 4字节 | 取值范围 -2^31 ~ 2^31-1 ,⽆符号取值范围 2^32-1 。INTEGER[(M)]是INTEGER[(M)]。 |
| BIGINT[(M)] | 8字节 | 取值范围 -2^63 ~ 2^63-1 ,⽆符号取值范围 2^64-1。 |
| FLOAT[(M,D)] | 4字节 | 单精度浮点型,M是总位数/指定长度,D是小数点后面的位数,大约可以精确到小数点后7 位。 |
| DOUBLE[(M,D)] | 8字节 | 双精度浮点型,M是总位数,D是小数点后⾯的位数,⼤约可以精确到小数点后 15位。 |
| DECIMAL[ (M [ ,D]) ] | 动态 | 不存在精度损失,M是总位数,D是小数点后的位数。DECIMAL的最大位数(M)为 65,最大小数位数(D)为30。如果省略M,则默认为10,如果省略D,则默认为 0。M中不计算小数点和负数的-号,如果D为0,则值没有小数点和小数部分,也就是说是一个整数。 |
float和double类型,在表示小数的时候都不是特别精确,所以用decimal类型表示小数。
2.字符串类型
|------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------|
| 类型 | 说明 |
| CHAR[(M)] | 固定长度字符串, M 表示长度,以字符为单位 ,取值范围 0 ~ 255 ,M 省略,则长度为 1。 |
| VARCHAR(M) | 可变⻓度字符串, M表示字符最⼤长度,范围 0 ~ 65535 ,有效字符个数取决于实际字符数和使用的字符集 |
| TINYTEXT | 小文本类型,最大长度为 255 (2^8 - 1)个字符,有效字符个数取决于使用的字符集 |
| TEXT[(M)] | ⽂本类型,最大长度为 65535 (2^16 - 1)个字符,有效字符个数取决于使用的字符集 |
| MEDIUMTEXT | 中⽂本类型,最⼤⻓度为 16,777,215 (2^24 - 1)个字符,有效字符个数取决于使用的字符集 |
| LONGTEXT | ⼤⽂本类型,最⼤⻓度为 4,294,967,295 即 4GB (2^32 - 1)个字符,有效字符 个数取决于使⽤的字符集 |
| BINARY[(M)] | 固定⻓度⼆进制字节,与CHAR类似,但存储的是⼆进制字节⽽不是字符串 。 M 表示⻓度,以字节为单位 ,取值范围 0 ~ 255 ,M 省略则⻓度为 1 |
| VARBINARY(M) | 可变⻓度⼆进制字节,于VARCHAR类似,但存储的是⼆进制字节⽽不是字符串。 M 表示长度,以字节为单位 |
| TINYBLOB | ⼩⼆进制字节类型,最⼤⻓度为 255 (2^8 - 1)个字节 |
| BLOB[(M)] | ⼆进制字节类型,最⼤⻓度为 65535 (2^16 - 1)个字节 |
| MEDIUMBLOB | 中⼆进制字节类型,最⼤⻓度为 16,777,215 (2^24 - 1)个字节 |
| LONGBLOB | ⼤⼆进制字节类型,最⼤⻓度为 4,294,967,295 即4GB (2^8-1)个字节 |
| ENUM('value1','valu e2',...) | 枚举 1.从值列表 'value1','value2' 或 ''(空字符串) 和 NULL 中选⼀个值 2.最多可以有 65,535 个不同的元素 3.单个元素的最⼤⻓度是 M 或 (M x w) ,其中 M 是元素字 符⻓度, w 是字符集中字符所需的最⼤字节数4.ENUM的值在内部表⽰为整数 |
| SET('value1','value 2',...) | 集合 1.从值列表 'value1','value2' 中选零个或多个值 2.最多64个元素 3.单个元素的最⼤⻓度是 M 或 (M x w) ,其中 M 是元素字 符⻓度, w 是字符集中字符所需的最⼤字节数 4.SET值在内部表⽰为整数 |
3.日期类型
|---------------------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 类型 | 大小 | 说明 |
| TIMESTAMP[( fsp)] | 4byte | • 时间戳类型 • ⽀持范围 1970-01-01 00:00:01.000000 ~ 20388-01-19 03:14:07.499999 • 0值为 0000-00-00 00:00:00 |
| DATETIME[(f sp)] | 8byte | • ⽇期类型和时间类型的组合 • ⽀持范围 1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.499999 • 显⽰格式为 YYYY-MM-DD hh:mm:ss[.fraction] • 0值为 0000-00-00 00:00:00 |
| DATE | 3byte | • ⽇期类型 • ⽀持范围 1000-01-01 ~ 9999-12-31 • 显⽰格式为 YYYY-MM-DD • 0值为 0000-00-00 |
| TIME[(fsp)] | 3byte | • 时间类型 • ⽀持范围 -838:59:59.000000 ~ 838:59:59.000000 • 显⽰格式为 hh:mm:ss[.fraction] • 0值为 00:00:00 |
| YEAR[(4)] | 1byte | • 4位格式的年份 • ⽀持范围 1901 ~ 2155 • 显⽰格式为 YYYY • 0值为 0 |
fsp 为可选设置,++用来指定小数秒精度,范围从0到6,值为0表示没有小数部分,如果省略,默认 精度为0。++
二、表的操作
在前一篇文章中,我们创建了库并选择了创建的数据库中的指定的一个库 test2251225,现在需要对这个库进行表操作。
1.创建表
语法:
sql
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name(
field1 datatype [约束] [comment '注解内容'],
field2 datatype [约束] [comment '注解内容'],
field3 datatype [约束] [comment '注解内容']
) [engine 存储引擎] [character set 字符集] [collate 排序规则];
- TEMPORARY:表示创建的是⼀个临时表
- field datatype -- 字段名 数据类型;
- field:列名
- datatype:数据类型
- comment:对列的描述或说明,注释
- engine:存储引擎,不指定则使⽤默认存储引擎
- character set:字符集,不指定则使⽤默认字符集
- collate:排序规则,不指定则使⽤默认排序规则
- 在SQL中,注释有两种方式:一种是单行注释(使用--), 另一种是多行注释(/* */) 。在字段定义中使用comment是MySQL中用来为字段或表添加注释的方式
示例1:创建一个名为student的学生表,表中只包含两个字段,id 表示编号,name 表示姓名,字符串长度位50:

示例2:在创建表的同时加上校验

2.查看表
语法:
sql
show tables;
- 查看当前数据库中有哪些表
- tables是一个复数形式
此时该数据库中的表如下:

3.查看表结构
语法:
sql
desc 表名;
示例:

- Field:表中的列名/字段名
- Type:字段的数据类型
- Null:当前字段的值是否允许为Null
- Key:当前字段的索引类型/键值类型
- Default:当前列的默认值,什么都不指定默认为NULL
- Extra:扩展信息
4.修改表
语法:
sql
ALTER TABLE tbl_name [alter_option [, alter_option] ...];
alter_option: {
table_options
| ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]
| MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
| DROP [COLUMN] col_name
| RENAME COLUMN old_col_name TO new_col_name
| RENAME [TO | AS] new_tbl_name }
- tbl_name:要修改的表名
- ADD:向表中添加列
- MODIFY:修改表中现有的列
- DROP:删除表中现有的列
- RENAME COLUMN:重命名表中现有的列
- RENAME [TO | AS] new_tbl_name:重命名当前的表
示例1:向表中添加一列
向 student 表中添加一个列 ------ 分数列:

示例2:修改某一列的长度
修改 student 表中 score 列的长度:

示例3:重命名某列
修改 student 表中 score 这个列名为 grade :

示例4:删除表中的某个字段
删除 student 表中的 address 字段:

示例5:修改表名
修改 student 这个表的名字为 people:

5.删除表
语法:
sql
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
- 一条drop语句可以删除多个表,每个表之间用逗号隔开。
示例:


6.在可视化工具中进行表的操作
到这里,表的操作基本学完,现在我们在可视化工具中去操作:
示例:创建⼀个store数据库,⽤来管理商店的商品、顾客和订单数据

创建完成之后,可以保存到本地的**.sql**文件中,

那么,在可视化工具中把数据库store的创建表的SQL编写好后,如何在命令行工具中执行呢?
首先我们需要 source 命令,它的作用是 执行一个 SQL 脚本文件 。需要一个文件名作为参数。

也就是说,想要将文件加载到命令行中,需要:source 完整文件路径名; 来完成
如下图,已经加载到命令行中:

store 数据库已存在:

该库中的表也存在:

查看表的结构:
