找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

641

积分

0

好友

81

主题
发表于 12 小时前 | 查看: 0| 回复: 0

无论是刚接触后端开发,还是需要管理项目中的数据存储,掌握在数据库中创建表是必备的基础技能。本文将以流行的关系型数据库 MySQL 为例,手把手带你完成从登录到建表、插入数据的完整流程,并深入讲解建表时的各种约束条件,帮你打下坚实的数据设计基础。

创建并使用数据库

1.1 打开命令行

连接 MySQL 服务器通常有多种方式,你可以根据实际情况选择:

  • 使用图形化客户端(如 MySQL Workbench、Navicat)直接登录。
  • 在 Windows 系统中,按 Win + R,输入 cmd 后回车,打开命令提示符。
  • 也可以直接进入 MySQL 安装目录下的 bin 文件夹,在地址栏运行 cmd

需要注意的是,不同的 MySQL 安装和配置方式,启动命令可能略有不同。

MySQL命令行登录界面截图

1.2 运行MySQL

在打开的命令行中,输入以下命令以 root 用户身份登录:

mysql -u root -p

回车后,系统会提示你输入密码。如果没有设置密码,直接再次回车即可;如果设置了密码(例如默认的 123456),输入密码后回车。

MySQL命令行登录过程截图

1.3 建立数据库以及表数据

成功登录后,我们就可以开始操作数据库了。

第一步,创建一个新数据库。 我们将数据库命名为 jdbc_demo

create database jdbcdemo;

第二步,确认数据库是否创建成功。 使用 show databases; 命令可以列出当前服务器上的所有数据库,检查 jdbcdemo 是否在其中。

show databases;

第三步,使用我们刚创建的数据库。 在操作表之前,需要先指定在哪个数据库中进行:

use jdbcdemo;

第四步,创建数据表。 我们创建一个 user 表,包含 id(主键)、username(用户名)和 password(密码)三个字段:

create table user(
        id int(4) not null primary key auto_increment,
        username varchar(20) not null,
        password varchar(10) not null
       );

提示:在实际开发中,为了避免因表已存在而导致的创建失败,我们通常会在创建前先判断并删除旧表。可以使用 DROP TABLE IF EXISTS 表名; 语句,这样无论表是否存在,执行都不会报错。
一个更健壮的建表语句示例如下:

DROP TABLE IF EXISTS user; -- 如果表存在就删除
CREATE TABLE user
(
id int(4) primary key auto_increment,   -- 主键ID,自增
    username varchar(20) not null,  -- 用户名,非空
    password varchar(10) not null -- 密码,非空
);

第五步,查看表是否存在。 使用 show tables; 命令可以列出当前数据库中的所有表。

show tables;

第六步,查看表的详细结构。 使用 desc 表名; 命令可以查看表中每个字段的数据类型、约束等信息。

desc user;

第七步,向表中插入一条测试数据。

insert into user values(0,“tom”,“12”);

第八步,查询表中的所有数据,验证插入是否成功。

select * from user;

通过以上八个步骤,我们就完成了一次完整的“创建数据库 -> 建表 -> 插入数据”的操作流程。整个过程的效果如下图所示:

MySQL创建数据库及表操作截图

MySQL表结构查看及数据插入截图

重要提醒:所有 SQL 语句中的标点符号(如括号、逗号、引号)都必须使用英文半角符号

创建表时约束条件

约束是在创建表时为某一列或整个表附加的强制数据规则,用于保证数据的完整性、一致性和准确性。

创建表的基本语法结构如下:

CREATE TABLE <表名> (
 <列名>  <数据类型>  [列级完整性约束定义]
   {, <列名>  <数据类型>  [列级完整性约束定义]
                … }
   [, 表级完整性约束定义 ]
);

2.1 约束类型

常见的 数据库 约束类型包括:

  • 主键 (PRIMARY KEY):唯一标识表中的每一行数据。一个表最多只能有一个主键,其值必须非空且唯一。
  • 外键 (FOREIGN KEY):引用另一个表(父表)的主键,用于建立表与表之间的关联。子表中插入或修改的数据必须在父表中存在。
  • 非空 (NOT NULL):该列的值不允许为 NULL
  • 唯一 (UNIQUE KEY):确保该列中的所有值都是不同的,但允许存在一个 NULL 值(视具体数据库实现而定)。
  • 检查约束 (CHECK):限制列的取值范围或必须满足的条件表达式。
  • 自增 (AUTO_INCREMENT):通常用于主键,当插入新记录时,该列的值会自动递增。

下面通过两个实例来理解如何应用这些约束。

【例一】创建 student 表
假设我们有如下学生信息:

sno name sex age dep uid
09512101 张三 18 计算机系 000001
09512102 李四 19 计算机系 000002
09512103 王五 20 计算机系 000003

根据业务需求,我们对每个字段设计如下约束:

列名 数据类型 约束 说明
sno CHAR(8) 主键 每个学生学号应非空且唯一
name CHAR(10) 非空 姓名信息必须要保存
sex CHAR(2) 检查 取值“男”或“女”
age INT 检查 年龄在10到60岁之间
dep VARCHAR(26) default 默认值为“计算机系”
uid CHAR(18) 唯一值 每个人的身份证号是唯一的

对应的建表 SQL 语句为:

CREATE TABLE student(
    sno CHAR(8) PRIMARY KEY ,
    name CHAR(10) NOT NULL ,
    sex CHAR(2) CHECK(sex =‘男’ OR sex =‘女’),
    age INT CHECK(age >= 10 AND age <= 60),
    dep VARCHAR(26) default ‘计算机系’,
    uid CHAR(18) UNIQUE
);

【例二】创建 stulesson 表(选课成绩表)
此表需要记录学生所选课程的成绩,并依赖于 student 表。

sno cname score
001 数据库原理 90
003 数据库原理 80
003 C语言 75

设计如下:

列表 数据类型 约束 说明
sno CHAR(8) 外键,引用 student.sno
cname CHAR(50) 非空 课程名必须保存
score INT 检查 成绩在0~100之间

此表的主键由 snocname 共同组成(联合主键),确保一个学生的一门课程只有一个成绩记录。同时,sno 是外键,关联到 student 表。

对应的建表 SQL 语句为:

CREATE TABLE stulesson(
    sno CHAR(8),
    cname CHAR(50) NOT NULL,
    score INT CHECK(score >=0 AND score <= 100),
    PRIMARY KEY(sno, cname),
    FOREIGN KEY(sno) REFERENCES student(sno)
)

2.2 其他SQL语句

除了建表,你还需要掌握一些常用的表结构修改语句:

  • 删除数据库drop database 数据库名;
  • 删除表drop table 表名;
  • 在表末尾添加列Alter table 表名 add 列名 数据类型 (约束条件);
  • 在表开头添加列Alter table 表名 add 列名 数据类型 (约束条件) first;

char 和 varchar 区别

charvarchar 是 SQL 中最常用的两种字符串数据类型,它们的核心区别在于存储方式空间效率

  • 存储方式

    • char定长字符串。无论实际存储的字符串多长,它都会占用预先声明的固定长度空间。例如 CHAR(10),存储“abc”时,实际会占用10个字符的空间(通常用空格填充剩余部分)。
    • varchar变长字符串。它只会占用实际字符长度加上少量记录长度的额外字节。例如 VARCHAR(10),存储“abc”时,只占用约3个字符的空间。
  • 空间效率与性能

    • char:在存储长度固定或接近固定的数据时(如身份证号、状态代码),空间利用率高,且由于长度固定,检索速度通常更快
    • varchar:在存储长度变化较大的数据时(如姓名、地址、文章内容),能有效节省存储空间,但检索效率可能略低于 char
  • 适用场景

    • 使用 char:适合存储长度固定或几乎固定的数据,例如手机号(11位)、国家代码(2位)、枚举代码(‘Y‘/‘N‘)。
    • 使用 varchar:适合存储长度不确定、变化范围大的文本数据,例如用户昵称、商品描述、评论内容。

注意:不同数据库系统(如 MySQL, PostgreSQL, Oracle)对这两种类型的实现和细节(如最大长度、尾部空格处理)可能略有差异。例如在 Oracle 中,通常推荐使用 VARCHAR2 类型。

希望这篇详细的 MySQL 建表指南能帮助你系统地理解数据表创建的核心知识和实践步骤。掌握这些基础是设计出高效、健壮的数据结构的关键。如果你对数据库的更多高级特性或实践案例感兴趣,欢迎来 云栈社区 与我们交流探讨。




上一篇:Hytale游戏技术复盘:从10亿沉没成本到社区驱动的复活之路
下一篇:MPU6050驱动移植与姿态解算:基于CW32微控制器的智能小车应用指南
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-24 17:49 , Processed in 0.370695 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表