mysql-12-DDL
#DDL
/*
数据定义语言 库和表的管理
一、库的管理
创建、修改、删除
二、表的管理
创建、修改、删除 创建 create
修改 alter
删除 drop */ #一、库的管理
#1、库的创建
/*
CREATE DATABASE 库名;
*/ CREATE DATABASE books; SHOW DATABASES; #如果没有再创建
CREATE DATABASE IF NOT EXISTS books; #2、库的修改
/*
一般地,不对库做修改
*/
#更改库的字符集
ALTER DATABASE books CHARACTER SET gbk; #3、库的删除
DROP DATABASE IF EXISTS books; #二、表的管理
#1、表的创建
/*
CREATE TABLE 表名(
列名 列的类型 【长度,约束】,
列名 列的类型 【长度,约束】,
...
列名 列的类型 【长度,约束】
)
*/
USE books;
#案例1:创建book表
CREATE TABLE book(
id int,
bname varchar(50),
price double,
author_id int,
publish_date datetime
); CREATE TABLE author(
id int,
au_name varchar(20),
nation varchar(20)
); #2、表的修改
/*
ALTER TABLE 表名 change|modify|add|drop|rename COLUMN 列名 【列类型 约束】
*/
#修改列名
ALTER TABLE book CHANGE COLUMN publish_date pub_date DATETIME; #修改列的类型或约束
ALTER TABLE book MODIFY COLUMN pub_date TIMESTAMP; #添加新列
ALTER TABLE author ADD COLUMN annual DOUBLE; #删除列
ALTER TABLE author DROP COLUMN annual; #修改表名
ALTER TABLE author RENAME TO book_author; DESC book; #3、表的删除
DROP TABLE IF EXISTS book_author; #4、表的复制
INSERT INTO book_author
VALUES(1, '莫言', '中国'), (2, '村上春树', '日本'); #仅仅复制表的结构
CREATE TABLE copy LIKE book_author; #复制表的结构+数据
CREATE TABLE copy2
SELECT * FROM book_author; #只复制部分数据
CREATE TABLE copy3
SELECT id, au_name
FROM book_author
WHERE nation='中国'; #只复制部分字段
#设置一个不等条件
CREATE TABLE copy4
SELECT id, au_name
FROM book_author
WHERE 0; #常见数据类型
/*
数值型:
整型
小数:定点数、浮点数 字符型:
较短的文本:char, varchar
较长的文本:text, blob(较长的二进制数据) 日期型
*/
#1、整型
#tinyint, smallint, mediumint, int/integer, bigint #默认有符号;无符号需追加unsigned
#插入数值超过范围会报warning,并且插入临界值
#长度代表显示的宽度,不设置长度会有默认值(zerofill,不够宽度用0填充) DROP TABLE IF EXISTS tab_int;
CREATE TABLE tab_int(
t1 int,
t2 int unsigned
); INSERT INTO tab_int(t1)
VALUES(-123); #能够插入,说明int默认有符号 #2、浮点型
#float(M, D) 最常用, double(M, D) #3、定点型
#decimal(M, D) 精度较高 /*
M:整数部位+小数部位
D:小数部位
如果超过范围,插入临界值
*/ #4、字符型
#较短文本:
#固定长度的字符:var(M),效率高;可变长度的字符:varchar(M),节省空间,效率低;M:最多的字符数
#binary/varbinary 保存较短的二进制;enum 保存枚举;set 保存集合 #较长文本:
#text, blob(图片等较大的二进制) #5、日期型
#日期值必须用单引号引起来
#date, datetime, timestamp, time, year
#timestamp的属性和实际时区有关,更能反应实际的日期 CREATE TABLE tab_date(
t1 datetime,
t2 timestamp
); INSERT INTO tab_date
VALUES(NOW(), NOW()); SELECT * FROM tab_date; #常见约束
/*
含义:一种限制,用于限制表中的数据 六大约束:
NOT NULL: 非空,用于保证该字段的值不能为空。比如姓名、学号等
DEFAULT: 默认,用于保证该字段有默认值。比如性别,
PRIMARY KEY: 主键,用于保证该字段的值具有唯一性,且非空。比如学号、编号等
UNIQUE: 唯一性,可以为空
CHECK: 检查约束【mysql中不支持】
FOREIGN KEY: 外键,用于限制两个表的关系,用于保证该字段的值必须来自主表的关联列
比如学生表的专业编号,员工表的部门编号,员工表的工种编号 一般在设计表的时候添加约束 CREATE TABLE 表名(
字段名 字段类型 列级约束1 列级约束2,
字段名 字段类型 列级约束,
...,
表级约束
); */ CREATE DATABASE students;
USE students; #添加列级约束
CREATE TABLE stuinfo(
id int primary key,
stu_name varchar(20) not null,
gender char(1) check(gender='男' or gender='女'),
seat int unique,
age int default 18,
major_id int
); CREATE TABLE major(
id int primary key,
major_name varchar(20)
); DESC stuinfo; #添加表级约束
#【constraint 约束名】 约束类型(字段名)
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE IF NOT EXISTS stuinfo(
id int,
stu_name varchar(20) not null,
gender char(1),
seat int,
age int default 18,
major_id int,
constraint pk primary key(id),
constraint uq unique(seat),
constraint ck check(gender='男' or gender='女'),
constraint fk_stuinfo_major foreign key(major_id) references major(id)
);
SHOW INDEX FROM stuinfo; /*
主键和唯一的对比:
都具有唯一性;
主键不允许为空、唯一允许为空;
一个表中最多只能有一个主键;
都允许组合,但都不推荐 外键:
1、要求在从表设置外键关系
2、从表的外键列的类型和主表的关联列的类型要一致或兼容
3、主表的关联列必须是一个key(一般是主键或唯一)
4、插入数据时,先插入主表,再插入从表;删除数据时,先删除从表,再删除主表
*/ #修改表时添加约束
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE IF NOT EXISTS stuinfo(
id int,
stu_name varchar(20),
gender char(1) check(gender='男' or gender='女'),
seat int unique,
age int,
major_id int
); #1、添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN stu_name 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 UNIQUEY(id); #5、添加外键
ALTER TABLE stuinfo ADD CONSTRAINT fk_major_id
FOREIGN KEY(major_id) REFERENCES major(id); #修改表时删除约束
#和添加约束语法一致,把后面的约束去掉再执行一次就行了 #删除主键
ALTER TABLE stuinfo DROP PRIMARY KEY; #删除唯一
ALTER TABLE stuinfo DROP INDEX seat; #删除外键
ALTER TABLE stuinfo DROP FOREIGN KEY fk_major_id;
mysql-12-DDL的更多相关文章
- MySQL使用DDL语句创建表
一.使用DDL语句创建表 DDL语言全面数据定义语言(Data Define Language) 主要的DDL动词: CREATE(创建).DROP(删除).ALTER(修改) TRUNCATE(截断 ...
- 【科普】MySQL中DDL操作背后的并发原理
一. 简介 DQL:指数据库中的查询(select)操作. DML:指数据库中的插入(insert).更新(update).删除(delete)等行数据变更操作. DDL:指数据库中加列(add co ...
- 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 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 Online DDL与DML并发阻塞关系总结
MySQL DDL操作执行的三种方式 1,INPLACE,在进行DDL操作时,不影响表的读&写,可以正常执行表上的DML操作,避免与COPY方法相关的磁盘I/O和CPU周期,从而最小化数据库的 ...
随机推荐
- python接口测试自动化之python基础语法
一.pycharm的使用和python基本语法 (一).pycharm的使用和python环境 1.python以及pycharm的安装 python 的版本选择:3.x 版本,不要安装2.x 版本, ...
- 释放数据价值:DAYU数据运营新能力解读
摘要:从比特到信息,这说的其实就是企业数字化转型,让数据的价值充分发挥出来,变成信息. 今天,企业对数据越来越重视,数据已经成为了企业新型的资产,甚至是核心资产,最近流传一句非常有意思的话:从比特到信 ...
- 用rspec执行自动化测试用例
rspec是一款行为驱动开发(BDD)的工具,不过在这里用于测试,准确来说应该是测试驱动开发(TDD)吧.事实上我也没搞清楚.作为初学者不清楚就不清楚吧,以后会知道的.写博客无非就是写写学习笔记,不纠 ...
- three.js尝试(二)模拟游戏开发:3D人物在地图上行走
本次尝试,模拟了一个小人物在场景中行走,使用简单模型建立了森林,图片纹理模拟草地,加载3D模型呈现人物,使用按键asdw模拟人物的行走,行走和站立时人物的切换等. 主要用到点:3D模型的加载,模型的动 ...
- vue相关知识点及面试
### vue #### vue生命周期 beforeCreated `实例初始化,数据观察和event/watch事件配置之前被调用` created `实例创建后立即调用,数据观测,数据和方法运算 ...
- 8成以上的java线程状态图都画错了,看看这个-图解java并发第二篇
本文作为图解java并发编程的第二篇,前一篇访问地址如下所示: 图解进程线程.互斥锁与信号量-看完还不懂你来打我 图形说明 在开始想写这篇文章之前,我去网上搜索了很多关于线程状态转换的图,我惊讶的发现 ...
- spring boot+spring security集成以及Druid数据库连接池的问题
贴工程目录,其中bll目录下是service+dao层,common是一些公用的模块及功能类,web是controller层 用到了druid及Redis,工具及配置类目录(本文不介绍如何配置drui ...
- jzoj 6797. 【2014广州市选day2】hanoi
Description 你对经典的hanoi塔问题一定已经很熟悉了.有三根柱子,n个大小不一的圆盘,要求大盘不能压在小盘上,初始时n个圆盘都在第一根柱子上,最少要多少步才能挪到最后一根柱子上? 现在我 ...
- oracle之三rman 备份
rman 备份 7.1 归档方式下rman备份常用语法: 7.1.1 backup 备份 1)备份全库:1.1 RMAN> backup database format='/u01/myrman ...
- 初等函数——指数函数(Exponential Function)
一般地,函数叫做指数函数,其中x是自变量,函数的定义域是R.