MySQL基础——DDL语言的学习

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: DDL语言的相关学习!

DDL语言

数据定义语言

库和表的管理

一、库的管理

创建、修改、删除

二、表的管理

创建、修改、删除

创建:create

修改:alter

删除:drop

一、库的管理

1、库的创建

语法:

create database 【if not exists】库名 【character set 字符集名】;


例:创建库books

create database books;


2、库的修改

rename database books to 新库名;(基本不用)


更改库的字符集、

alter database 库名 character set 字符集名;alter database books character set gbk;


3、库的删除

drop database 【if exists】 库名;


二、表的管理

1、表的创建

语法:

createtable 【if not exists】表名(列名 列的类型【(长度)约束】,列名 列的类型【(长度)约束】,……
列名 列的类型【(长度)约束】
);


例:创建表book

createtable if exists book(
id intbname varchar(20),price double,author varchar(20)publishdate datetime;

2、表的修改

altertable 表名 add|drop|modify|change column 列名 【列类型 约束】;

(1)修改列名

altertable book change column publishdate pubdate datetime;


(2)修改列的类型或约束

altertable book modify column pubdate timestamp;


(3)添加新列

altertable author add column annual double;


(4)删除列

altertable author drop column annual;


(5)修改表名

altertable author rename to book_abc;


3、表的删除

droptable 【if exists】 表名;

通用的写法:

drop database if exists 旧库名;create database 新库名;droptable if exists 旧表名;createtable 表名();


4、表的复制

insertinto author values(1,‘小王’,‘西安’),
(2,‘小李’,‘延安’),
(3,‘小田’,‘渭南’),
(4,‘小张’,‘安康’);


4.1、仅复制表的结构

createtable copy表名 like author旧表;


4.2、复制表的结构+数据

createtable copy2 select*from author;


只复制部分数据

createtable copy3 select id, au_name
from author where nation='西安';


仅复制某些字段

createtable copy4
select id, au_name
from author where0;


三、常见的数据类型

数值型:

整型

小数:定点数、浮点数

字符型:

较短的文本:char、varchar

较长的文本:text、blob(较长的二进制数据)

日期型

(一)整型

分类:

tinyint(1)、smallint(2)、mediumint(3)、int/integer(4)、bigint(8)

特点:

(1)如果不设置无符号还是有符号,默认是有符号,如果想设置有符号,需要添加unsigned关键字

(2)如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值

(3)如果不设置长度,会有默认的长度

长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用

1、如何设置无符号和有符号

createtable tab_int(t1 int,t2 intunsigned);


(二)小数

分类:

1、浮点型

float(M,D)

double (M,D)

2、定点型

dec(M,D)

decimal(M,D)

特点:

(1)M和D

M:整数部位+小数部位

D:小数部位

如果超过范围,则报out or range异常,并插入临界值

(2)M和D都可以省略,

如果是decimal,则M默认为10,D默认为0

如果是float和double,则会根据插入的数值的精度来决定精度

(3)定点型的精确度较高,如果要求插入数值的精确度较高如货币运算等则考虑使用

原则:

所选择的类型越简单越好,能保存数值的类型越小越好

(三)字符型

较短的文本:char、varchar

特点:


写法

M的意思 特点 空间的耗费 效率
char char(M) 最大的字符数,可以省略,默认为1 固定长度的字符 比较耗费
varchar varchar(M) 最大的字符数,不可以省略 可变长度的字符 比较节省

较长的文本:text、blob(较长的二进制数据)

(四)日期型

分类:

date只保存日期

time只保存时间

year只保存年

datetime保存日期+时间

timestamp保存日期+时间

常见约束

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

分类:六大约束

not null:非空,用于保证该字段的值不能为空,比如姓名、学号等

default:默认,用于保证该字段有默认值,比如性别

primary key:主键,用于保证该字段的值具有唯一性,并且非空,比如字号、员工编号等

unique:唯一,用于保证该字段的值具有唯一性,所以为空,比如路径号

check:检查约束【MySQL中不支持】

foreign key:用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某列的值,比如主表的专业编号,员工表的部门编号,员工表的工种编号

添加约束的时机:

1、创建表时

2、修改表时

约束的添加分类:

列级约束:六大约束语法上都支持,但外键约束没有效果

表级约束:除了非空、默认,其他的都支持

主键和唯一对比:(取前两行)

外键:

1、要求在从表设置外键关系

2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求

3、主表的关联列必须是一个key(一般是主键或唯一键)

4、插入数据时,先插入主表,再插入从表

删除数据时,先删除从表,再删除主表

可以通过以下两种方式删除主表的记录

方式一:级联删除

altertable stuinfo 
add constraint fk_stu_major foreion key(majorid) peferences major(id)ondelete cascade;


方式二:级联置空

altertable stuinfo 
add constraint fk_stu_major foreion key(majorid) peferences major(id)ondeletesetnull;


4.1、创建表时添加约束

1、添加列级约束

语法:

直接在字段名和类型的后面追加约束类型即可

只支持:默认、非空、主键、唯一

createtable 类名(
字段名 字段类型 notnull,#非空
字段名 字段类型 primary key,#主键
字段名 字段类型 unique,#唯一
字段名 字段类型 default 值,#默认
constraint 约束名 foreign(字段名) references 主表(被引用例)
;

注:


支持类型 可以起约束名
列级约束 除了外键 不可以
表级约束 除了非空和默认 可以,但对主键无效

列级约束可以在一个字段上追加多个,中间用空格隔开,没有顺序要求

例:

createtable stuinfo(id int primary key ,#主键
stuinfo varchar(20)not ull,#非空
gender char(1) check(gender ='男'or gender ='女'),#检查
seat int unique,#唯一
age int default 18,#默认约束
majorid int foreign references major(id) #外键
);createtable major(
id int primary key,majorname varchar(20);

2、添加表级约束

语法:在各个字段的最下面

【constraint 约束名】 约束类型(字段名)
createtable stuinfo(id int,stuinfo varchar(20)gender char(1)seat intage intmajorid intconstraint pk primary key(id),#主键
constraint uq unique(seat),#唯一键
constraint ck check(gender ='男'or gender ='女'),#检查
constraint fk_stuinfo_major foreign key(majorid) references major(id) #外键
);


通用的写法:

createtable if not exists stuinfo(id int primary key,stuname varchar(20)not full,sex char(1)age int default 18,seat int unique,majorid int,constraint fk_stuinfo_major foreign key(majorid) references major(id));

4.2、修改表时添加约束

1、添加列级约束

altertable 表名 nodify column 字段名 字段类型 新约束;


2、添加表级约束

altertable 表名  add 【constraint 约束名】约束类型(字段名) 【外键的引用】;


(1)添加非空约束

altertable stuinfo nodify column stuname varchar(20)not full;


(2)添加默认约束

altertable stuinfo nodify column age int default 10;


3、添加主键

(1)列级约束

altertable stuinfo nodify column id int primary key;


(2)表级约束

altertable stuinfo nodify add primary key(id);


4、添加唯一

(1)列级约束

altertable stuinfo nodify column seat int unique;


(2)表级约束

altertable stuinfo nodify add unique(seat);


5、添加外键

altertable stuinfo nodify add foreign key(majorid) references major(id);


4.3、修改表时删除约束

1、删除非空约束

altertable stuinfo nodify column stuname varchar(20)null;


2、删除默认约束

altertable stuinfo nodify age int;


3、删除主键

altertable stuinfo drop primary key;


4、删除唯一

altertable stuinfo drop index seat;


5、删除外键

altertable stuinfo drop foreign key majorid;

四、标识列

又称为自增长列,

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

特点:

1、标识列必须和主键搭配吗?不一定,但要求是一个key

2、一个表中可以有多少个标识列?至多一个!

3、标识列的类型只能是数值型

4、标识列可以通过set auto_increment_increment=3;设置步长,可以通过手动插入值,设置起始值

(一)创建表时设置标识列

createtable tab_identity(id int primary key auto_increment,name varchar(20));


(二)修改表时设置标识列

altertable tab_identity modify column id int primary key auto_increment;


(三)修改表时删除标识列

altertable tab_identity modify column id int;


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
2月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
410 5
|
7月前
|
SQL 存储 关系型数据库
菜鸟之路Day29一一MySQL之DDL
本文《菜鸟之路Day29——MySQL之DDL》由作者blue于2025年5月2日撰写,主要介绍了MySQL中的数据定义语言(DDL)。文章详细讲解了DDL在数据库和表操作中的应用,包括数据库的查询、创建、使用与删除,以及表的创建、修改与删除。同时,文章还深入探讨了字段约束(如主键、外键、非空等)、常见数据类型(数值、字符串、日期时间类型)及表结构的查询与调整方法。通过示例代码,读者可以更好地理解并实践MySQL中DDL的相关操作。
248 11
|
3月前
|
关系型数据库 MySQL 数据管理
Mysql基础学习day03-作业
本内容包含数据库建表语句及多表查询示例,涵盖内连接、外连接、子查询及聚合统计,适用于员工与部门数据管理场景。
81 1
|
3月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01
本课程为MySQL基础学习第一天内容,涵盖MySQL概述、安装、SQL简介及其分类(DDL、DML、DQL、DCL)、数据库操作(查询、创建、使用、删除)及表操作(创建、约束、数据类型)。适合初学者入门学习数据库基本概念和操作方法。
187 6
|
3月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02-作业
本教程介绍了数据库表的创建与管理操作,包括创建员工表、插入测试数据、删除记录、更新数据以及多种查询操作,涵盖了SQL语句的基本使用方法,适合初学者学习数据库操作基础。
97 0
|
3月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day03
本课程为MySQL基础学习第三天内容,主要讲解多表关系与多表查询。内容涵盖物理外键与逻辑外键的区别、一对多、一对一及多对多关系的实现方式,以及内连接、外连接、子查询等多表查询方法,并通过具体案例演示SQL语句的编写与应用。
106 0
|
3月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day01-作业
本教程包含三个数据库表的创建练习:学生表(student)要求具备主键、自增长、非空、默认值及唯一约束;课程表(course)定义主键、非空唯一字段及数值精度限制;员工表(employee)包含自增主键、非空字段、默认值、唯一电话号及日期时间类型字段。每个表的结构设计均附有详细SQL代码示例。
86 0
|
3月前
|
SQL 关系型数据库 MySQL
Mysql基础学习day02
本课程为MySQL基础学习第二天内容,涵盖数据定义语言(DDL)的表查询、修改与删除操作,以及数据操作语言(DML)的增删改查功能。通过具体SQL语句与实例演示,帮助学习者掌握MySQL表结构操作及数据管理技巧。
148 0
|
6月前
|
SQL 关系型数据库 MySQL
MySQL 5.6/5.7 DDL 失败残留文件清理指南
通过本文的指南,您可以更安全地处理 MySQL 5.6 和 5.7 版本中 DDL 失败后的残留文件,有效避免数据丢失和数据库不一致的问题。
|
11月前
|
SQL 监控 关系型数据库
MySQL如何优雅的执行DDL
在MySQL中优雅地执行DDL操作需要综合考虑性能、锁定和数据一致性等因素。通过使用在线DDL工具、分批次执行、备份和监控等最佳实践,可以在保障系统稳定性的同时,顺利完成DDL操作。本文提供的实践和案例分析为安全高效地执行DDL操作提供了详细指导。
504 14

推荐镜像

更多