sql 建表语句详解
在 sql 中,创建表(table)是数据库设计的基础。表是存储数据的基本单位,每个表由行和列组成。
创建表的过程涉及到定义表的结构,包括列名、数据类型、约束等。
本文将详细介绍 sql 中的建表语句,并通过示例帮助读者更好地理解。
1. 基本语法
创建表的基本语法如下:
create table table_name (
column1 datatype constraint,
column2 datatype constraint,
column3 datatype constraint,
...
);table_name:表的名称。column1, column2, column3:列的名称。datatype:列的数据类型。constraint:列的约束条件。
2. 数据类型
sql 支持多种数据类型,常见的有:
- 整数类型:
int,bigint,smallint,tinyint - 浮点数类型:
float,double,decimal(p, s) - 字符串类型:
char(n),varchar(n),text - 日期和时间类型:
date,time,datetime,timestamp - 布尔类型:
boolean
3. 约束
约束用于保证数据的完整性和一致性,常见的约束有:
- 主键约束:
primary key,唯一标识表中的每一行。 - 唯一约束:
unique,确保列中的所有值都是唯一的。 - 非空约束:
not null,确保列中的值不能为空。 - 默认值约束:
default,为列提供默认值。 - 外键约束:
foreign key,确保一个表中的数据与另一个表中的数据一致。 - 检查约束:
check,确保列中的值满足特定条件。
4. 示例
下面通过一个具体的示例来演示如何创建一个表。
假设我们要创建一个名为 students 的表,用于存储学生的信息,包括学号、姓名、性别、出生日期和班级。
create table students (
student_id int primary key,
name varchar(50) not null,
gender char(1) check (gender in ('m', 'f')),
birth_date date,
class_id int,
foreign key (class_id) references classes(class_id)
);在这个示例中:
student_id是主键,唯一标识每个学生。name是学生的姓名,不能为空。gender是学生的性别,只能是 ‘m’ 或 ‘f’。birth_date是学生的出生日期。class_id是学生所在的班级,是一个外键,引用classes表中的class_id。
5. 创建带有默认值的表
有时候我们需要为某些列设置默认值,例如学生的入学日期。
create table students (
student_id int primary key,
name varchar(50) not null,
gender char(1) check (gender in ('m', 'f')),
birth_date date,
class_id int,
enrollment_date date default current_date,
foreign key (class_id) references classes(class_id)
);在这个示例中,enrollment_date 列的默认值是当前日期。
6. 创建带有复合主键的表
有时候我们需要使用多个列作为主键,例如订单表中的订单号和产品号。
create table order_details (
order_id int,
product_id int,
quantity int,
primary key (order_id, product_id),
foreign key (order_id) references orders(order_id),
foreign key (product_id) references products(product_id)
);在这个示例中,order_id 和 product_id 共同组成主键。
7. 创建带有检查约束的表
检查约束用于确保列中的值满足特定条件,例如学生的年龄必须在 18 到 30 岁之间。
create table students (
student_id int primary key,
name varchar(50) not null,
gender char(1) check (gender in ('m', 'f')),
birth_date date,
class_id int,
enrollment_date date default current_date,
age int check (age >= 18 and age <= 30),
foreign key (class_id) references classes(class_id)
);在这个示例中,age 列的值必须在 18 到 30 岁之间。
8. 创建带有唯一约束的表
唯一约束用于确保列中的所有值都是唯一的,例如学生的邮箱地址。
create table students (
student_id int primary key,
name varchar(50) not null,
gender char(1) check (gender in ('m', 'f')),
birth_date date,
class_id int,
enrollment_date date default current_date,
email varchar(100) unique,
foreign key (class_id) references classes(class_id)
);在这个示例中,email 列的值必须是唯一的。
9. 创建带有自增列的表
自增列用于自动生成唯一的标识符,例如学生的学号。
create table students (
student_id int auto_increment primary key,
name varchar(50) not null,
gender char(1) check (gender in ('m', 'f')),
birth_date date,
class_id int,
enrollment_date date default current_date,
foreign key (class_id) references classes(class_id)
);在这个示例中,student_id 列是自增列,每次插入新记录时会自动生成一个唯一的学号。
10. 创建带有注释的表
注释用于为表和列提供说明,便于理解和维护。
create table students (
student_id int auto_increment primary key comment '学生的唯一标识',
name varchar(50) not null comment '学生的姓名',
gender char(1) check (gender in ('m', 'f')) comment '学生的性别',
birth_date date comment '学生的出生日期',
class_id int comment '学生所在的班级',
enrollment_date date default current_date comment '学生的入学日期',
foreign key (class_id) references classes(class_id)
) comment='学生信息表';在这个示例中,为表和列添加了注释,便于理解其含义。
总结
通过本文的讲解,我们详细介绍了 sql 中的建表语句,包括基本语法、数据类型、约束、示例等内容。
希望读者能够通过这些内容更好地理解和掌握 sql 建表语句的使用方法。
在实际应用中,根据具体需求选择合适的数据类型和约束,可以有效地保证数据的完整性和一致性。
发表评论