数据定义语言(DDL, Data Definition Language)
核心功能:定义和管理数据库结构,如表、索引、视图等对象的创建、修改和删除。
表操作主要命令:
CREATE
:创建数据库对象(如表、索引)
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50)); -- 创建用户表
ALTER
:修改表结构(如添加/删除列)
ALTER TABLE users ADD COLUMN email VARCHAR(100) comment '这是邮箱'; -- 添加邮箱字段
ALTER TABLE users MODIFY COLUMN email varchar(120); -- 修改邮箱字段长度
ALTER TABLE users ADD COLUMN age varchar(3); -- 添加年龄字段
ALTER TABLE users MODIFY COLUMN age int(3) NOT NULL default 0; -- 修改年龄字段类型并设置默认值为0
ALTER TABLE users RENAME COLUMN email to youjian; -- 字段重命名
ALTER TABLE users DROP COLUMN age; -- 删除年龄字段


DROP
:删除数据表对象



DROP TABLE users; -- 删除用户表
DESC
: 查看表结构
DESC users;
SHOW...
: 查看建表语句
show create table users;
索引操作主要命令:
主键索引(PRIMARY KEY)
-- 建表时直接指定
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(30)
);
-- 使用ALTER TABLE添加
ALTER TABLE students ADD PRIMARY KEY (id);
普通索引(INDEX)
-- 建表时直接指定
CREATE TABLE students (
id INT,
name VARCHAR(30),
INDEX idx_name (name)
);
-- 使用CREATE INDEX创建
CREATE INDEX idx_name ON students (name);
-- 使用ALTER TABLE添加
ALTER TABLE students ADD INDEX idx_name (name);
唯一索引(UNIQUE)
-- 建表时直接指定
CREATE TABLE students (
id INT,
name VARCHAR(30),
CONSTRAINT idx_name unique(name)
);
-- 使用CREATE UNIQUE INDEX创建
CREATE UNIQUE INDEX uni_email ON users (email);
-- 使用ALTER TABLE添加
ALTER TABLE users ADD UNIQUE INDEX uni_email (email);
组合索引(Composite Index)
-- 建表时直接指定
CREATE TABLE teacher (
id INT,
name VARCHAR(30),
phone varchar(11),
INDEX com_idx_name_phone (name,phone)
);
-- 使用CREATE INDEX创建
CREATE INDEX com_idx_name_phone ON teacher (name,phone);
前缀索引
适用于VARCHAR/TEXT
类型,可减少索引大小
-- 对文本类型字段name前10个字符创建索引
CREATE INDEX idx_partial_name ON students (name(10));
排序顺序索引
MySQL 8.0+支持
-- 创建降序索引
CREATE INDEX idx_age_desc ON students (age DESC);
全文索引(FULLTEXT)
对文本内容创建全文搜索索引
-- 创建文章表
CREATE TABLE articles (
id BIGINT PRIMARY KEY auto_increment,
student_id BIGINT comment '文章作者ID',
content VARCHAR (500) comment '文章内容'
) comment '文章表格'
-- 对文章内容创建全文索引
ALTER TABLE articles ADD FULLTEXT INDEX ft_content (content);
-- 使用全文索引查询方法,relevanc值越大表示相关性越高
SELECT
*,
MATCH (content) AGAINST ( 'my name' ) AS relevance
FROM
articles
WHERE
MATCH (content) AGAINST ( 'my name' )
ORDER BY
relevance DESC;

查看索引
SHOW INDEX FROM students;
删除索引
-- 使用DROP INDEX删除
DROP INDEX idx_name ON students;
-- 使用ALTER TABLE删除
ALTER TABLE students DROP INDEX idx_name; -- 删除主键 DROP PRIMARY KEY;