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;如果是floatdouble,则会根据插入的数值的精度来决定精度

    ④定点型的精确度较高

字符型-短型/长型

/*
较短的文本:
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的更多相关文章

  1. mysql online ddl

        大家知道,互联网业务是典型的OLTP(online transaction process)应用,这种应用访问数据库的特点是大量的短事务高并发运行.因此任何限制高并发的动作都是不可接受的,甚至 ...

  2. [资料收集]MySQL在线DDL工具pt-online-schema-change

    MySQL在线DDL工具pt-online-schema-change pt-online-schema-change使用说明(未完待续) 官网

  3. 关于MySQL Online DDL

    1. Online DDL 在 MySQL 5.1 (带InnoDB Plugin)和5.5中,有个新特性叫 Fast Index Creation(下称 FIC),就是在添加或者删除二级索引的时候, ...

  4. MySQL在线DDL gh-ost 使用说明

    背景: 作为一个DBA,大表的DDL的变更大部分都是使用Percona的pt-online-schema-change,本文说明下另一种工具gh-ost的使用:不依赖于触发器,是因为他是通过模拟从库, ...

  5. MySQL使用DDL语句创建表

    一.使用DDL语句创建表 DDL语言全面数据定义语言(Data Define Language) 主要的DDL动词: CREATE(创建).DROP(删除).ALTER(修改) TRUNCATE(截断 ...

  6. 详谈 MySQL Online DDL

    作为一名DBA,对数据库进行DDL操作非常多,如添加索引,添加字段等等.对于MySQL数据库,DDL支持的并不是很好,一不留心就导致了全表被锁,经常搞得刚入门小伙伴很郁闷又无辜,不是说MySQL支持O ...

  7. MySQL Online DDL导致全局锁表案例分析

    MySQL Online DDL导致全局锁表案例分析 我这边遇到了什么问题? 线上给某个表执行新增索引SQL, 然后整个数据CPU打到100%, 连接数暴增到极限, 最后导致所有访问数据库的应用都奔溃 ...

  8. MySQL在线DDL工具 gh-ost

    一.简介 gh-ost基于 golang 语言,是 github 开源的一个 DDL 工具,是 GitHub's Online Schema Transmogrifier/Transfigurator ...

  9. 【科普】MySQL中DDL操作背后的并发原理

    一. 简介 DQL:指数据库中的查询(select)操作. DML:指数据库中的插入(insert).更新(update).删除(delete)等行数据变更操作. DDL:指数据库中加列(add co ...

  10. MySQL online ddl原理

    背景 dba的日常工作肯定有一项是ddl变更,ddl变更会锁表,这个可以说是dba心中永远的痛,特别是执行ddl变更,导致库上大量线程处于“Waiting for meta data lock”状态的 ...

随机推荐

  1. 安卓记账本开发学习day3

    今天发现了新的错误 首先是AS警告杀毒系统对编译运行有影响,我目前只开了火绒,所以只需要在火绒里将SDK文件夹设置为信任即可 第二个错是在编译测试运行的时候,虚拟机能够正常打开,也launch suc ...

  2. JavaScript学习总结3-函数

    JS如果没能完return,等函数完全执行完毕也会返回NaN(undefined) 因为JS高度自由性,不像C.C++.Java等,函数传参有较严格的限制,JS可以完函数内传任意数量个参数,也可以不传 ...

  3. 如何调试手机上的网页以及基于Cordova/Phonegap的Hybrid应用

    开发手机页面以及Hybird应用时,调试曾经是个老大难问题,不时需要用写log等方式曲线救国. 实际上,Chrome和Android(需要4.4+版本)已经提供了不亚于电脑版本的调试功能,只是看样子还 ...

  4. 【GPLT】 紧急救援(c++)

    题目: 本题使用Dijkstra算法,但在模板上进行了一定的扩展,是一道不错的最短路题目. AC代码: 1 #include<iostream> 2 #include<cmath&g ...

  5. HashMap和Hashtable以及ConcurrentHashMap的区别

    ​ HashMap和Hashtable的区别 何为HashMap HashMap是在JDK1.2中引入的Map的实现类. HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部 ...

  6. Linux-SUID提权

    前言 最近打靶场的时候最后都会涉及到提权,所以想着总结一下. SUID提权原理 SUID(设置用户ID)是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用 ...

  7. Linux 环境变量配置的 6 种方法,建议收藏

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ Linux环境变量配置 在自定义安装软件的时候,经常需要配置环境变量,下面列举出各种对环境变量 ...

  8. VUE3 之 Teleport - 这个系列的教程通俗易懂,适合新手

    1. 概述 老话说的好:宰相肚里能撑船,但凡成功的人,都有一种博大的胸怀. 言归正传,今天我们来聊聊 VUE 中 Teleport 的使用. 2. Teleport 2.1 遮罩效果的实现  < ...

  9. 解决 youtube 片尾内容被遮挡

    参考: https://www.pcdvd.com.tw/showthread.php?t=1137333 在 ublock 的自定义静态规则中加上这句话 www.youtube.com##.ytp- ...

  10. 国内访问 git 慢的方法

    在国内访问 git 的时候,总会存在访问慢或者git clone 的时候报下面的错误 这个时候,我们可以使用代理的方式去进行访问 需要注意的是:你必须存在一个国外的,能够让你快速访问到 GitHub ...