主题
  • 默认模式
  • 浅蓝色模式
  • 淡绿色模式
  • 深夜模式

SQL 创建数据表

在上一章中,我们学习了如何在数据库服务器上创建数据库。接下来,我们将学习在数据库中创建表——这些表是实际存储数据的基本结构。数据库表通过行和列的形式将信息有序地组织起来,为数据管理提供了清晰的框架。

在 SQL 中,我们使用CREATE TABLE创建数据表。

SQL 创建数据表命令


SQL 基本语法

✅ 以下是 MySQL 数据库和 SQL Server 数据库创建数据表的语法,语句如下:

sql
复制
-- MySQL数据库的语法
CREATE TABLE users (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, -- MySQL 自增主键
    username VARCHAR(50) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE
);

-- SQL Server数据库的语法
CREATE TABLE users (
    id INT NOT NULL PRIMARY KEY IDENTITY(1,1), -- SQL Server 自增主键,从1开始、步长为1
    username VARCHAR(50) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE
);

上述 SQL 语句由以下几个部分组成:

  • CREATE TABLE: 这是 SQL 的关键字,用于指示数据库系统创建一个新的数据表。
  • users: 这是要创建的新数据表的名称。名称应具有描述性,且通常遵循一定地命名规范(如使用小写字母、下划线分隔单词等)。
  • 该表拥有 idnamebirth_datephone四个字段,每个字段后都有一个数据类型声明。

SQL 数据类型

从上述代码可以看出,在创建数据表时需要为每个字段指定名称、数据类型,以及相应的长度限制(若未指定则使用默认长度)。

不同数据库系统所支持的字段数据类型可能存在差异。在定义整数字段时,MySQL 和 SQL Server 通常使用INT类型,而 Oracle 数据库则更倾向于使用NUMBER类型来存储数值数据。

1. MySQL 常用数据类型

在创建数据表时,为字段选择合适的数据类型至关重要。正确选择数据类型不仅能保证数据的准确性和完整性,还可以提高存储效率和查询性能。因此,掌握不同数据类型的特点及适用场景,是数据库设计与管理的基本技能。

✅ 下面是整理的 MySQL 数据类型参考表:

数据类型 类别 描述 存储需求/范围
TINYINT 整数 非常小的整数 1字节,有符号:-128~127,无符号:0~255
SMALLINT 整数 小整数 2字节,有符号:-32768~32767,无符号:0~65535
MEDIUMINT 整数 中等整数 3字节,有符号:-8388608~8388607,无符号:0~16777215
INT/INTEGER 整数 标准整数 4字节,有符号:-2147483648~2147483647,无符号:0~4294967295
BIGINT 整数 大整数 8字节,有符号:-2^63~2^63-1,无符号:0~2^64-1
FLOAT 浮点 单精度浮点数 4字节,约7位精度
DOUBLE 浮点 双精度浮点数 8字节,约15位精度
DECIMAL/NUMERIC 浮点 精确小数 变长,每4字节存9位数字,用于存储精确数值如货币
CHAR 短文本 定长字符串 0~255字符,固定长度
VARCHAR 短文本 变长字符串 0~65535字符,长度+1或+2字节前缀
BINARY 短文本 定长二进制字符串 0~255字节
VARBINARY 短文本 变长二进制字符串 0~65535字节
TINYTEXT 长文本 短文本字符串 最大长度255字符
TEXT 长文本 文本字符串 最大长度65535字符
MEDIUMTEXT 长文本 中等长度文本 最大长度16777215字符
LONGTEXT 长文本 长文本数据 最大长度4294967295字符
DATE 日期时间 日期值 YYYY-MM-DD,范围'1000-01-01'~'9999-12-31'
TIME 日期时间 时间值 HH:MM:SS,范围'-838:59:59'~'838:59:59'
DATETIME 日期时间 日期时间值 YYYY-MM-DD HH:MM:SS,范围'1000-01-01 00:00:00'~'9999-12-31 23:59:59'
TIMESTAMP 日期时间 时间戳 YYYY-MM-DD HH:MM:SS,范围'1970-01-01 00:00:01'UTC~'2038-01-19 03:14:07'UTC
YEAR 日期时间 年份值 YYYY格式,1901~2155
TINYBLOB BLOB 短二进制数据 最大长度255字节
BLOB BLOB 二进制大对象 最大长度65535字节
MEDIUMBLOB BLOB 中等二进制数据 最大长度16777215字节
LONGBLOB BLOB 长二进制数据 最大长度4294967295字节
ENUM 其他 枚举类型 最多65535个值中的一个
SET 其他 集合类型 最多64个值中的零个或多个
JSON 其他 JSON文档 MySQL 5.7.8及以上版本支持
BOOLEAN/BOOL 其他 布尔值 TINYINT(1)的别名,0为false,非0为true

✅ 指定数据类型需要注意的事项:

  • 选择数据类型时,应根据实际需求选择最合适的类型,避免过度分配存储空间。
  • 数值类型可选择UNSIGNED属性表示无符号数。
  • 浮点数与DECIMAL的选择:需要精确计算时(如货币)应使用DECIMAL
  • CHARVARCHAR的选择:长度固定或较短且频繁更新时使用 CHAR,长度变化较大时使用 VARCHAR
  • TIMESTAMP 受时区影响,而DATETIME不受时区影响。
  • BLOB 类型用于存储二进制数据,如图片、文档等。

条件创建 (IF NOT EXISTS)

在创建数据表时,若该表已存在,系统会返回错误信息并导致后续操作中止。通过使用IF NOT EXISTS子句,可以有效避免该问题,确保脚本继续顺利执行。

✅ 以下是使用条件创建 (IF NOT EXISTS)的语法,语句如下:

sql
复制
-- MySQL数据库的语法
CREATE TABLE IF NOT EXISTS users (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, -- MySQL 自增主键
    username VARCHAR(50) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE
);

提示:如果要查看当前选定数据库内的表的列表,可以SHOW TABLES;在 MySQL 命令行上执行语句。



评论区 0
发表评论
教程介绍
SQL 是一种专门用来与数据库沟通、管理和操作关系型数据库的标准化编程语言。
6 章节
76 阅读
0 评论