MySQL-4-DDL
DDL:数据定义语言
创建create
创建库
- 语法:
create database 【if not exists】库名
# 创建库
CREATE DATABASE IF NOT EXISTS books
## 通用写法
DROP DATABASE IF EXISTS 旧库名
CREATE DATABASE 新库名
创建表
- 语法:
/*
create table 表名(
列名 列的类型【(长度)约束】,
列名 列的类型【(长度)约束】,
...
列名 列的类型【(长度)约束】 # 最有一个不加逗号
)
*/
# 如
CREATE TABLE book(
id INT,
bName VARCHAR(20)
);
# 通用写法
DROP TABLE IF EXISTS 旧表名
CREATE TABLE 新表名();
修改alter
修改库
# 一般不建议更改库
# 更改库的字符集
ALTER DATABASE books CHARACTER SET utf8;
修改表
核心语法: alter table 表名 add|drop|modify|change column 列名
- 修改列名
- 修改列的类型或约束
- 添加新列
- 删除列
- 修改表名
# 修改列名
ALTER TABLE book CHANGE COLUMN bName bname VARCHAR(10)
# 修改列类型
ALTER TABLE book MODIFY COLUMN id VARCHAR(3)
# 修改列约束
# 添加主键
ALTER TAELE book MODIFY COLUMN id INT PRIMARY REY;
ALTER TABLE book ADD PRIMARY KEY(id);
# 添加外键 为主表stu的id添加外键约束,外键是从表major中的majorid
ALTER TABLE stu ADD CONSTRAINT fk_stu_major FOREIGN KEY(majorid)REFERENCES major(id);
# 添加新列
ALTER TABLE book ADD COLUMN age INT;
# 删除列
ALTER TABLE book DROP COLUMN age;
# 修改表名
删除drop
删除库
# 删除库
DROP DATABASE IF EXISTS books
删除表
DROP TABLE IF EXISTS books;
复制表
- 仅仅复制表的结构
- 复制表的结构和数据
# 仅仅复制表的结构
CREATE TABLE copy1 LIKE books;
# 复制表的结构和数据
CREATE TABLE copy2 SELECT * FROM books
# 还可以只复制 部分数据 加晒选条件即可
数据库中常见数据类型
数值型-整型/浮点型
整型
整型类型 | 字节 | 整型类型 | 字节 |
---|---|---|---|
Tinyint |
1 | Smallint |
2 |
Smallint |
3 | Int/integer |
4 |
Bigint |
4 |
- 特点:
①如果不设置无符号还是有符号,默认是有符号,如果想设置无符号,需要添加unsigned
关键字
②如果插入的数值超出了整型的范围,会报out of range
异常,并且插入临界值
③如果不设置长度,会有默认的长度]
④长度代表了显示的最大宽度,如果不够会用0
在左边填充,但必须搭配zerofill
使用!
浮点型
+ 分类:
1.浮点型
float(M,D)
double(M,D)
2.定点型
dec(M,D)
decimal(M,D)
浮点类型 | 字节 | 浮点类型 | 字节 |
---|---|---|---|
float |
4 | double |
8 |
定点型 | 字节 |
---|---|
dec(M,D),decimal(M,D) |
M+2 |
- M:整数部位+小数部位
- D:小数部位
- 特点:
①如果超过范围,则插入临界值
②M和D都可以省略
③如果是decima1
,则M默认为10,D默认为0;如果是float
和double
,则会根据插入的数值的精度来决定精度
④定点型的精确度较高
字符型-短型/长型
/*
较短的文本:
char
varchar
较长的文本:
text
blob(较大的二进制)
*/
日期型
/*
分类:
date只保存日期
time只保存时间
year只保存年
datetime保存日期+时间
timestamp保存日期+时间
特点:
字节范围时区等的影响
字节 范围 时区影响
datetime 8 1000-9999 不受
timestamp 4 1970-2038 受
*/
常见约束
NOT NULL:
非空,用于保证该字段的值不能为空DEFAULT:
默认,用于保证该字段有默认值PRIMARY KEY:
主键,用于保证该字段的值具有唯一性,并且非空UNIQUE:
唯一,用于保证该字段的值具有唯一性,可以为空CHECK:
检查约束【mysq1中不支持】FOREIGN KEY:
外键,用于限制两个表的关系
列级约束
CREATE TABLE IF NOT EXISTS stu(
id INT PRIMARY KEY, # 主键
sName VARCHAR(20) NOT NULL, # 非空
gender CHAR CHECK(gender='男' OR gender='女'), #检查
seat INT UNIQUE, # 唯一
age INT DEFAULT 18, # 默认
majorId INT REFERENCES major(id) #外键
);
CREATE TABLE major(
id INT PRIMARY KEY,
mName VARCHAR(20) NOT NULL
)
表级约束
CREATE TABLE stu(
id INT,
sName VARCHAR(20),
gender CHAR,
seat INT,
majorId INT,
# CONSTRAINT 别名 可省略
CONSTRAINT Pk PRIMARY KEY(id), #外键
CONSTRAINT uq UNIQUE(seat), #唯一
CONSTRAINT fk_stu_major FOREIGN KEY(majorId) REFERENCES major(id) # 外键
);
主键和唯一区别
唯一性 | 是否为空 | 一个表中是否有多个 | 是否允许组合 | |
---|---|---|---|---|
主键 | √ | × | 至多1个 | √,不推荐 |
唯一 | √ | √ | 可以多个 | √,不推荐 |
外键
- 要求在从表设置外键关系
- 从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
- 主表的关联列必须是一个key(一般是主键或唯一)
- 插入数据时,先插入主表,再插入从表
- 删除数据时,先删除从表,再删除主表
标识列即自增长
id INT PRIMARY KEY AUTO_INCREMENT, #设置id是自增长类型
/*
1、标识列不一定要和主键搭配,但要求是一个key
2、一个表可以有至多一个标识列
3、标识列的类型只能是数值型
4、标识列可以通过 SET auto_increment_increment = 3;设置步长
*/
MySQL-4-DDL的更多相关文章
- mysql online ddl
大家知道,互联网业务是典型的OLTP(online transaction process)应用,这种应用访问数据库的特点是大量的短事务高并发运行.因此任何限制高并发的动作都是不可接受的,甚至 ...
- [资料收集]MySQL在线DDL工具pt-online-schema-change
MySQL在线DDL工具pt-online-schema-change pt-online-schema-change使用说明(未完待续) 官网
- 关于MySQL Online DDL
1. Online DDL 在 MySQL 5.1 (带InnoDB Plugin)和5.5中,有个新特性叫 Fast Index Creation(下称 FIC),就是在添加或者删除二级索引的时候, ...
- MySQL在线DDL gh-ost 使用说明
背景: 作为一个DBA,大表的DDL的变更大部分都是使用Percona的pt-online-schema-change,本文说明下另一种工具gh-ost的使用:不依赖于触发器,是因为他是通过模拟从库, ...
- MySQL使用DDL语句创建表
一.使用DDL语句创建表 DDL语言全面数据定义语言(Data Define Language) 主要的DDL动词: CREATE(创建).DROP(删除).ALTER(修改) TRUNCATE(截断 ...
- 详谈 MySQL Online DDL
作为一名DBA,对数据库进行DDL操作非常多,如添加索引,添加字段等等.对于MySQL数据库,DDL支持的并不是很好,一不留心就导致了全表被锁,经常搞得刚入门小伙伴很郁闷又无辜,不是说MySQL支持O ...
- MySQL Online DDL导致全局锁表案例分析
MySQL Online DDL导致全局锁表案例分析 我这边遇到了什么问题? 线上给某个表执行新增索引SQL, 然后整个数据CPU打到100%, 连接数暴增到极限, 最后导致所有访问数据库的应用都奔溃 ...
- MySQL在线DDL工具 gh-ost
一.简介 gh-ost基于 golang 语言,是 github 开源的一个 DDL 工具,是 GitHub's Online Schema Transmogrifier/Transfigurator ...
- 【科普】MySQL中DDL操作背后的并发原理
一. 简介 DQL:指数据库中的查询(select)操作. DML:指数据库中的插入(insert).更新(update).删除(delete)等行数据变更操作. DDL:指数据库中加列(add co ...
- MySQL online ddl原理
背景 dba的日常工作肯定有一项是ddl变更,ddl变更会锁表,这个可以说是dba心中永远的痛,特别是执行ddl变更,导致库上大量线程处于“Waiting for meta data lock”状态的 ...
随机推荐
- 原生微信小程序里类似于计算属性写法
可直接在wxml文件里直接写入直接调用.变量只支持var命名,不支持let const </view> <view class="wx_bgc" ...
- 论文阅读 Continuous-Time Dynamic Network Embeddings
1 Continuous-Time Dynamic Network Embeddings Abstract 描述一种将时间信息纳入网络嵌入的通用框架,该框架提出了从CTDG中学习时间相关嵌入 Co ...
- 深入浅出聊Taier—大数据分布式可视化DAG任务调度系统
导读: 上周,袋鼠云数栈全新技术开源规划--DTMO(DTstack Meetup Online)的第一场直播圆满完成.袋鼠云数栈大数据开发专家.Taier项目主导人偷天为大家带来了<Taier ...
- 如何在代码层面提供CPU分支预测效率
关于分支预测的基本概念和详细算法可以参考我之前写的知乎回答,基本概念不再阐述了~~ https://www.zhihu.com/question/486239354/answer/2410692045 ...
- 记一次sql注入的解决方案
点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 本文在公众号文章已同步,还有各种一线大厂面试原题.我的学习系列笔记. 今天业务提了个模糊查询,一听就知道这种问题有坑,肯定涉及到sql注入, ...
- 安装黑苹果 、 Mac OS虚拟机
Mac OS 虚拟机 所需文件地址 unlocker 为VMware 新增Apple Mac OS X操作系统 Install_macOS_Monterey_12.0.1_21A559.iso 提取码 ...
- 攻防世界-MISC:Erik-Baleog-and-Olaf
这是攻防世界MISC高手进阶区的题目,题目如下 点击下载附件一,解压后得到一个文件,不知道是什么格式,用010editor打开,发现其为png文件,就把它的后缀改为png,然后用stegslove打开 ...
- XCTF练习题---WEB---baby_web
XCTF练习题---WEB---baby_web flag:flag{very_baby_web} 解题步骤: 1.观察题目,打开场景 2.观察题目内容,想想初始页面是哪个,再看看URL,尝试输入in ...
- Jenkins 自动化部署详解
一.背景 以前在发布系统的时候,总是需要经过本地合并代码 >编译 >发布到本地 >拷贝代码到远程服务器 >停止掉服务器上的应用池 >将要发布的文件替换原文件 >重启 ...
- [AcWing 796] 子矩阵的和
点击查看代码 #include<iostream> using namespace std; const int N = 1e3 + 10; int a[N][N], s[N][N]; i ...