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. 体验一个前端视图层的mvvm的框架Knockoutjs(双向绑定,模板..)..解放您的双手,不再处理那么多的dom操作..快速实现视图层数据与UI的交互处理

    笔者之前对于类似前端展示的,可能都是自己开发js对象,集合外加dom事件进行处理..  近期看到相关资料,了解了Knockoutjs这个框架,下面来段代码: <script type=" ...

  2. 买不到的数目【第四届蓝桥杯省赛C++A组,第四届蓝桥杯省赛JAVAC组】

    买不到的数目 小明开了一家糖果店. 他别出心裁:把水果糖包成4颗一包和7颗一包的两种. 糖果不能拆包卖. 小朋友来买糖的时候,他就用这两种包装来组合. 当然有些糖果数目是无法组合出来的,比如要买 10 ...

  3. 网络流棋盘模型 | P3355 骑士共存问题 P4304 [TJOI2013]攻击装置

    题面(骑士共存问题) 在一个 \(n \times n\) 个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘上某些方格设置了障碍,骑士不得进入. 对于给定的 \(n \times n ...

  4. 突如其来的&amp;quot;中断异常&amp;quot;,我(Java)该如何处理?

    # **一.何为异常?** ## 1.生活中的实例 生活中存在许多不正常: 上班路上自行车掉链子 上厕所手机掉马桶 下班回家钥匙丢失 ....... 2.程序中的实例 我们的代码中也许存在许多纰漏,导 ...

  5. Quartz 使用教程

    首先说说,为什么要写这篇文章: Quartz 的 v2.3.2 版本改动比较大,目前网上的资料都是旧版本,很缺乏相关资料 很多资料讲解非常不全面,例如 Quartz Listener 的介绍和使用基本 ...

  6. MySQL 如何实现数据更新

    一般在更新时会遇到以下场景:1.所有字段全部更新:2.根据条件更新字段中的某部分内容:3.根据不同的条件更新不同的值,以下是几种场景中常用的update方法. 一.方法分类 二.具体用法 (1)根据条 ...

  7. 一次代码重构 JavaScript 图连通性判定

    简介 说重构其实就是整理了代码,第一次自己手写写的很丑,然后看了书上写的,虽然和书上的思路不同但是整理后几乎一样漂亮 效果 整体代码如下 class Node { AdjNodes = new Set ...

  8. P25_wxss - rpx单位

    模板样式 - rpx 什么是 rpx 尺寸单位 rpx(responsive pixel)是微信小程序独有的,用来解决屏适配的尺寸单位. rpx 的实现原理 rpx 的实现原理非常简单:鉴于不同设备屏 ...

  9. 学习Java Day15

    今天学习了自定义类

  10. 什么是Http? http和https的区别

    一.HTTP HTTP (HyperText Transfer Protocol),即超文本运输协议,是实现网络通信的一种规范 在计算机和网络世界有,存在不同的协议,如广播协议.寻址协议.路由协议等等 ...