MYSQL(DDL)
目录
- 一、DDL:数据定义语言
- 1. 数据库 (Database) 操作
- 创建数据库 (CREATE DATABASE)
- 修改数据库 (ALTER DATABASE)
- 删除数据库 (DROP DATABASE) 谨慎使用
- 选择/使用数据库 (USE)
- 2. 表 (Table) 操作
- 创建表 (CREATE TABLE)
- 修改表 (ALTER TABLE)
- 3. 索引 (Index) 操作
- 创建索引 (CREATE INDEX)
- 删除索引 (DROP INDEX)
- 4. 视图 (View) 操作
- 创建视图 (CREATE VIEW)
- 查看视图 (CREATE VIEW)
- 修改视图 (ALTER VIEW)
- 删除视图 (DROP VIEW)
一、DDL:数据定义语言
核心概念:DDL 语句用于定义或修改数据库的结构(Schema),而不是其中的数据。执行 DDL 语句通常会自动提交当前事务(即立即生效)。
1. 数据库 (Database) 操作
创建数据库 (CREATE DATABASE)
-- 最基本语法
CREATE DATABASE mydb;-- 指定字符集和排序规则(推荐,避免乱码)
CREATE DATABASE mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_bin;
**CHARACTER SET:**指定数据库默认的字符编码。utf8mb4 是现在的主流选择,因为它支持完整的 Unicode(包括表情符号)。
**COLLATE:**指定字符串比较和排序的规则。utf8mb4_bin 是基于 Unicode 标准的排序规则,比较准确。
修改数据库 (ALTER DATABASE)
-- 修改数据库的默认字符集和排序规则
ALTER DATABASE mydb
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
主要用于修改数据库的全局属性,如字符集。注意: 修改不会影响已存在的表,只会影响后续新创建的表。
删除数据库 (DROP DATABASE) 谨慎使用
-- 删除数据库(谨慎使用!该操作会删除库中所有数据和表)
DROP DATABASE mydb;-- 先判断数据库是否存在,再删除(更安全)
DROP DATABASE IF EXISTS mydb;
**警告:**此操作不可逆,会直接删除整个数据库及其所有对象。
选择/使用数据库 (USE)
-- 选择要操作的数据库
USE mydb;
2. 表 (Table) 操作
创建表 (CREATE TABLE)
-- 基本语法
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)
添加列 (ADD COLUMN)alter table users add column sex char(1) after is_active; -- 指定新列的位置
修改列定义 (MODIFY COLUMN)alter table users modify column sex char(20); -- 增大邮箱字段的长度
重命名列 (CHANGE COLUMN)ALTER TABLE users
CHANGE COLUMN is_active status BOOLEAN DEFAULT TRUE; -- 修改列名和定义
删除列 (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)
-- 在现有表上创建索引
CREATE INDEX idx_email ON users(email); -- 普通索引
CREATE UNIQUE INDEX uk_username ON users(username); -- 唯一索引
删除索引 (DROP INDEX)
-- 删除索引
DROP INDEX idx_email ON users;
4. 视图 (View) 操作
视图是将数据库中查询得到的数据作为一张新的表,用来操作,虚拟表。
视图是一个虚拟表,其内容由查询定义。
创建视图 (CREATE VIEW)
-- 创建一个视图,隐藏了密码等敏感信息
CREATE VIEW user_profile AS
SELECT id, username, email, created_at, status
FROM users;
查看视图 (CREATE VIEW)
SHOW FULL TABLES WHERE Table_type = 'VIEW';
修改视图 (ALTER VIEW)
-- 修改视图定义
ALTER VIEW user_profile AS
SELECT id, username, email, created_at, status, phone_number
FROM users;
删除视图 (DROP VIEW)
DROP VIEW IF EXISTS user_profile;