MySQL DDL 与 DML 数据定义与操作 - 精简版

第一部分:DDL 之表操作

一、数据表字段类型

1.1 整数类型

类型字节说明
TINYINT1小整数,0~255(无符号)
INT4最常用,约±21亿
BIGINT8大整数,用于ID等

1.2 小数类型

类型说明
FLOAT单精度,精度有限
DOUBLE双精度
DECIMAL(M,D)定点数,精度准确,适合金额

1.3 字符串类型

类型说明
CHAR(n)定长,查询快,适合固定长度(如性别、身份证)
VARCHAR(n)变长,节省空间,适合姓名、地址
TEXT大文本,不能设默认值

1.4 日期类型

类型格式用途
DATEYYYY-MM-DD日期
DATETIMEYYYY-MM-DD HH:MM:SS日期时间
TIMESTAMPYYYY-MM-DD HH:MM:SS自动记录当前时间

二、创建表

-- 基本语法
CREATE TABLE [IF NOT EXISTS] 表名 (
    字段名1 数据类型 [约束],
    字段名2 数据类型 [约束]
);
-- 案例:创建管理员表
CREATE TABLE admin (
    id INT,
    uname VARCHAR(10),
    pwd CHAR(32)
);

-- 查看当前库所有表
SHOW TABLES;

三、查看表

-- 查看表结构
DESC 表名;

-- 查看建表语句
SHOW CREATE TABLE 表名\G

四、删除表

-- 删除表(生产环境先备份!)
DROP TABLE 表名;

五、修改表

5.1 添加字段

-- 在最后添加字段
ALTER TABLE 表名 ADD 字段名 类型;

-- 在第一位添加
ALTER TABLE 表名 ADD 字段名 类型 FIRST;

-- 在指定字段后添加
ALTER TABLE 表名 ADD 字段名 类型 AFTER 其他字段;

5.2 删除字段

ALTER TABLE 表名 DROP 字段名;

5.3 修改字段

-- change:修改字段名和类型
ALTER TABLE 表名 CHANGE 原字段名 新字段名 类型;

-- modify:仅修改类型
ALTER TABLE 表名 MODIFY 字段名 新类型;

第二部分:DML 数据操作

一、插入数据(INSERT)

1.1 指定字段插入

-- 推荐写法
INSERT INTO 表名 (字段1, 字段2) VALUES (值1, '值2');
-- 案例:插入学生数据
INSERT INTO student (id, name, age, gender)
VALUES (1, '张三', 20, '男');

1.2 一次插入多行

-- 批量插入
INSERT INTO 表名 (字段1, 字段2) VALUES
(值1, '值2'),
(值3, '值4');

1.3 蠕虫复制

-- 将表数据复制一份
INSERT INTO 表名 SELECT * FROM 表名;

二、修改数据(UPDATE)

-- 语法:必须加 WHERE 条件!
UPDATE 表名 SET 字段=新值 WHERE 条件;
-- 案例:修改张三的年龄
UPDATE student SET age=25 WHERE name='张三';

-- 案例:同时修改多个字段
UPDATE student SET name='李四', age=30 WHERE id=1;

三、删除数据(DELETE)

-- 删除指定记录
DELETE FROM 表名 WHERE 条件;

-- 清空整张表(重置自增ID)
TRUNCATE TABLE 表名;

DELETE vs TRUNCATE

对比项DELETETRUNCATE
删除方式逐行删除整表清空
自增ID不重置重置为1
速度

软删除(逻辑删除)

-- 添加标识字段
ALTER TABLE student ADD is_del TINYINT DEFAULT 0;

-- 删除时更新状态
UPDATE student SET is_del=1 WHERE id=1;

-- 查询有效数据
SELECT * FROM student WHERE is_del=0;

第三部分:字段约束

一、主键约束(PRIMARY KEY)

-- 方式1:字段后直接声明
CREATE TABLE person (
    id INT PRIMARY KEY,
    name VARCHAR(20)
);

-- 方式2:在约束区域声明(支持联合主键)
CREATE TABLE person (
    id INT,
    name VARCHAR(20),
    PRIMARY KEY (id)
);

-- 方式3:建表后添加
ALTER TABLE person ADD PRIMARY KEY (id);

二、自动增长(AUTO_INCREMENT)

-- 配合主键使用,自动生成唯一值
CREATE TABLE person (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20)
);

-- 插入时可以不指定id
INSERT INTO person (name) VALUES ('张三');

-- 插入时指定id为null也会自增
INSERT INTO person (id, name) VALUES (NULL, '李四');

三、非空约束(NOT NULL)

-- 强制字段必须填写值
CREATE TABLE person (
    id INT PRIMARY KEY,
    name VARCHAR(20) NOT NULL
);

四、唯一约束(UNIQUE)

-- 值必须唯一,但可以为NULL
CREATE TABLE person (
    id INT PRIMARY KEY,
    phone VARCHAR(11) UNIQUE
);
对比项PRIMARY KEYUNIQUE
NULL值不能可以
数量每表一个可有多个

五、默认值(DEFAULT)

-- 不填写时使用默认值
CREATE TABLE person (
    id INT PRIMARY KEY,
    city VARCHAR(20) DEFAULT '北京'
);

-- 不指定city时默认为'北京'
INSERT INTO person (id, name) VALUES (1, '张三');

六、外键约束(了解)

-- 建立表间关联
CREATE TABLE category (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20)
);

CREATE TABLE product (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(20),
    c_id INT,
    FOREIGN KEY (c_id) REFERENCES category(id)
);