0


SQL 建表语句详解

SQL 建表语句详解

在 SQL 中,创建表(Table)是数据库设计的基础。表是存储数据的基本单位,每个表由行和列组成。创建表的过程涉及到定义表的结构,包括列名、数据类型、约束等。本文将详细介绍 SQL 中的建表语句,并通过示例帮助读者更好地理解。

1. 基本语法

创建表的基本语法如下:

CREATETABLE 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

的表,用于存储学生的信息,包括学号、姓名、性别、出生日期和班级。

CREATETABLE students (
    student_id INTPRIMARYKEY,
    name VARCHAR(50)NOTNULL,
    gender CHAR(1)CHECK(gender IN('M','F')),
    birth_date DATE,
    class_id INT,FOREIGNKEY(class_id)REFERENCES classes(class_id));

在这个示例中:

  • student_id 是主键,唯一标识每个学生。
  • name 是学生的姓名,不能为空。
  • gender 是学生的性别,只能是 ‘M’ 或 ‘F’。
  • birth_date 是学生的出生日期。
  • class_id 是学生所在的班级,是一个外键,引用 classes 表中的 class_id
5. 创建带有默认值的表

有时候我们需要为某些列设置默认值,例如学生的入学日期。

CREATETABLE students (
    student_id INTPRIMARYKEY,
    name VARCHAR(50)NOTNULL,
    gender CHAR(1)CHECK(gender IN('M','F')),
    birth_date DATE,
    class_id INT,
    enrollment_date DATEDEFAULTCURRENT_DATE,FOREIGNKEY(class_id)REFERENCES classes(class_id));

在这个示例中,

enrollment_date

列的默认值是当前日期。

6. 创建带有复合主键的表

有时候我们需要使用多个列作为主键,例如订单表中的订单号和产品号。

CREATETABLE order_details (
    order_id INT,
    product_id INT,
    quantity INT,PRIMARYKEY(order_id, product_id),FOREIGNKEY(order_id)REFERENCES orders(order_id),FOREIGNKEY(product_id)REFERENCES products(product_id));

在这个示例中,

order_id

product_id

共同组成主键。

7. 创建带有检查约束的表

检查约束用于确保列中的值满足特定条件,例如学生的年龄必须在 18 到 30 岁之间。

CREATETABLE students (
    student_id INTPRIMARYKEY,
    name VARCHAR(50)NOTNULL,
    gender CHAR(1)CHECK(gender IN('M','F')),
    birth_date DATE,
    class_id INT,
    enrollment_date DATEDEFAULTCURRENT_DATE,
    age INTCHECK(age >=18AND age <=30),FOREIGNKEY(class_id)REFERENCES classes(class_id));

在这个示例中,

age

列的值必须在 18 到 30 岁之间。

8. 创建带有唯一约束的表

唯一约束用于确保列中的所有值都是唯一的,例如学生的邮箱地址。

CREATETABLE students (
    student_id INTPRIMARYKEY,
    name VARCHAR(50)NOTNULL,
    gender CHAR(1)CHECK(gender IN('M','F')),
    birth_date DATE,
    class_id INT,
    enrollment_date DATEDEFAULTCURRENT_DATE,
    email VARCHAR(100)UNIQUE,FOREIGNKEY(class_id)REFERENCES classes(class_id));

在这个示例中,

email

列的值必须是唯一的。

9. 创建带有自增列的表

自增列用于自动生成唯一的标识符,例如学生的学号。

CREATETABLE students (
    student_id INTAUTO_INCREMENTPRIMARYKEY,
    name VARCHAR(50)NOTNULL,
    gender CHAR(1)CHECK(gender IN('M','F')),
    birth_date DATE,
    class_id INT,
    enrollment_date DATEDEFAULTCURRENT_DATE,FOREIGNKEY(class_id)REFERENCES classes(class_id));

在这个示例中,

student_id

列是自增列,每次插入新记录时会自动生成一个唯一的学号。

10. 创建带有注释的表

注释用于为表和列提供说明,便于理解和维护。

CREATETABLE students (
    student_id INTAUTO_INCREMENTPRIMARYKEYCOMMENT'学生的唯一标识',
    name VARCHAR(50)NOTNULLCOMMENT'学生的姓名',
    gender CHAR(1)CHECK(gender IN('M','F'))COMMENT'学生的性别',
    birth_date DATECOMMENT'学生的出生日期',
    class_id INTCOMMENT'学生所在的班级',
    enrollment_date DATEDEFAULTCURRENT_DATECOMMENT'学生的入学日期',FOREIGNKEY(class_id)REFERENCES classes(class_id))COMMENT='学生信息表';

在这个示例中,为表和列添加了注释,便于理解其含义。

总结

通过本文的讲解,我们详细介绍了 SQL 中的建表语句,包括基本语法、数据类型、约束、示例等内容。希望读者能够通过这些内容更好地理解和掌握 SQL 建表语句的使用方法。在实际应用中,根据具体需求选择合适的数据类型和约束,可以有效地保证数据的完整性和一致性。


本文转载自: https://blog.csdn.net/xycxycooo/article/details/140508173
版权归原作者 需要重新演唱 所有, 如有侵权,请联系我们删除。

“SQL 建表语句详解”的评论:

还没有评论