➕ 创建表结构
💻 代码结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 创建一个新的表
create table table_name(
字段1 字段类型[约束] [comment '关于字段的描述'],
...
字段n 字段类型[约束] [comment '关于字段的描述']
<完整性约束>,
...
<完整性约束>
)[comment 关于表的描述]
#创建与现有的某个表的模式相同的表
create table new_table like old_name
#将查询结果保存为一张表,默认插入数据
create table new_table as
<查询表达式>;
|
🔒 约束
概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确性、有效性和完整性。
常见约束参考:
| 约束 |
描述 |
关键字 |
| 非空约束 |
限制该字段不能为null |
not null |
| 唯一约束 |
保证该字段的所有数据都是唯一,不存在重复 |
unique |
| 主键约束 |
主键是一个元组的唯一标识,要求非空且唯一 |
primary key |
| 默认约束 |
保存数据时要是未指定该字段值则存入默认值 |
default |
| 谓词约束 |
保证所有数据都满足条件谓词 |
check |
| 外键约束 |
通过外键建立两张表的联系,保证数据的一致性和完整性 |
foreign key |
示例代码:
1
2
3
4
5
6
7
8
9
10
|
create table student
(ID varchar (5) comment['唯一标识符'],
name varchar (20) not null,unique
dept_name varchar (20),
tot_cred numeric (3,0) check (tot_cred >= 0),
age int default 18 #默认约束
primary key (ID), #主键约束
foreign key (dept_name) references department(dept_name) #外键约束
on delete set null) #违反约束的方法:置为null
unique(name,age); #多列唯一约束
|
📊 数据类型
数值类型
| 类型 |
大小(byte) |
有符号范围 |
无符号范围 |
描述 |
备注 |
| tinyint |
1 |
(-128,127) |
(0,255) |
小整数 |
|
| smallint |
2 |
(-32768,32767) |
(0,65535) |
大整数 |
|
| mediumint |
3 |
(-8388608,8388607) |
(0,1677215) |
大整数 |
|
| int |
4 |
(-2^31,2^31-1) |
(0,2^32-1) |
大整数 |
|
| bigint |
8 |
(-2^63,2^63-1) |
(0,2^64-1) |
极大整数 |
|
| float |
4 |
|
|
单精度浮点值 |
float(5,2),5为长度,2为小数位数 |
| double |
8 |
|
|
双精度浮点值 |
double(5,2),5为长度,2为小数位数 |
| decimal |
|
|
|
小数值(精度最高) |
|
字符类型
| 类型 |
大小(byte) |
描述 |
备注 |
| char |
0~255 |
定长字符串 |
char(10) 最多存10字符,不足时也占10字符空间 |
| varchar |
0~63315 |
变长字符串 |
varchar(10) 最多存10字符,按实际长度存储 |
| tinyblob |
0~255 |
不超过255个字符的二进制数据 |
|
| tinytext |
0~255 |
短文本字符串 |
|
| blob |
0~65535 |
二进制形式长文本数据 |
|
| text |
0~65535 |
长文本数据 |
|
| mediumblob |
0~16777215 |
二进制形式中等长文本数据 |
|
| mediumtext |
0~16777215 |
中等长度文本数据 |
|
| longblob |
0~4294967295 |
二进制形式的极大文本数据 |
|
| longtext |
0~4294967295 |
极大文本数据 |
|
日期类型
| 类型 |
大小(byte) |
格式 |
范围 |
描述 |
| date |
3 |
YYYY-MM-DD |
1000-01-01 到 9999-12-31 |
日期值 |
| time |
3 |
HH:MM:SS |
-838:59:59 到 838:59:59 |
时间值或持续时间 |
| year |
1 |
YYYY |
1901 到 2155 |
年份值 |
| datetime |
8 |
YYYY-MM-DD HH:MM:SS |
1000-01-01 到 9999-12-31 |
混合日期和时间值 |
| timestamp |
4 |
YYYY-MM-DD HH:MM:SS |
1000-01-01 到 9999-12-31 |
混合日期和时间值 |
时间域的提取:
1
2
3
|
extract(unit from date)
# unit 为所提取的时间域
# date 为字符串
|
字符串转时间类型:
1
|
cast('2024-12-21' as date)
|
大对象类型
🔍 查询表结构
查询当前数据库的所有表:
查询指定表的表结构:
查询建表语句:
1
|
show create table table_name
|
✏️ 修改表结构
添加字段:
1
2
|
alter table table_name
add 字段名 字段类型(长度) [comment '关于字段的描述'] [约束];
|
修改字段类型:
1
2
|
alter table table_name
modify 字段名 新字段类型(长度);
|
修改字段名和字段类型:
1
2
|
alter table table_name
change 旧字段名 新字段名 新类型(长度)[comment '关于字段的描述'] [约束];
|
删除字段:
1
2
3
4
5
|
alter table table_name
drop column 字段名;
# column 可以不填写
alter table table_name
drop 字段名;
|
修改表名:
1
|
rename table 旧表名 to 新表名;
|
🗑️ 删除表结构
删除表中所有元组以及表的结构: