SQL——概述、数据类型、字段约束
目录
1 数据库术语
- 数据库(Database) :存储的数据的集合,提供数据存储的服务
- 数据(Data) :实际上指的是描述事物的符号记录
- 数据库管理系统(Database Management System,DBMS ) : 数据库管理系统,是位于⽤户与操作系统之间的⼀层数据管理软件
- 数据库系统管理员(Database Anministrator,简称为DBA) :负责数据库创建、使⽤及维护的专⻔⼈员
- 数据库系统(Database System,DBS) :数据库系统管理员、数据库管理系统及数据库组成整个单元
2 SQL语言功能分类
SQL功能 | 解释与命令 |
DDL(Data Definition Language:数据定义) | 完成对数据库对象(数据库、数据表、视图、索引等)的创建create、删除drop、修改alter |
DQL(Data Query Language:数据查询) | select |
DML(Data Manipulation Language:数据操作) | 对数据表中的数据的添加insert、删除delete、修改update操作 |
DCL(Data Control Language:数据控制) |
事务管理等控制性操作 |
3 数据类型
3.1 数值类型
精确数值类型 |
说明 |
存储空间 |
bigint |
存储从–263 (–9,223,372,036,854,775,808)到263- 1 (9,223, 372, 036, 854,775,807) 范围的整数 |
8字节 |
int |
存储从–231 (–2,147,483,648 ) 到 231-1 ( 2,147,483,647 ) 范围的整数 |
4字节 |
smallint |
存储从–215 (–32,768 ) 到 215-1 (32,767 ) 范围的整数 |
2字节 |
tinyint |
存储从 0 到 255 之间的整数 |
1字节 |
bit |
存储1或0或null。如果一个表中有不多于8个的bit列,则这些列公用一个字节存储 |
1字节 |
numeric[(p[,s])] 或 decimal[(p[,s])] |
定点精度和小数位数。使用最大精度时,有效值从–1038 +1 到1038-1。 其中,p为精度,指定小数点左边和右边可以存储的十进制数字的最大个数。精度必须是从1到最大精度38之间的值。默认精度为18。s为小数位数,指定小数点右边可以存储的十进制数字的最大个数,0 <= s <= p. s的默认值为0 |
最多17字节 |
近似数值类型 |
说明 |
存储空间 |
float[(n)] |
存储从-1.79E + 308至-2.23E –308、0以及2.23E–308至1.79E + 308范围的浮点数。n有两个值,如果指定的n在1~24之间,则使用24,占用4字节空间;如果指定的n在25~53之间,则使用53,占用8字节空间。若省略(n),则默认为53 |
4字节或8字节 |
real |
存储从–3.40E + 38到3.40E + 38范围的浮点型数 |
4字节 |
3.2 字符串类型
1、普通编码(非unicode )字符串类型
数据类型 |
说明 |
存储空间 |
char[(n)] |
固定长度,非 Unicode 字符串数据。 n 用于定义字符串长度,取值范围为 1 到 8000。 char 的 ISO 同义词为 character |
n字节 |
varchar[(n|max)] |
可变长度,非 Unicode 字符串数据。 n 用于定义字符串长度,取值范围为 1 到 8,000。 max 指示最大存储大小是 231-1 个字节(2GB)。 varchar 的 ISO 同义词为 char varying 或 character varying |
n+2(结束标识)字节 |
text |
可存储231-1 (2,147,483,647) 个长度可变的非 Unicode 字符数据 |
2、统一字符编码( unicode )字符串类型
数据类型 |
说明 |
存储空间 |
nchar[(n)] |
固定长度的 Unicode 字符串数据。 n 用于定义字符串长度,取值范围为 1 到 4000。 nchar 的ISO同义词为national char 和national character |
2*n 字节 |
nvarchar[(n|max)] |
可变长度的Unicode 字符串数据。n 用于定义字符串长度,取值范围为 为1 到 4000。max 指示最大存储大小是 231-1 个字节 (2GB)。nvarchar 的 ISO 同义词为 national char varying 和 national character varying |
2*n+2(结束标识)个字节 |
ntext |
长度可变的Unicode字符串数据,字符串最大长度为 230-1 (1,073,741,823) 个字节。ntext 的ISO 同义词为 national text |
所输入字符串长度的两倍(以字节为单位) |
3、二进制字符串类型
数据类型 |
说明 |
存储空间 |
binary[(n)] |
固定长度为 n 字节的二进制数据,n 的取值从1 到 8000 |
n 字节 |
varbinary[(n|max)] |
可变长度二进制数据。n 的取值从1 到 8000,max指示最大存储大小为 231-1 字节。varbinary 的 ANSI SQL 同义词为 binary varying |
所输入数据的实际长度 +2(结束标识) 个字节 |
image |
长度可变的二进制数据,二进制数据最大长度为231-1 (2,147,483,647) 个字节 |
0 到 231-1 个字节 |
3.3日期类型
类型 | 格式 | 说明 |
date | 2023-04-04 | 日期,只存储年月日 |
time | 20:38:35 | 时间,只存储时分秒 |
year | 2023 | 年份 |
datetime | 2023-04-04 20:38:35 | 日期+时间 |
timestamp | 20230404 203835 | 日期+时间(时间戳) |
4 字段约束
为什么要给表中的列添加约束呢?
- 保证数据的有效性
- 保证数据的完整性
- 保证数据的正确性
字段常见的约束有哪些呢?
- ⾮空约束(not null):限制此列的值必须提供,不能为null
- 唯⼀约束(unique):在表中的多条数据,此列的值不能重复
- 主键约束(primary key):⾮空+唯⼀,能够唯⼀标识数据表中的⼀条数据
- 外键约束(foreign key):建⽴不同表之间的关联关系
- 默认约束(default):当向表插入数据时,若没为定义了default的列提供值,则给定列指定默认值
- 限制约束(check): 限制列的取值范围。
# 创建表时添加主键约束
create table Student(
S_num char(7) primary key,
S_name char(10) not null,
S_sex char(2) ,
S_age tinyint ,
S_dept char(20)
);
# 或者
create table Student(
S_num char(7) ,
S_name char(10) not null,
S_sex char(2) ,
S_age tinyint ,
S_dept char(20),
primary key(S_num)
);
# 删除数据表主键约束
alter table <name> drop primary key;
# 创建表之后添加主键约束
create table Student(
S_num char(7),
S_name char(10) not null,
S_sex char(2) ,
S_age tinyint ,
S_dept char(20)
);
# 创建表之后添加主键约束
alter table Student modify S_num char(7) primary key;
5 主键自动增长
创建数据表时,如果数据表中有列可以作为主键(例:学⽣表的学号)可以直接以这列为主键;而当有些数据表中没有合适的列作为主键时,可以额外定义⼀个与记录本身⽆关的列 (ID )作为主键,此列数据⽆具体的含义主要⽤于标识⼀条记录,在 mysql 中将此列定义为int ,同时设置为 ⾃动增⻓ ,即向数据表中新增⼀条记录时,⽆需提供ID列的值,它会⾃动⽣成。
- 定义int类型字段⾃动增⻓: auto_increment
create table S(
S_id int primary key auto_increment,
S_num char(7),
S_name char(10) not null,
S_sex char(2) ,
S_age tinyint ,
S_dept char(20)
);
点击下方√。