MySQL-数据定义DDL篇(大学生精通MySQL 数据库由浅入深)
前言
此篇章为本人在学习 MySQL 过程中送总结的笔记,总体的会全部收集到一个专栏当中,大伙们无论是单纯学习 MySQL,还是需要从事大数据行业的,都可以去我的主页去翻一翻哦!接下里我们来开始 MySQL 中数据定义篇的学习吧!
- MySQL-数据操作DML篇
- MySQL-数据查询DQL篇
- MySQL-权限操纵DCL篇
- MySQL 面试题-概念
- MySQL 面试题-习题
一、SQL概述
1. 什么是数据库?
【官方解释】:数据库(database)是按照数据结构来组织、储存和管理数据的仓库,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
通俗的说,数据库就是存储数据的仓库,其本质是一个文件系统,按照特定的格式将数据存储起来,用户可以对数据库进行增删查改操作【CRUD】,也为事务的特性,后面我们会专门开一章讲解事务。
数据库的发展趋势
随着时代的发展,大量数据在不断的产生,伴随而来的是如何高效安全的存储数据和处理数据,而这一问题成为了信息时代非常大的问题。
- web1.0时代:用企业提供数据,资讯类的网站、新闻类网站出现等,搜狐、头条、腾讯新闻、新浪……
- web2.0时代:由用户产生数据,企业要去管理这些数据,抖音、淘宝、京东(个人信息、浏览信息订单)
而我们的 MySQL 具有以下的特点:
- 开放源代码:MySQL是一种开放源代码的数据库管理系统,可以免费下载、使用和修改,同时具有强大的社区支持和广泛的开发者社区
- 可拓展性:MySQL 支持水平拓展和垂直拓展,可以根据需要处理大量数据以及高并发;
- 客户端/服务器架构:可以允许多个客户端进行数据的写入、读取
- 多平台性:支持 macOS、windos、linux等 MySQL可以安装在不同的操作系统,并且提供多种编程语言的操作接口【pymysql】。这些编程语言包括Python、C、C++、Java、Ruby等等;
- 数据安全性:MySQL 数据库库提供了数据加密、访问控制和用户身份验证等安全功能,保证数据的私密性和完整性
- 事务支持:MySQL 支持事务管理,通过 ACID (原子性、一致性、隔离性和持久性)特性保证数据的一致性和可靠性
- 易用性:MySQL具有良好的可用性和易用性,提有了友好的图形化界面和命令行界面,同时支持多种编程语言的API接口,方便开发人员进行数据操作和管理
2、数据库分类
- 关系型数据库(SQL)
关系型数据库,采用了关系模型来组织数据的数据库,简单来说,关系模型指的就是二维表格模型,如同Excel文件中的表格,强调使用表格的方式存储数据库。
这些数据库通常支持ACID(Atomicity、Consistency、Isolation、Durability)事务,具有强一致性和数据完整性。
| 数据库名称 | 地位 |
|---|---|
| Oracle | 最早的商品化的收费大型数据库,Oracle公司的产品旗下产品:Oracle数据库、MySQL数据库、Java语言[SUN公司] |
| Mysql | 开源免费的数据库,中型的数据库。已经被Oracle收购了 |
| DB2 | IBM公司收费的数据库产品,常运用在银行系统中 |
| SQLserver | MicroSoft公司收费的中型的数据库,长运用于C#,.net等语言 |
| SQLite | 轻型数据库,也是关系型数据库。它包含在一个小的C库中,常常应用在嵌入式产品中,例如手机端、安卓、苹果手机。 |
| PostgreSQL | 功能最大的开源数据库PG 成为 专业开发者最常使用的数据库!(Used)、PG 成为 开发者最为喜爱的数据库!(Loved)、PG 成为开发者最想要用的数据库!(Wanted) |
- 非关系型数据库(NoSQL)
非关系型数据库:又被称为NoSQL(Not Only SQL ),意为不仅仅是SQL,对NoSQL 最普遍的定义是“非关联型的”,强调 Key-Value 的方式存储数据;此外还有、文档存储、列族存储等。
Key-Value结构存储:Key-Value数据库是一种以键值对存储数据的一种数据库,类似Python中的字典dict。
可以将整个数据库理解为一个大的字典dict,每个键都会对应一个唯一的值。存储在内存中,访问内存效率高!

| 数据库名称 | 地位 |
|---|---|
| Redis | Redis一个小而美的数据库,主要用在key-value的内存缓存,读写性能极佳。 后台开发! |
| MongoDB | 最好的文档型数据库,非常接近关系型数据库的。 |
| Elasticearch | 最好的搜索服务 |
| Cassandra | 最好的列式数据库 |
| Hbase | 优秀的分布式、列式数据库,HBase是列式数据库,目标是高效存储大量数据。 |
例如,一起来看看在搜索引擎、求职网站等关键词排名中使用数据库产品排行榜(点击)

3、MySQL的介绍
MySQL数据库系统是由瑞士的DataKonsultAB公司研发,该公司被Sun收购,现今又被Oracle公司收购,因此MySQL目前是 Oracle 旗下的产品。
①MySQL的特点:
- MySQL是开源的,所以你不需要支付额外的费用;
- MySQL,中型,支持大型的数据库。可以处理拥有上千万条记录的大型数据库;
- MySQL使用标准的SQL数据语言形式; SQL语法
- MySQL可以安装在不同的操作系统,并且提供多种编程语言的操作接口【pymysql】。这些编程语言包括Python、C、C++、Java、Ruby等等;
- 支持多种存储引擎。大数据:InnoDB引擎
②MySQL的版本
针对不同的用户,MySQL分为两种不同的版本:
- MySQL Community Server🔥
社区版本,免费,但是Mysql不提供官方技术支持,我们学习使用的就是此模板。 - MySQL Enterprise Edition
商业版,该版本是收费版本,可以试用30天,官方提供技术支持。 - MySQL Cluster
集群版,开源免费,可将几个MySQL Server封装成一个server。 - MysQL Cluster CGE
高级集群版,需付费。 - MysQL Workbench (GUI TOOL)
款专为MySQL设计的ER/数据库建模工具。MysQL Workbench又分为两个版本,分别是社区版(MySQLWorkbench oss)商用版 (MysQL Workbenc
二、 Mysql的安装、登录和退出
2.1 Mysql的安装
对于电脑中没有安装过Mysql数据库的推荐用XP小皮面板安装Mysql,可以傻瓜式安装,前期我们使用win来学习MySQL基础语法,后期我们要在Centos上远程连接MySQL进行数据开发!

如果想要在Centos上安装,可以查看:Centos7 下 MySQL8.0 的安装
数据库管理工具
数据库管理工具是指用来管理和操作数据库的软件工具,它们充当了数据库系统管理员和开发人员的工具,可以帮助用户创建、维护、备份和恢复数据库,执行SQL查询和管理数据库对象。以下是一些数据库管理工具的优点:
-
提高效率:数据库管理工具能够自动化完成许多数据库管理任务,如备份、恢复、监控等。这大大提高了数据库管理员的工作效率。
-
减少错误:人为操作数据库时容易犯错,例如错误地输入命令或误删数据。使用数据库管理工具可以减少这些人为错误的发生,降低操作数据库的风险。
-
提高安全性:数据库管理工具可以提供强大的安全性功能,如访问控制、日志记录和审计等。这些功能能够帮助数据库管理员保护数据库的安全性,防止未经授权访问、数据泄漏等安全问题的发生。
-
提供可视化界面:数据库管理工具一般都提供图形化用户界面,使得数据库管理员可以更直观地完成数据库管理工作。这大大降低了数据库管理员的学习成本,提高了工作效率。
-
提供多种功能:数据库管理工具有许多不同的功能,如数据分析、查询优化等。这些功能可以使得数据库管理员更好地管理数据库和优化查询性能。
在本篇学习我们使用 DataGrip 进行MySQL的程序的编写。
2.2 Mysql登录
登录方法有两种不同的格式,分别分为:本地登录、添加IP登录
2.2.1本地连接Mysql的语法:
mysql -u用户名 -p
密码
2.2.2 加IP地址连接Mysql
mysql -h IP地址 -P 3306 -u 用户名 -p
密码
2.3 Mysql退出
方式1:exit
方式2:quit
*方式3:快捷键ctrl+D(只能在Linux系统中使用)
*方式4:关闭掉窗口
三、SQL 基本语句
我们在了解SQL语句前可以先了解几个名词:
- 数据库管理系统
【MySQL】数据库管理系统(DataBase Management System,DBMS)指的是一种操作和管理数据库
的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和
完整性,用户通过数据库管理系统访问数据库中表内的数据。 - 数据库【database】
数据库就是存储数据的仓库。 在MySQL软件中,创建的可以用于存储数据的仓库! - 数据表【table】
据表(或称表)是数据库最重要的组成部分之一。数据库只是一个库或框架,数据表是其实质内容
【可以存放数据内容】。
例如在"教学管理系统"中,"教学管理"数据库包含了特定主题的几个数据表:教师表、课程表、成绩表、
学生表和班级表,用来管理教学过程中学生、教师、课程等信息。

在进行实际的SQL代码前,我们注意一下 SQL通用语法注意事项:
- SQL 对关键字的大小写不敏感
- SQL 语句可以单行或多行书写,以分号结束【重要】
- MySQL 中的注释:
单行注释:-- 注释 或 #注释内容(MySQL特有)(快捷键:ctrl+/)
多行注释:/* 注释 */(快捷键:ctrl+shift+/)
SQL 语句分类
SQL是用来存取关系数据库的语言,具有定义、操作、查询和控制关系型数据库的四方面功能。
| 分类 | 全称 | 说明 |
|---|---|---|
| DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(库、表、字段) |
| DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
| DQL | Data Query Language | 数据查询语言,用来查询数据中表的记录 |
| DCL | Data Control Language | 数据控制语言,用来创建数据库用户、控制数据库的访问权限 |
本章我们主要解决 DDL 中的语法!
3.1 DDL 数据定义语言
| 内容 | 用法 |
|---|---|
| 用来定义数据库和数据表对象 | 例如,定义数据库、表、列等 |
| 常用关键字 | 例如,创建create、修改alter、删除drop等。 |
3.1.1 数据库的创建、删除
- 创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名字 [CHARSET 字符集];
- 【IF NOT EXISTS】:此语句为:如果数据库中如果不存在该名字数据库,则创建
- 【CHARSET 字符集】:设置字符集,常见的 utf8、gbk
【】方括号的为补充语句,非必要填写,在后文如此。
- 删除数据库
DROP DATABASE [IF EXISTS] 数据库名;
- 【IF EXISTS】:此语句为:如果数据库中如果存在该名字数据库,则删除
例题:
【1】创建名为db_ziwu的数据库
【2】删除名为db_ziwu的数据库
# 创建名为db_ziwu的数据库
CREATE DATABASE db_ziwu;
# 删除名为db_ziwu的数据库
DROP DATABASE db_ziwu;
3.1.2 数据库的查看
- 查询所有数据库
SHOW DATABASES;
- 查询数据库创建语句
SHOW CREATE DATABASE 库名;
例题:
【1】查询所有的数据库
【2】查询mysql数据库的建库代码
# 查询当前所有数据库
SHOW DATABASES;
# 查询mysql数据库创库代码
SHOW DATABASE mysql;
结果:


3.1.3 使用数据库
- 使用数据库
USE 数据库名;
- 查询当前正在使用的数据库
SELECT DATABASE();
- 在操纵数据库内数据表之前,必须提前声明需要操作的数据库,此时需要
USE 数据库名- 使用
SELECT DATABASE()可以得知当前在哪个数据库工作区下。
3.2.1 字段类型
在学习创建数据表语句之前,我们应该先学习字段类型 ,在数据表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表时可以给字段设定数据类型。
使用数据类型的原则是:够用就行,并且尽量使用取值范围小的,这样可以节省更多存储空间。
My
SQL 中定义的数据字段的类型对数据库优化是非常重要的,主要分为三种类型:数值、日期/时间和字符串类型
MySQL 支持所有标准的 SQL 数值数据类型
①数值类型
数值类型辣么多,但是我们实际使用最多的是:INT、DOUBLE

②日期和时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
③字符串类型
字符类型辣么多,但是我们常用的是:VARCHAR、CHAR

char(n) 和 varchar(n)的区别:一般来说,对于长度不太固定的字符串,应该使用varchar(n)。而对于长度固定的字符串,可以使用char(n)来提高查询效率。
在MySQL中常用BLOB存储二进制类型的数据,例如:图片、PDF文档等。BLOB类型分为如下四种:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT,对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。
但是在实际情况,一般图片等部署在服务器上,只存储路径。
3.2.1 数据表创建
在操作数据表前,先要确认要在哪个数据库下进行操作。
USE 数据库名;
在创建数据表时,需要使用CREATE TABLE关键字,还要指定字段信息,语法如下:
CREATE TABLE [IF NOT EXISTS] 数据表名();
说明:
- 常见类型:int、vatchar(255);
- PRIMARY KEY,主键,使用逐渐修饰的字段必须保证唯一非空
- AUTO_INCREMENT,自动增长,通常为int型的值自动增长(从1开始)
- 【判断语句】内可以填写IF NOT EXISTS 保证代码稳定性
练习-使用创建数据表命令来完成:
(1)创建一个新的查询脚本和新数据库班级db_user,并在该库中完成创建数据表的操作;
(2)创建字段时,不添加任何[约束]条件;
(3)新建一个用户表user,字段有编号、用户名、昵称;
(4)思考:若再使用相同命令创建一个已有的数据表:user,能成功吗?
-- (1)创建一个新的查询脚本和新数据库`班级`db_user,并在该库中完成创建数据表的操作;
CREATE DATABASE IF NOT EXISTS db_user CHARSET utf8;
USE db_user;-- (2)创建字段时,不添加任何[约束]条件;
-- (3)新建一个用户表user,字段有编号、用户名、昵称;
CREATE TABLE IF NOT EXISTS user(id INT,user_name VARCHAR(20),`name` VARCHAR(20)
);-- (4)思考:若再使用相同命令创建一个已有的数据表:user,能成功吗?
-- 否,会报错,因此要加入条件判断是否存在以保证程序的稳定性[IF NOT EXISTS]
3.2.2 查看数据表
- 查询当前数据库中所有表
SHOW TABLES;
- 查询表结构
DESC 表名;
- 查询指定表的创建表语句
SHOW CREATE TABLE 表名;
例如,使用命令查看数据表:
(1)在上述班级db_user数据库中查看有哪些数据表;
(2)查看创建数据表user的创建语句;
(3)查看数据表user的表结构。
# (1)在上述`班级`db_user数据库中查看有哪些数据表;
USE db_user;
SHOW TABLES;
# (2)查看创建数据表user的创建语句;
SHOW CREATE TABLE user;
# (3)查看数据表user的表结构。
DESC user;
3.2.3 删除数据表
- 删除数据表
DROP TABLE 数据表名;
- 说明:看到drop关键字,要清楚是使用SQL语句分类的DDL。
- 特别注意:在删除数据表前,先要选择使用哪个数据库,以免删除不同数据库的同名表!
例如,使用命令删除数据表:
(1)在班级db_user数据库中,继续新建一个只有姓名字段的学生表,然后查看库中有哪些数据表;
(2)删除学生表后,再查看有哪些数据表。
# (1)在`班级`db_user数据库中,继续新建一个只有姓名字段的学生表,然后查看库中有哪些数据表;
USE db_user;
CREATE TABLE student(`name` VARCHAR(20)
);
SHOW TABLES;
# (2)删除学生表后,再查看有哪些数据表。
DROP TABLE student;
SHOW TABLES;
3.2.4修改数据表
- 添加字段
ALTER TABLE 表名 ADD 字段名 字段类型 [FIRST]
修改字段中的约束:
FIRST:把新添加字段放在首位
AFTER其他字段名称:把新添加字段放在指定字段的后
提示:约束跟在所有字段后,可以写入FIRST,将字段添加至开头.
例如,使用命令完成:
(1)创建一个新数据库班级db_user2,设定默认编码为utf8,并在该库中完成修改数据表的操作;
(2)添加判断语句,新建一张用户表table_user,有用户名、密码这2个字段;
(3)给用户表添加一列信息展示information字段,长度为140;
(4)思考1:在用户表的最开始处,添加一列最初名称first_name,该怎么做呢?
(5)思考2:在用户表的密码字段后,添加一列年龄age字段,该怎么做?
# (1)创建一个新数据库`班级`db_user2,设定默认编码为utf8,并在该库中完成修改数据表的操作;
CREATE DATABASE IF NOT EXISTS db_user2 CHARSET utf8;
# (2)添加判断语句,新建一张用户表table_user,有用户名、密码这2个字段;
USE db_user2;
CREATE TABLE IF NOT EXISTS table_user(`user_name` VARCHAR(20),`password` VARCHAR(20)
);
# (3)给用户表添加一列信息展示information字段,长度为140;
ALTER TABLE table_user ADD information VARCHAR(140);
# (4)思考1:在用户表的最开始处,添加一列最初名称first_name,该怎么做呢?
ALTER TABLE table_user ADD first_name VARCHAR(20) FIRST;
# (5)思考2:在用户表的密码字段后,添加一列年龄age字段,该怎么做?
ALTER TABLE table_user ADD age INT AFTER `password`;
DESC table_user;

- 修改字段类型
ALTER TABLE 表名 MODIFY 字段名 新字段类型 [对字段的约束];
例如,使用命令完成:
(1)给上述用户表的信息字段类型修改为char,长度修改为60;
(2)将用户名字段修改长度为16,且添加非空约束。
非空约束可写成
not null,表示不能为空值,必须进行设定数据。
# (1)给用户表的信息字段类型修改为char,长度修改为60;
ALTER TABLE table_user MODIFY information char(60);
# (2)将用户名字段修改长度为16,且添加非空约束。
ALTER TABLE table_user MODIFY user_name VARCHAR(16) NOT NULL;

- 修改字段名
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型 [约束];
例如,使用命令完成:
(1)把用户表的用户名修改为name,字符串类型、长度为18;
(2)把用户表的信息字段列名修改为info,类型修改为varchar,长度为100。
# (1)把用户表的用户名修改为name,字符串类型、长度为18;
ALTER TABLE table_user CHANGE user_name name VARCHAR(18);
# (2)把用户表的信息字段列名修改为info,类型修改为varchar,长度为100。
ALTER TABLE table_user CHANGE information info VARCHAR(100);

CHANGE保持字段名一致可以替代MODIFY进行修改字段类型操作。
3.1.5 数据表操作-删除
删除字段:
ALTER TABLE 表名 DROP 字段名;
例如,使用命令完成:
(1)删除上述用户表中的年龄这一列;
(2)使用命令查看表结构。
# (1)删除上述用户表中的年龄这一列;
ALTER TABLE table_user DROP age;
# (2)使用命令查看表结构。
DESC table_user;
3.1.6 数据表操作-修改表名
- 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
RENAME TABLE 表名 TO 新表名
例如,使用命令完成:
(1)把用户表的表名更改为table_user;
(2)使用命令查看库中所有数据表信息。
# (1)把用户表的表名更改为tb_user;
RENAME TABLE table_user TO tb_user;
# (2)使用命令查看库中所有数据表信息。
SHOW TABLES;
在
DATEGIRP中,较为规范化的写法是RENAME TABLE 表名 TO 新表名
3.1.7 数据表操作-删除
- 删除表
DROP TABLE[IF EXISTS] 表名;
说明:
看到drop关键字,要清楚是使用SQL语句分类的DDL。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
