1. 什么是数据表?¶
在数据库中,数据表就像一个Excel表格,用来存储结构化的数据。它由多个列(字段)组成,每列定义了数据的类型(如整数、文本、日期等),而每一行代表一条具体的记录。比如,一个“学生表”可能包含“学号”“姓名”“年龄”“班级”等列,每行对应一个学生的信息。
2. 创建数据表(CREATE TABLE)¶
要创建数据表,需使用 CREATE TABLE 语句,语法结构如下:
CREATE TABLE 表名 (
列名1 数据类型 [约束条件],
列名2 数据类型 [约束条件],
...
);
关键要素说明:
- 表名:自定义,建议见名知意(如 students)。
- 列名:自定义,避免与关键字冲突(如不要用 name 作为列名?不,name 是合法的,但需注意:MySQL 关键字需用反引号 ` 包裹,非关键字建议小写)。
- 数据类型:决定列能存储的数据类型(如整数 INT、字符串 VARCHAR、日期 DATE 等)。
- 约束条件:限制数据的规则(如主键 PRIMARY KEY、非空 NOT NULL、默认值 DEFAULT 等)。
常用数据类型示例:¶
| 数据类型 | 用途 | 示例 |
|---|---|---|
INT |
整数 | age INT(年龄) |
VARCHAR(长度) |
可变长度字符串(需指定长度) | name VARCHAR(50)(姓名,最大长度50) |
DATE |
日期(格式:YYYY-MM-DD) | birth_date DATE(出生日期) |
DATETIME |
日期时间(格式:YYYY-MM-DD HH:MM:SS) | create_time DATETIME(创建时间) |
约束条件示例:¶
- 主键(PRIMARY KEY):唯一标识一条记录(不能重复,不能为空),通常用
INT AUTO_INCREMENT实现自增(插入数据时无需手动指定,数据库自动分配唯一值)。 - 非空(NOT NULL):列的值必须填写(如姓名不能为空)。
- 默认值(DEFAULT):插入数据时若未指定该列,自动使用默认值(如年龄默认18岁)。
实战案例:创建“学生表”¶
-- 创建学生表,包含id(自增主键)、name(非空姓名)、age(默认18岁)、gender(默认男)、birth_date(日期)
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT, -- 主键,自增整数,唯一标识学生
name VARCHAR(50) NOT NULL, -- 姓名,非空,最多50个字符
age INT DEFAULT 18, -- 年龄,默认值18(若插入时不填age则用18)
gender VARCHAR(10) DEFAULT '男', -- 性别,默认值'男'
birth_date DATE -- 出生日期,格式:YYYY-MM-DD
);
小贴士:
- 自增列(AUTO_INCREMENT)只能用于整数类型,且必须是主键或唯一键。
- 字符串类型(VARCHAR)需指定长度(如 VARCHAR(50)),否则会报错。
- 列定义之间用逗号分隔,最后一列后无逗号。
3. 查看数据表结构¶
创建表后,可通过 DESCRIBE 或 SHOW COLUMNS 查看表的详细结构:
-- 查看students表结构
DESCRIBE students;
-- 或简写:
SHOW COLUMNS FROM students;
输出结果:
会显示列名、数据类型、是否允许空(NULL/NO)、键类型(PRI 为主键)、默认值等信息。
4. 操作数据表(增删改查)¶
4.1 插入数据(INSERT INTO)¶
向表中添加新记录,语法:
INSERT INTO 表名 (列名1, 列名2, ...) VALUES (值1, 值2, ...);
示例:插入一条学生数据(仅指定部分列,其他列用默认值):
INSERT INTO students (name, birth_date) VALUES ('张三', '2003-05-10');
-- 注意:
-- 1. 字符串类型(如name、birth_date)需用单引号包裹,数值类型(如age)不需要。
-- 2. 因id是自增主键,插入时无需指定,数据库会自动生成id=1。
-- 3. 若省略列名列表(列顺序与表定义一致),需填写所有列的值:
INSERT INTO students VALUES (NULL, '李四', 19, '女', '2004-03-15'); -- 不推荐,易出错
4.2 查询数据(SELECT)¶
从表中获取数据,语法:
SELECT 列名1, 列名2, ... FROM 表名 [WHERE 条件];
示例:
- 查询所有学生信息:
SELECT * FROM students; -- * 表示“所有列”
- 查询年龄大于18岁的学生姓名和年龄:
SELECT name, age FROM students WHERE age > 18;
4.3 更新数据(UPDATE)¶
修改表中已有记录,语法:
UPDATE 表名 SET 列名1=值1, 列名2=值2, ... [WHERE 条件];
关键:必须加 WHERE 条件,否则会修改表中所有记录!
示例:将“张三”的年龄改为20岁:
UPDATE students SET age = 20 WHERE name = '张三';
-- 错误示例(无WHERE,危险!):UPDATE students SET age = 20; (会把所有学生的age都改为20)
4.4 删除数据(DELETE)¶
删除表中记录,语法:
DELETE FROM 表名 [WHERE 条件];
关键:必须加 WHERE 条件,否则会删除整个表的数据!
示例:删除id=1的学生记录:
DELETE FROM students WHERE id = 1;
-- 错误示例(无WHERE,危险!):DELETE FROM students; (会清空整个表)
5. 注意事项¶
-
语法正确性:
- 字符串需用单引号(如'张三'),数值/日期无需(如20、'2003-05-10')。
- 列名和表名建议小写,避免与关键字冲突(如name合法,若用date需加反引号`date`)。 -
数据类型匹配:
- 插入数据时,值的类型必须与列定义一致(如VARCHAR列不能插入数字,否则报错)。 -
主键唯一性:
- 自增主键(AUTO_INCREMENT)会自动生成唯一值,无需手动插入,但需避免手动插入重复主键。 -
避免误操作:
-UPDATE和DELETE务必加WHERE条件,否则后果严重!
总结¶
创建和操作数据表是 SQL 入门的核心技能,需掌握 CREATE TABLE 定义表结构、INSERT/SELECT/UPDATE/DELETE 增删改查,以及约束条件(主键、非空等)的使用。多练习简单示例,注意语法细节,就能快速上手!后续可进一步学习复杂查询、索引等进阶内容。