在 MySQL 中使用创建表

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【8月更文挑战第11天】

在 MySQL 中,CREATE TABLE 语句用于创建一个新表,表是数据库的基本存储单位,用于组织和管理数据。创建表的过程涉及定义表的名称、列、数据类型、约束条件等。本文将详细介绍如何在 MySQL 中使用 CREATE TABLE 语句,包括其基本语法、常用数据类型、约束条件、创建表的选项以及常见的操作示例。

1. 基本语法

在 MySQL 中,CREATE TABLE 的基本语法如下:

CREATE TABLE table_name (
    column1 datatype [constraints],
    column2 datatype [constraints],
    ...
    [table_constraints]
);
  • table_name:指定表的名称。
  • column1, column2, ...:列的名称和数据类型。
  • datatype:列的数据类型,例如 INT, VARCHAR, DATE 等。
  • constraints:列的约束条件,例如 NOT NULL, UNIQUE, DEFAULT 等。
  • table_constraints:表级别的约束条件,例如主键(PRIMARY KEY)、外键(FOREIGN KEY)等。

2. 数据类型

在 MySQL 中,有多种数据类型可供选择,以适应不同的需求:

  • 整型

    • TINYINT:小整数,范围从 -128 到 127。
    • SMALLINT:小整数,范围从 -32,768 到 32,767。
    • MEDIUMINT:中等大小的整数,范围从 -8,388,608 到 8,388,607。
    • INT:标准整数,范围从 -2,147,483,648 到 2,147,483,647。
    • BIGINT:大整数,范围从 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。
    • SERIAL:自动递增的整数类型,适用于主键。
  • 浮点型

    • FLOAT:单精度浮点数。
    • DOUBLE:双精度浮点数。
    • DECIMAL(M, D):精确的浮点数类型,其中 M 是总位数,D 是小数位数。
  • 字符型

    • CHAR(N):定长字符型,N 指定长度。
    • VARCHAR(N):变长字符型,N 指定最大长度。
    • TEXT:可变长度字符型,用于存储大文本。
  • 日期和时间型

    • DATE:日期类型,格式为 YYYY-MM-DD
    • DATETIME:日期和时间类型,格式为 YYYY-MM-DD HH:MM:SS
    • TIMESTAMP:时间戳类型,通常用于记录数据的创建或修改时间。
    • TIME:时间类型,格式为 HH:MM:SS
    • YEAR:年份类型,格式为 YYYY
  • 布尔型

    • BOOLEAN:布尔值类型,存储 TRUEFALSE

3. 约束条件

约束条件用于确保数据的完整性和一致性,常见的约束条件包括:

  • PRIMARY KEY:主键约束,唯一标识表中的每一行数据,并且不能为 NULL
  • FOREIGN KEY:外键约束,用于建立表之间的关联,并确保引用完整性。
  • UNIQUE:唯一约束,确保列中的值唯一。
  • NOT NULL:非空约束,确保列中的值不能为空。
  • CHECK:检查约束,确保列中的值符合指定的条件。
  • DEFAULT:默认值约束,为列指定默认值。

4. 创建表的选项

在创建表时,可以指定一些选项来调整表的行为:

  • 自动递增:用于自增列,例如主键列:

    CREATE TABLE users (
        user_id INT AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) NOT NULL,
        email VARCHAR(100)
    );
    
  • 表的引擎:指定存储引擎,例如 InnoDBMyISAM

    CREATE TABLE orders (
        order_id INT AUTO_INCREMENT PRIMARY KEY,
        product_name VARCHAR(100),
        quantity INT,
        order_date DATE,
        ENGINE=InnoDB
    );
    
  • 字符集:指定表的字符集和排序规则:

    CREATE TABLE comments (
        comment_id INT AUTO_INCREMENT PRIMARY KEY,
        content TEXT,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
    );
    

5. 示例

5.1 创建简单表

创建一个包含用户信息的简单表:

CREATE TABLE employees (
    emp_id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    hire_date DATE DEFAULT CURRENT_DATE,
    salary DECIMAL(10, 2) CHECK (salary > 0)
);

在这个示例中:

  • emp_id 是自增的主键。
  • first_namelast_name 是非空的字符串列。
  • hire_date 列的默认值为当前日期。
  • salary 列必须大于零。

5.2 创建带有外键约束的表

创建一个订单表,并与员工表建立外键关系:

CREATE TABLE orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    emp_id INT,
    order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    total_amount DECIMAL(10, 2) NOT NULL,
    FOREIGN KEY (emp_id) REFERENCES employees(emp_id) ON DELETE CASCADE
);

在这个示例中:

  • order_id 是自增的主键。
  • emp_id 是外键,引用 employees 表的 emp_id 列。
  • order_date 列的默认值为当前时间。
  • total_amount 列不能为空。

5.3 创建复杂约束的表

创建一个包含复杂约束的表:

CREATE TABLE products (
    product_id INT AUTO_INCREMENT PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL UNIQUE,
    price DECIMAL(8, 2) NOT NULL CHECK (price > 0),
    stock INT DEFAULT 0 CHECK (stock >= 0)
);

在这个示例中:

  • product_id 是自增的主键。
  • product_name 列值唯一且不能为空。
  • price 列不能为空且必须大于零。
  • stock 列有默认值零,且必须大于或等于零。

6. 常见问题及解决方法

6.1 错误信息“表已经存在”

如果尝试创建一个已存在的表,可能会遇到以下错误:

ERROR 1050 (42S01): Table 'table_name' already exists

解决方法是使用 IF NOT EXISTS 选项来避免错误:

CREATE TABLE IF NOT EXISTS table_name (
    column1 datatype [constraints],
    ...
);

6.2 数据类型不匹配

在插入数据时,如果数据类型不匹配,可能会遇到错误。确保插入的数据类型与表的定义匹配。

6.3 约束条件的违反

在插入或更新数据时,如果违反了约束条件,例如 NOT NULLCHECK,可能会遇到错误。确保数据符合所有约束条件。

7. 总结

在 MySQL 中,CREATE TABLE 语句是定义和创建表的基本工具。通过了解基本语法、数据类型、约束条件以及表的选项,可以有效地设计和管理数据库表。掌握这些知识后,您可以创建结构复杂的表,组织和存储数据,并确保数据的完整性和一致性。通过实践和应用这些知识,可以更好地利用 MySQL 的功能,实现高效的数据管理。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
Mysql基础第二十四天,创建表和操纵表
Mysql基础第二十四天,创建表和操纵表
48 0
Mysql基础第二十四天,创建表和操纵表
|
4月前
|
SQL 关系型数据库 MySQL
学习MySQL,创建表,数据类型
学习MySQL,创建表,数据类型
|
4月前
|
关系型数据库 MySQL
MySQL创建表出现 Specified key was too long; max key length is 767 bytes
MySQL创建表出现 Specified key was too long; max key length is 767 bytes
53 2
|
9月前
|
关系型数据库 MySQL
零基础带你学习MySQL—创建表(四)
零基础带你学习MySQL—创建表(四)
|
关系型数据库 MySQL 数据库
MySQL安装以及创建表
MySQL安装以及创建表
207 0
|
关系型数据库 MySQL 数据库
mysql创建表后修改表中id属性默认为空
mysql创建表后修改表中id属性默认为空
|
关系型数据库 MySQL
MySQL中数据类型及创建表
创建表 #创建科目表 #科目编号、科目名称、科目学时 #subject CREATE TABLE `Subject`( subjectId INT, subjectName VARCHAR(20), subjectHours INT//不加逗号 )CHARSET = utf8;//根据需要指定字符编码集 SELECT FROM `subject`; INSERT INTO `subject`...
72 0
|
关系型数据库 MySQL
mysql 快速创建表和万级数据脚本
mysql 快速创建表和万级数据脚本
97 0
|
SQL 数据可视化 关系型数据库
MySQL基础之写表(创建表)
市面上的SQL可视化工具不少,我一般常用的主要就是这两个。
161 0
|
关系型数据库 MySQL 数据库
MySQL“错误1005(HY000):无法创建表'foo#sql-12c_4'(errno:150)”
MySQL“错误1005(HY000):无法创建表'foo#sql-12c_4'(errno:150)”
178 0

热门文章

最新文章