MySQL基础——DDL语言的学习

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 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;


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
50 3
|
16天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
30 4
|
24天前
|
SQL 关系型数据库 MySQL
|
1月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
66 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
1月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
97 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
1月前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
29 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
1月前
|
SQL 关系型数据库 MySQL
MySQL 更新1000万条数据和DDL执行时间分析
MySQL 更新1000万条数据和DDL执行时间分析
121 4
|
1月前
|
关系型数据库 MySQL 数据库
mysql关系型数据库的学习
mysql关系型数据库的学习
20 0
|
1月前
|
Kubernetes 关系型数据库 MySQL
k8s学习--利用helm部署应用mysql,加深helm的理解
k8s学习--利用helm部署应用mysql,加深helm的理解
199 0
|
2月前
|
SQL 关系型数据库 MySQL
学习MySQL操作的有效方法
学习MySQL操作的有效方法
46 3
下一篇
无影云桌面