五、DDL语言

简介

DDL:数据定义语言,库和表的管理

库的管理:

  1. 创建
  2. 修改
  3. 删除

表的管理:

  1. 创建
  2. 修改
  3. 删除

命令:

  1. 创建:create
  2. 修改:alter
  3. 删除:drop

库的管理

创建

语法

普通:create datebase 库名

提高容错性:create datebase if not exists 库名

修改(一旦创建库,一般不修改)

语法

重命名:rename database 库名 to 新库名; (已经废弃)

修改字符集:alter database 库名 character set 字符集;

删除

语法

删除库:

  1. drop database 库名;(不安全)
  2. drop database if exists 库名;(安全)

表的管理

创建

语法

create table is not exists 表名(

列名 列的数据类型【(类型长度) 约束】,

列名 列的数据类型【(类型长度) 约束】,

列名 列的数据类型【(类型长度) 约束】

);

修改

修改列名

alter table 表名 change column 旧列名 新列名 数据类型;

列的类型或约束

修改某一列的数据类型:

alter table 表名 modify column 列名 新数据类型;

添加列

alter table 表名 add column 新列名 数据类型;

alter table 表名 add column 新列名 数据类型 【first|after 字段名】; 调整字段顺序

删除列

alter table 表名 drop column 列名;

修改表名

alter table 表名 rename to 新表名;

删除

语法

drop table if exists 表名;

复制

仅复制表结构
语法

create table 新表 like 已存在的表;

复制表结构+数据
语法

create table 新表 select * from 旧表;

复制表结构+部分数据
语法

create table 新表 select * from 旧表 where 筛选条件;

常见约束

含义

一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性

分类

六大约束
  • not null(该字段不能为空约束)
  • default(默认,用于保证该字段有默认值)
  • primary key(主键,用户保证该字段值具有唯一性,非空字段)
  • unique(唯一,用于保证该字段的值具有唯一性,可为空)
  • check(检查约束,【Mysql不支持,语法不报错,但无效果】)
  • poreign key(外键约束,用于限制两个表的关系,该字段值必须来自主表关联字段的值,在从表添加外键约束,用于引用主表中某列的值)
添加分类
  • 列级分类
    • 六大约束语法上都支持,但外键约束没效果
  • 表级分类
    • 除了非空约束(not null)和默认约束(default),其它都支持

创建表时添加约束

添加列级约束
语法:

直接在字段名和类型后面追加 约束类型 即可。
支持的约束:默认(default)、非空(not null)、主键(primary key)、唯一(unique)

示例:
create database students;	# 创建数据库
use students;				# 进入数据库
# 学生表
create table stu_info(
id int(11) primary key, # 主键约束
stu_name varchar(20) not null, # 非空约束
sex char(1) check(sex ='男' or sex='女'), # 检查约束,Mysql不生效,仅作演示
seat int(11) unique, # 唯一约束 
age int(3) default 18, # 默认约束,默认18岁
# major_id int(11) foreign key references major(id) # 外键约束 
major_id int(11) references major(id) # 外键约束 
);
# 专业表
create table major(
id int(11) primary key, # 主键约束
major_name varchar(50)
);

查看 学生表 信息:
在这里插入图片描述
查看 学生表 所有索引:
在这里插入图片描述
可以看到,外键约束并没有起作用。

添加表级约束
语法:
  • 在各个字段最下面
  • constraint 约束名 约束类型(字段名)
  • constraint关键字就是为添加的约束起个别名不写也行,
    • 注意:主键约束别名为primary,改了也不生效
示例:
create database students;	# 创建数据库
use students;				# 进入数据库
# 学生表
create table stu_info(
id int(11) , 
stu_name varchar(20), 
sex char(1) ,
seat int(11), 
age int(3), 
major_id int(11),
constraint pk primary key(id), #主键
constraint uq unique(seat), #唯一
constraint ck check(sex='男' or sex='女'), #检查约束
constraint fk_major foreign key(major_id) references major(id) #外键
);
# 专业表
create table major(
id int(11) primary key, # 主键约束
major_name varchar(50)
);

查看 学生表 信息:
在这里插入图片描述
查看 学生表 所有索引:
在这里插入图片描述
可以看到,表级约束中外键约束起到了作用。

列、表级约束一起写
语法:
create database students;	# 创建数据库
use students;				# 进入数据库
# 学生表
create table stu_info(
id int(11) primary key, # 主键约束
stu_name varchar(20) not null, # 非空约束
sex char(1) check(sex ='男' or sex='女'), # 检查约束,Mysql不生效,仅作演示
seat int(11) unique, # 唯一约束 
age int(3) default 18, # 默认约束,默认18岁
major_id int(11),
constraint fk_major foreign key(major_id) references major(id) #外键
);
# 专业表
create table major(
id int(11) primary key, # 主键约束
major_name varchar(50)
);
主键约束和唯一约束对比
保证唯一性是否允许为空表中是否可有多个是否允许组合
主键约束×主键只能有一个;但是可创建多个列联合主键两个列组合成一个主键:允许
唯一约束可以有多个两个列组合成一个唯一:允许
多个列联合主键示例
create table stu_info(
id int(11) , 
stu_name varchar(20) not null, # 非空约束
sex char(1) check(sex ='男' or sex='女'), # 检查约束,Mysql不生效,仅作演示
seat int(11) unique, # 唯一约束 
age int(3) default 18, # 默认约束 默认18岁
primary key(`id`,`stu_name`) # id和stu_name组合成主键
);
# 成功添加:
truncate table stu_info;
insert into stu_info value(1, '张三', '男', 12, 18);
insert into stu_info value(2, '张三', '男', 13, 19);
# 成功添加:
truncate table stu_info;
insert into stu_info value(1, '张三', '男', 12, 18);
insert into stu_info value(1, '李四', '男', 13, 19);
# 失败添加:
truncate table stu_info;
insert into stu_info value(1, '张三', '男', 12, 18);
insert into stu_info value(1, '张三', '男', 13, 19);
外键
特点
  • 在从表上设置外键关系
  • 从表的外键列的类型和主表的关联列的类型要求一致或兼容
  • 主表中关联列必须是一个key(一般是主键、唯一键)
  • 插入数据要先插入主表再插入从表
  • 删除数据先删除从表再删除主表
修改表时添加约束
示例
# 修改非空约束
alter tablemodify column字段 varchar(20) not null;
# 默认约束,默认值:'demo' 
alter tablemodify column字段 varchar(20) default 'demo'; 
# 添加主键
alter tablemodify column 字段 int(11) primary key;
alter tableadd primary key(字段) ;
# 添加唯一键
①列级约束
alter tablemodify column 字段 int(11) unique;
②表级约束
alter tableadd unique(字段);
# 添加外键
alter tableadd foreign key(字段) references 【外键的作用】;
修改表时删除约束
示例
 # 删除非空约束
alter tablemodify column字段 varchar(20) null;
# 删除主键
alter tabledrop primary key;
# 删除唯一约束
alter tabledrop index;

标识列(自增长列)

含义

可以不用手动插入值,系统提供默认序列值

特点
  • 标识列必须和主键搭配吗?不一定,但要求必须是一个key
  • 一个表可有多个标识列吗?至多一个
  • 标识列类型只能是数值型,如 int、float、double
举例
create table demo(
  id int primary key auto_increment, # id为主键并设为自增
  name varchar(10)
)
# 插入五条数据
insert into demo values(null, 'AAA'),(null, 'BBB'),(null, 'CCC'),(null, 'DDD');
# 查看
select * from demo;
+----+------+
| id | name |
+----+------+
|  1 | AAA  |
|  2 | BBB  |
|  3 | CCC  |
|  4 | DDD  |
+----+------+
### 头歌 MySQL DDL 数据定义语言 使用教程 #### 什么是DDL? 数据定义语言 (DDL - Data Definition Language) 是 SQL 的一部分,用于创建和修改数据库中的对象结构。它主要包括 `CREATE`、`ALTER` 和 `DROP` 等语句。 以下是头歌平台上可能涉及的 MySQL DDL 基本操作及其示例: --- #### 创建表 (`CREATE TABLE`) 通过 `CREATE TABLE` 可以定义一个新的表格并指定其列属性以及约束条件。 ```sql -- 示例:创建学生表 student CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL COMMENT '姓名', sex CHAR(2) DEFAULT '男' COMMENT '性别', age INT CHECK(age >= 0 AND age <= 150) COMMENT '年龄' ); ``` 上述代码片段展示了如何创建一个名为 `student` 的表[^1]。其中: - `id` 被设置为主键,并启用自动增长功能。 - `name` 字段是一个最大长度为 50 的字符串型字段,不能为空。 - `sex` 默认值设为 `'男'`。 - `age` 添加了一个范围检查约束,确保输入的有效性。 --- #### 修改表结构 (`ALTER TABLE`) 当需要调整现有表的设计时可以使用 `ALTER TABLE` 来增加新列、删除旧列或者更改已有列的数据类型等。 ```sql -- 示例:向 student 表新增一列 email ALTER TABLE student ADD COLUMN email VARCHAR(100); -- 示例:改变某一列的名字或数据类型 ALTER TABLE student CHANGE COLUMN age years SMALLINT; ``` 这里演示了两种常见情况下的语法应用: - 向已存在的表里追加额外的信息存储空间——即添加新的字段; - 对某些特定需求下重新规划原设计里的参数规格——比如更改为更适合实际业务场景的新格式。 --- #### 删除表 (`DROP TABLE`) 如果不再需要某个表,则可以通过执行 `DROP TABLE` 将整个表连同它的所有记录一起移除掉。 ```sql -- 安全模式下先判断是否存在再决定是否要删去目标表 DROP TABLE IF EXISTS old_table_name; ``` 此命令会彻底销毁指定名称的对象实例,所以在真正实施之前务必确认清楚以免误操作造成不可逆损失! --- #### 枚举类型支持 (`ENUM`) MySQL 提供了一种特殊的字符串数据类型叫做枚举(`ENUM`) ,允许我们限定某列只接受预定义列表内的固定几个选项之一作为有效值。 ```sql CREATE TABLE tab_enum( e1 ENUM('a', 'b', 'c') -- 列e1只能取'a','b','c'这三个值其中之一 ); DESCRIBE tab_enum; -- 查看表结构验证定义成功与否 ``` 这段脚本说明了怎样利用 `ENUM` 类型来构建具有严格控制域特性的字段配置方案[^2] 。这有助于减少非法录入的可能性从而提高整体系统的健壮性和一致性水平。 --- ### 总结 以上就是围绕着头歌平台所展示出来的有关于 **MySQL DDL** 方面的基础知识点介绍与具体实现案例分享。希望这些内容能够帮助到正在学习这条技术路线的朋友更好地理解和掌握相关技能要点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值