Mysql数据库基础系列

软件下载地址
提取码:7v7u
数据下载地址
提取码:e6p9
mysql数据库基础第一章:(一)数据库基本概念
mysql数据库基础第一章:(二)mysql环境搭建
mysql数据库基础第二章:(一)基础查询
mysql数据库基础第二章:(二)条件查询
mysql数据库基础第二章:(三)排序查询
mysql数据库基础第二章:(四)常见函数
mysql数据库基础第二章:(五)分组查询
mysql数据库基础第二章:(六)连接查询
mysql数据库基础第二章:(七)子查询
mysql数据库基础第二章:(八)子查询经典案例
mysql数据库基础第二章:(九)分页查询
mysql数据库基础第二章:(十)连接查询
mysql数据库基础第三章:DML语言
mysql数据库基础第四章:DDL(数据定义语言):库表的管理、数据类型与约束条件
mysql数据库基础第五章:(一)事务
mysql数据库基础第五章:(二)视图
mysql数据库基础第六章:变量、存储过程与函数
mysql数据库基础第七章:流程控制结构
mysql数据库基础第八章:窗口函数和公用表达式(CTE)



1.DDL语言基本概述

DDL:数据定义语言
主要包括以下几部分内容:

  • 库的管理
  • 表的管理
  • 数据类型
  • 约束
    下面我们先介绍库的管理

2. 库的管理

库的管理包含:库的创建,更改,删除
使用的关键字: creater alter drop. 注意与数据操作语言区分
基本语法:

create|alter|drop database

2.1 库的创建

创建books为例

create database books if not exists books;

因为当存在已有的数据库时,我们不能在新建相同名字的数据库,否则会报错,因此在创建新的库时加上if条件表达式

2.2 库的修改

修改名字

rename database books to new_book;

修改字符集

alter database books character set utf-8

2.3库的删除

由于不能删除不存在的库,因此加上下列条件表达式

drop database books if exists books

3.表的管理

表的管理和库的管理一样,主要包括:创建,修改,删除

3.1 表的创建

create tables 表名(
列名 列的类型 长度 约束,
...
)

创建book表

CREATE TABLE book(
id INT,
bname VARCHAR(20),
price DOUBLE,
authorID INT,
publish_date DATETIME
);

创建author表

CREATE TABLE author(
id INT,
au_name VARCHAR(20),
nation VARCHAR(20)
);

3.2表的修改

基本语法:

alter table 表名 change/drop/modify/add/rename column 列名 类型

1.修改列名:change

ALTER TABLE book CHANGE COLUMN publish_date pubdate DATETIME;

2.修改列的类型和约束

ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP;

3.增加列

ALTER TABLE book ADD COLUMN annual DOUBLE;

4.删除列

ALTER TABLE book DROP COLUMN annual;

5.修改名

ALTER TABLE author RENAME COLUMN TO book_author

3.3 删除表

drop TABLE author if exists author

3.4 表的复制

首先将相关数据导入到author表中

INSERT INTO author VALUES
(1,'村上春树','日本'),
(2,'莫言','中国'),
(3,'冯唐','中国'),
(4,'金庸','中国');

此时author表中包含了上述信息,如果我们需要新建一个表,只需要author表的结构,不需要内容,则:
1.只复制表的结构:

create table copy like author;

2.复制表的内容和结构
此时我们不仅需要复制表的结构,还需要其内容,此时我们需要将author表的内容也复制

create table copy2
select * from author;

3.只复制某些列

create table copy3
select id,au_name from author
where nation = '中国';

4.仅仅复制某些字段的结构
此时我们不需要内容,因此可以自己添加一个永远为错的条件

create table copy4
select id,au_name from author
where 1=0

4.数据类型

常见的数据类型主要包括:数值型、字符型、日期型。

4.1数值型

数值型包含:整数和小数

4.1.1整数型

tinyint、smallint、mediumint、int/integer、bigint
特点:
① 如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned关键字
② 如果插入的数值超出了整型的范围,会报out of range异常,并且插入临界值
③ 如果不设置长度,会有默认的长度
长度代表了显示的最大宽度,如果不够会用0在左边填充,但必须搭配zerofill使用!

#1.如何设置无符号和有符号

CREATE TABLE tab_int(
t1 INT(7) ZEROFILL,
t2 INT(7) unsigned
)
insert into tab_int values(-123,-123)

t1是有符号的,t2是无符号的.因此t1会返回-123,t2会返回0

4.1.2 小数

分类:
1.浮点型
float(M,D)
double(M,D)
2.定点型
dec(M,D)
decimal(M,D)
特点:


M:整数部位+小数部位的个数
D:小数部位的个数
如果超过范围,则返回临界值


M和D都可以省略
如果是decimal,则M默认为10,D默认为0
如果是float和double,则会根据插入的数值的精度来决定精度

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

DROP TABLE tab_float;
CREATE TABLE tab_float(
f1 FLOAT(5,2),
f2 DOUBLE(5,2),
f3 DECIMAL
);
SELECT * FROM tab_float;
DESC tab_float; INSERT INTO tab_float VALUES(123.456,123.456,123.456);

上述结果将为: f1:123.46 f2:123.46 f3:123

4.2字符型

较短的文本:
char
varchar
其他:
binary和varbinary用于保存较短的二进制
enum用于保存枚举
set用于保存集合
较长的文本:
text
blob(较大的二进制)
CREATE TABLE tab_char(
c1 ENUM('a','b','c') ); INSERT INTO tab_char VALUES('a');
INSERT INTO tab_char VALUES('b');
INSERT INTO tab_char VALUES('c');
INSERT INTO tab_char VALUES('m');
INSERT INTO tab_char VALUES('A');

上述m不在枚举的范围内,返回空值

CREATE TABLE tab_set(

	s1 SET('a','b','c','d')

);
INSERT INTO tab_set VALUES('a');
INSERT INTO tab_set VALUES('A,B');
INSERT INTO tab_set VALUES('a,c,d');
INSERT INTO tab_set VALUES('a,c,d,e');

上述第三条和第四条返回相同的结果,因为e不在集合内。

4.3日期型

分类:
date保存日期
time 只保存时间
year只保存年

datetime保存日期+时间
timestamp保存日期+时间

特点:

                字节					范围					是否受时区影响
datetime 8 1000——9999 不受
timestamp 4 1970-2038 受

CREATE TABLE tab_date(
t1 DATETIME,
t2 TIMESTAMP ); INSERT INTO tab_date VALUES(NOW(),NOW());
SET time_zone='+9:00';#设置时区为东九区
SELECT * FROM tab_date;

当设置时区为东九区后,t2的时间会相应的加一个小时,t1的时间不变

5.约束条件

添加约束条件主要是用于限制表中的数据,保证表中的数据的准确和可靠性

分类:六大约束
NOT NULL:非空,用于保证该字段的值不能为空
比如学号等
DEFAULT:默认,用于保证该字段有默认值
比如性别
PRIMARY KEY:主键,用于保证该字段的值具有唯一性,并且非空
比如学号、员工编号等
UNIQUE:唯一,用于保证该字段的值具有唯一性,可以为空
CHECK:检查约束【mysql中不支持】
FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值
在从表添加外键约束,用于引用主表中某列的值

可以在创建表和修改表时设置约束条件
约束的添加分类:

列级约束:
六大约束语法上都支持,但外键约束没有效果 表级约束: 除了非空、默认,其他的都支持
  • 基本语法:

CREATE TABLE 表名(
字段名 字段类型 列级约束,
字段名 字段类型,
表级约束
)
CREATE DATABASE students;

5.1列级约束

只支持:默认、非空、主键、唯一
创建students表

CREATE DATABASE students;
USE students;
DROP TABLE stuinfo;
CREATE TABLE stuinfo(
id INT PRIMARY KEY,#主键
stuName VARCHAR(20) NOT NULL UNIQUE,#非空
gender CHAR(1) CHECK(gender='男' OR gender ='女'),#检查
seat INT UNIQUE,#唯一
age INT DEFAULT 18,#默认约束
majorId INT REFERENCES major(id)#外键 );

创建major表

CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARCHAR(20)
);

#查看stuinfo中的所有索引,包括主键、外键、唯一

SHOW INDEX FROM stuinfo;

5.2添加表级约束

语法:在各个字段的最下面
【constraint 约束名】 约束类型(字段名)
同样的创建stuinfo表

DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
id INT,
stuname VARCHAR(20),
gender CHAR(1),
seat INT,
age INT,
majorid INT, CONSTRAINT pk PRIMARY KEY(id),#主键
CONSTRAINT uq UNIQUE(seat),#唯一键
CONSTRAINT ck CHECK(gender ='男' OR gender = '女'),#检查
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外键 );

DESC stuinfo;

SHOW INDEX FROM stuinfo;

上述两种方法都有自己的优缺点,列级约束不支持外键,我们在创建表时可以综合两种方法,通用代码如下。

CREATE TABLE IF NOT EXISTS stuinfo(
id INT PRIMARY KEY,
stuname VARCHAR(20),
sex CHAR(1),
age INT DEFAULT 18,
seat INT UNIQUE,
majorid INT,
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) );

5.3修改表时添加约束

有时我们需要对现有表进行约束的添加,此时需要在修改表时添加约束。首先创建没有约束条件的表

DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
id INT,
stuname VARCHAR(20),
gender CHAR(1),
seat INT,
age INT,
majorid INT
);

DESC stuinfo;

#1.添加非空约束

ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20)  NOT NULL;

#2.添加默认约束

ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;

#3.添加主键
#①列级约束

ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;

#②表级约束

ALTER TABLE stuinfo ADD PRIMARY KEY(id);

#4.添加唯一

#①列级约束

ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;

#②表级约束

ALTER TABLE stuinfo ADD UNIQUE(seat);

#5.添加外键

ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id);

Mysql数据库基础第四章DDL(数据定义语言):库表的管理、数据类型与约束条件的更多相关文章

  1. MySQL数据库基础(3)DDL和DML

    一.使用DDL定义数据库和表结构 结构化查询语言:(Structured Query Language,SQL)是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,专用于存取数据以及查询.更新和 ...

  2. 第4章 DDL数据定义

    第4章 DDL数据定义 4.1 创建数据库 1)创建一个数据库,数据库在HDFS上的默认存储路径是/user/hive/warehouse/*.db. hive (default)> creat ...

  3. mysql DDL数据定义语言

    DDL数据定义语言 本节涉及MySQL关键字:create.alter(rename,add,chang,modify,drop).drop.delete.truncate等. -- 创建表:-- 数 ...

  4. Hive 官方手册翻译 -- Hive DDL(数据定义语言)

    Hive DDL(数据定义语言) Confluence Administrator创建, Janaki Lahorani修改于 2018年9月19日 原文链接 https://cwiki.apache ...

  5. DDL数据定义语言

    DDL数据定义语言 (一)概述 DDL(Data Definition Language):数据定义语言,用来定义数据库对象,库.表.列等:创建.删除.修改 库,表结构.主要分为操作数据库的DDL和操 ...

  6. sql 两大类 DDL数据定义语言 和DCL数据控制语言

    SQL分为五大类: DDL:数据定义语言   DCL:数据控制语言     DML:数据的操纵语言  DTL:数据事务语言  DQL:数据查询语言. DDL (date definition lang ...

  7. oracle学习笔记(三) DCL 数据控制语言与 DDL 数据定义语言

    DCL 数据控制语言 Data control language 之前说过的授权和收权利语句 grant, revoke DDL 数据定义语言 Data define language create ...

  8. 【MySQL】DDL数据定义语言的基本用法create、drop和alter(增删改)

    DDL 的基础语法 文章目录 DDL 的基础语法 对数据库进行定义 对数据表进行定义 创建表结构(数据表) 设计工具 修改表结构 小结 参考资料 简单复习一波 SQL必知必会 DDL 的英文全称是 D ...

  9. Oracle language types(语言种类) 表的相关操作 DDL数据定义语言

    数据定义语言 Data Definition Language Statements(DDL)数据操纵语言 Data Manipulation Language(DML) Statements事务控制 ...

  10. MySQL数据库基础(4)SELECT 数据查询

    目录 一.SELECT 选择列表 二.MySQL 运算符 三.定制显示查询结果 四.模糊查询 一.SELECT 选择列表 1.语法 SELECT <COLUMN1, COLUMN2, COLUM ...

随机推荐

  1. 一篇文章带你了解设计模式原理——UML图和软件设计原则

    一篇文章带你了解设计模式原理--UML图和软件设计原则 我们在学习过程中可能并不会关心设计模式,但一旦牵扯到项目和面试,设计模式就成了我们的短板 这篇文章并不会讲到二十三种设计模式,但是会讲解设计模式 ...

  2. 2021 & 2022年终回顾:山河无恙,烟火寻常

    前言 又到了一年一度年终回顾的时候了,回想起去年年底圣诞节的时候由于忙着参加黑客松大赛,一下子就进入了新的一年,失去了年终回顾的动力,所以今年提前两个月开始进行回顾,这样的话今年最后一天就可以顺利发文 ...

  3. 使用C语言编程的7个步骤

    版权声明 本文作者:main工作室 本文链接:https://www.cnblogs.com/main-studio/p/17034891.html 版权声明:本文为 博客园 博主「main工作室」的 ...

  4. Pollard_Rho算法

    数论 Pollard_Rho算法 1.1作用 Pollard_Rho算法解决大数的质因数分解.又是一个玄学算法.. 2.1 试除法 我们的任务是对一个数字n进行质因数分解.可以发现,n的因数将会对称的 ...

  5. linux 基础(2) 文件权限及其修改

    文件的权限属性 在 linux 中,每个文件都有唯一的"所属者"(user)和"所属群组"(group).owner 和 group 都对文件有特殊的权限 输入 ...

  6. 迷宫机器人最短路径使用tkinter绘制

    起因 我想要写一个玩家和机器对战的迷宫游戏.这个项目我没有写完,我实现了最短机器人路径并绘制在tkinter上,以及玩家移动的功能.更多的关于GUI的设计太花时间了我没有写完. 算法介绍 我在写机器人 ...

  7. Grafana 系列文章(一):基于 Grafana 的全栈可观察性 Demo

    ️Reference: https://github.com/grafana/intro-to-mlt 这是关于 Grafana 中可观察性的三个支柱的一系列演讲的配套资源库. 它以一个自我封闭的 D ...

  8. Unity_UIWidgets - 组件Scaffold

    UIWidgets - 组件Scaffold 各位兄弟姐妹,想通过Unity来开发UIWidgets的么,想通过UIWi的gets..来开发手机APP么??想么想么,哈哈哈哈哈哈哈哈. 好了,小黑不唠 ...

  9. 【随笔记】SiliconLabs Android aar 库使用

    一.导入库文件 1. 拷贝以下两个文件到工程的 libs 目录下 ble_mesh-android_api_high-release.aar ble_mesh-android_api_low-rele ...

  10. 使用pycharm打开sqlite的问题

    目录 问题:有同学在sqlite数据库文件执行数据库迁移完成前,点开了他,导致sqlite数据库被pycharm当成文本文件打开了,并且不会改了. 其实sqlite文件和电脑中的其他文件(xx.mp4 ...