cxl
Published on 2025-04-15 / 65 Visits
3
0

Mysql之DDL

数据定义语言(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;


Comment