MYSQL(DDL)

目录

一、DDL:数据定义语言

核心概念:DDL 语句用于定义或修改数据库的结构(Schema),而不是其中的数据。执行 DDL 语句通常会自动提交当前事务(即立即生效)。

1. 数据库 (Database) 操作

创建数据库 (CREATE DATABASE)

sql 复制代码
-- 最基本语法
CREATE DATABASE mydb;

-- 指定字符集和排序规则(推荐,避免乱码)
CREATE DATABASE mydb 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_bin;

**CHARACTER SET:**指定数据库默认的字符编码。utf8mb4 是现在的主流选择,因为它支持完整的 Unicode(包括表情符号)。

**COLLATE:**指定字符串比较和排序的规则。utf8mb4_bin 是基于 Unicode 标准的排序规则,比较准确。

修改数据库 (ALTER DATABASE)

sql 复制代码
-- 修改数据库的默认字符集和排序规则
ALTER DATABASE mydb 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

主要用于修改数据库的全局属性,如字符集。注意: 修改不会影响已存在的表,只会影响后续新创建的表。

删除数据库 (DROP DATABASE) 谨慎使用

sql 复制代码
-- 删除数据库(谨慎使用!该操作会删除库中所有数据和表)
DROP DATABASE mydb;

-- 先判断数据库是否存在,再删除(更安全)
DROP DATABASE IF EXISTS mydb;

**警告:**此操作不可逆,会直接删除整个数据库及其所有对象。

选择/使用数据库 (USE)

sql 复制代码
-- 选择要操作的数据库
USE mydb;

2. 表 (Table) 操作

创建表 (CREATE TABLE)

sql 复制代码
-- 基本语法
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,       -- 主键,自增长
    username VARCHAR(50) NOT NULL UNIQUE,    -- 可变长字符串,非空且唯一
    password CHAR(60) NOT NULL,              -- 固定长度字符串(常用于加密后的密码)
    email VARCHAR(100),
    age TINYINT UNSIGNED,                    -- 无符号小整数
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP, -- 默认值为当前时间
    is_active BOOLEAN DEFAULT TRUE           -- 布尔类型,实际上是TINYINT(1)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;     -- 指定存储引擎和字符集

修改表 (ALTER TABLE)

sql 复制代码
添加列 (ADD COLUMN)

alter table users add column sex char(1) after is_active; -- 指定新列的位置
sql 复制代码
修改列定义 (MODIFY COLUMN)

alter table users modify column sex char(20); -- 增大邮箱字段的长度
sql 复制代码
重命名列 (CHANGE COLUMN)

ALTER TABLE users 
CHANGE COLUMN is_active status BOOLEAN DEFAULT TRUE; -- 修改列名和定义
sql 复制代码
删除列 (DROP COLUMN)

ALTER TABLE users 
DROP COLUMN age;
添加约束 (ADD CONSTRAINT)

-- 添加外键约束
ALTER TABLE orders 
ADD CONSTRAINT fk_orders_user_id 
FOREIGN KEY (user_id) REFERENCES users(id);

-- 添加唯一约束
ALTER TABLE users 
ADD CONSTRAINT uk_users_email UNIQUE (email);
添加/删除索引

ALTER TABLE users ADD INDEX idx_username (username); -- 添加普通索引
ALTER TABLE users DROP INDEX idx_username;       

3. 索引 (Index) 操作

创建索引 (CREATE INDEX)

sql 复制代码
-- 在现有表上创建索引
CREATE INDEX idx_email ON users(email);         -- 普通索引
CREATE UNIQUE INDEX uk_username ON users(username); -- 唯一索引

删除索引 (DROP INDEX)

sql 复制代码
-- 删除索引
DROP INDEX idx_email ON users;

4. 视图 (View) 操作

视图是将数据库中查询得到的数据作为一张新的表,用来操作,虚拟表。

视图是一个虚拟表,其内容由查询定义。

创建视图 (CREATE VIEW)

sql 复制代码
-- 创建一个视图,隐藏了密码等敏感信息
CREATE VIEW user_profile AS
SELECT id, username, email, created_at, status
FROM users;

查看视图 (CREATE VIEW)

sql 复制代码
SHOW FULL TABLES WHERE Table_type = 'VIEW';

修改视图 (ALTER VIEW)

sql 复制代码
-- 修改视图定义
ALTER VIEW user_profile AS
SELECT id, username, email, created_at, status, phone_number
FROM users;

删除视图 (DROP VIEW)

sql 复制代码
DROP VIEW IF EXISTS user_profile;