到目前为止,我们一直使用已经存在的 users、products 和 orders。现在来学习如何创建自己的 Table。CREATE TABLE 不只告诉数据库 Table 名称,还要定义有哪些 Column,以及每个 Column 可以保存什么类型的数据。
CREATE TABLE users (
id INT,
name VARCHAR(100),
email VARCHAR(200),
city VARCHAR(100)
);这会创建 users 及四个 Column。每个 Column 后的数据类型告诉数据库它准备保存什么。id 使用 INT,适合整数;name、email、city 使用 VARCHAR,适合长度可变的文本。
为什么需要数据类型?
数据库需要正确存储和处理值。价格要参与加减与平均值,日期要进行日期比较,文字则适合搜索和排序。如果所有值都保存成文本,后续计算会更麻烦,也更容易出现错误。
INT — 整数:ID、数量、年龄
VARCHAR(n) — 可变文本:姓名、邮箱
DECIMAL(10, 2) — 精确小数:价格、金额
DATE — 日期:生日、订单日期
DATETIME — 日期和时间:创建时刻
BOOLEAN — 真或假:是否启用
DECIMAL(10, 2) 通常表示最多 10 位数字,其中 2 位在小数点后。金额更强调精确值,因此通常比普通浮点数更合适。不同数据库的类型名略有差异,但这些基础概念相近。
创建后继续使用
创建 products 后,可以用前面学过的 INSERT 添加 Row,再用 SELECT 查看。查询与修改语句最终都建立在 Table 结构正确的基础上。
CREATE TABLE products (
id INT,
name VARCHAR(100),
price DECIMAL(10, 2),
category VARCHAR(100)
);
INSERT INTO products (id, name, price, category)
VALUES (1, 'Keyboard', 80.00, 'Electronics');
SELECT * FROM products;ALTER TABLE 修改结构
需求会变化。users 后来需要手机号时,可以用 ALTER TABLE 增加 phone。已有 Row 通常得到 NULL,因为历史数据没有这个值。修改类型、删除字段或改变约束在不同数据库中的语法差异更明显,复杂变更前应查看所用产品的文档。
ALTER TABLE users
ADD phone VARCHAR(30);DROP 要格外谨慎。 ALTER TABLE users DROP COLUMN phone 会移除整个 Column;DROP TABLE users 会移除结构和其中全部数据。它与只删除 Row 的 DELETE 不同。所有建表、改表、删表练习都应在可重建的个人练习 Database 中完成。
亲手搭建一张 Table
给 Table 命名,再逐个加入字段。右侧结构卡与 SQL 会实时更新。字段名只允许字母、数字和下划线,并且不能以数字开头。
INTEGERCREATE TABLE products ( id INTEGER PRIMARY KEY );
结构卡和 CREATE TABLE 会随设计实时更新。为小商店设计 products 与 orders
在自己的练习 Database 中创建两张表:products 至少包含 id、name、price、category;orders 至少包含 id、user_id、order_date、status。为每个字段选择合适类型,然后给 products 增加 stock INT。暂时不要添加约束——下一节会完善它们。