飞翔飞翔
主页
  • 计算机基础

    • TCP协议
  • 数据库

    • SQL教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
主页
  • 计算机基础

    • TCP协议
  • 数据库

    • SQL教程
  • 工具

    • Markdown指南
  • Git

    • GitFlow
  • Quartz

    • Quartz教程
  • Java

    • Java设计模式
  • 缓存

    • Redis教程
联系
阿里云
  • 学习路径
  • 第1章 数据定义(DDL)

    • SQL简介
    • SQL语法
    • SQL注释
    • 创建数据库
    • 删除数据库
    • 创建表
    • 修改表
    • 删除表
    • 约束概述
    • NOT NULL约束
    • UNIQUE约束
    • PRIMARY KEY约束
    • FOREIGN KEY约束
    • CHECK约束
    • DEFAULT约束
    • 视图
    • 索引
    • 自增字段
    • 日期类型
  • 第2章 数据操作(DML)

    • 基础查询

      • SELECT查询
      • DISTINCT去重
      • LIMIT限制行数
      • 别名
      • 通配符
    • 条件过滤

      • WHERE条件筛选
      • AND运算符
      • OR运算符
      • NOT运算符
      • BETWEEN区间
      • IN运算符
      • LIKE模糊匹配
      • ORDER BY排序
    • 聚合函数

      • 聚合函数概述
      • COUNT计数
      • SUM求和
      • AVG平均值
      • MAX最大值
      • MIN最小值
    • 分组过滤

      • GROUP BY分组
      • HAVING过滤分组
    • 数据修改

      • INSERT插入数据
      • UPDATE修改数据
      • DELETE删除数据
      • NULL值处理
    • 表连接

      • JOIN连接概述
      • INNER JOIN内连接
      • LEFT JOIN左连接
      • RIGHT JOIN右连接
      • FULL JOIN全连接
      • SELF JOIN自连接
    • 集合操作

      • UNION并集
      • UNION ALL不去重并集
    • 高级查询

      • ALL运算符
      • ANY运算符
      • CASE条件表达式
      • EXISTS存在性检查
      • NULL处理函数
  • 第3章 事务控制(TCL)

    • COMMIT提交事务
    • ROLLBACK回滚
    • SAVEPOINT存档点
  • 第4章 数据控制(DCL)

    • GRANT授权
    • REVOKE撤销权限
    • SQL托管
    • SQL注入防护
  • 第5章 进阶主题

    • INSERT INTO SELECT复制数据
    • SELECT INTO复制表
    • 参数化查询
    • 预编译语句
    • 备份数据库
    • 存储过程
  • 第6章 参考

    • 关键字参考
    • 快速参考
    • 数据类型
    • 运算符

创建表

CREATE TABLE 用于定义表结构——指定列名、数据类型和约束规则。

建表时需要为每一列指定数据类型和约束。下表列出了本文用到的类型和约束,这里先混个眼熟,后续章节会有详细讲解。

常用数据类型:

类型分类说明
INT整数标准整数,如工号、数量
SMALLINT整数小范围整数,如年龄、部门代码
DECIMAL(m,d)精确小数m 总位数,d 小数位数,适合存金额
FLOAT近似小数浮点数,适合存气温、体重等
CHAR(n)定长字符串固定 n 个字符,如等级 A/B/C/D
VARCHAR(n)变长字符串最多 n 个字符,如姓名、地址
TEXT长文本不限长度,如文章内容
DATE日期年月日,如入职日期

常用约束:

约束作用
PRIMARY KEY主键,唯一标识每一行,不允许重复和为空
NOT NULL该列必须有值,不能留空
DEFAULT插入数据时如果不填该列,自动使用默认值
UNIQUE该列的值不能重复
CHECK自定义校验规则,如年龄必须大于 0

语法:

CREATE TABLE 表名 (
    列名1 数据类型 [列级约束],
    列名2 数据类型 [列级约束],
    ...,
    [表级约束]
);

从简单开始

先建一张最简单的表——飞翔科技官网的"座右铭",只存一条欢迎语:

-- 创建座右铭表(只有一个字段)
CREATE TABLE motto (
    content VARCHAR(30) NOT NULL
);

-- 插入一条欢迎语
INSERT INTO motto VALUES ('愿你朝华相顾,愿你前程似锦。');

-- 查看结果
SELECT * FROM motto;

就这么简单:VARCHAR(30) 限定最多 30 个字符,NOT NULL 表示不能为空。建表、插入、查询,三步搞定。

再看一个完整的例子

以飞翔科技的工资场景为例,创建一张包含多列的员工表:

-- 创建员工表
CREATE TABLE employees (
    emp_id             INT           PRIMARY KEY,
    emp_name           VARCHAR(50)   NOT NULL,
    dept_code          SMALLINT      DEFAULT 1,
    join_year          SMALLINT,
    age                SMALLINT,
    basic_salary       DECIMAL(10,2) NOT NULL,
    performance_bonus  DECIMAL(10,2) DEFAULT 0.00,
    social_security    DECIMAL(10,2) DEFAULT 0.00,
    personal_tax       DECIMAL(10,2) DEFAULT 0.00,
    salary_grade       CHAR(1),
    full_attendance    INT           DEFAULT 1,
    company_name       VARCHAR(100)  DEFAULT '广州飞翔科技'
);

提示:MySQL 中常用 TINYINT 存小范围整数(如部门代码),用 BOOLEAN 存真/假值,用 AUTO_INCREMENT 实现主键自增。这些不属于 SQL 标准,但 MySQL、PostgreSQL、SQL Server 等主流数据库都有类似功能,只是写法不同。

表建好了,插入一条员工数据:

INSERT INTO employees (emp_id, emp_name, dept_code, join_year, age,
    basic_salary, performance_bonus, social_security, personal_tax,
    salary_grade, full_attendance)
VALUES (10001, '航仔', 2, 2018, 28, 8888.00, 18888.00, 2320.00, 1666.66,
    'B', 1);

这条数据完全贴合飞翔科技的工资场景:航仔是技术部员工(dept_code = 2),2018 年入职,基本工资 8888.00,绩效奖金 18888.00,社保扣除 2320.00,个税 1666.66,工资等级 B,满勤标志为 1。每列的类型和默认值都经过精心设计,后续扩展和维护都会很顺手。

基于已有表创建新表

CREATE TABLE ... AS 可以从一张已有的表中复制数据,直接生成新表。新表的列名和数据类型由 SELECT 子句决定,查询出来的数据会自动填入。

语法:

CREATE TABLE 新表名 AS
SELECT 列1, 列2, ...
FROM 已有表
[WHERE 条件];

以飞翔科技为例,从员工表中筛选出技术部员工,单独建一张表:

-- 先确保 employees 表有数据(前面的例子已建过)
-- 基于员工表创建技术部花名册
CREATE TABLE tech_team AS
SELECT emp_id, emp_name, join_year
FROM employees
WHERE dept_code = 2;

-- 查看结果
SELECT * FROM tech_team;

这条语句做了三件事:①建了一张新表 tech_team,②它的列和数据类型来自 SELECT 中指定的三列,③把满足条件的数据一次性插了进去。

注意:AS 创建的新表只会复制数据,不会复制原表的主键、默认值等约束。如果新表需要这些约束,建好后需要用 ALTER TABLE 手动添加(后续章节会讲)。

在线测试

上一页
删除数据库
下一页
修改表