MySQL数据定义语言
原文链接:https://blog.liuzijian.com/post/83cdb010-fa97-e8ff-5b28-22da08e739e9.html
1.库操作
1.1 创建数据库
CREATE DATABASE book
1.2 创建数据库,如果存在
CREATE DATABASE IF NOT EXISTS book
1.3 切换到某个数据库
use book
1.4 更改库字符集
ALTER DATABASE book CHARACTER SET utf8
ALTER DATABASE book CHARACTER SET gbk
1.5 删除数据库
DROP DATABASE book
DROP DATABASE IF EXISTS book
2.数据类型
2.1 整形
整形 TINYINT
SMALLINT
MEDIUMINT
INT(INTEGER)
BIGINT
,对于整形,长度由范围决定,设置的长度用来补零,但必须在建立字段时搭配zerofill,一旦zerofill,默认为无符号,如果不设置无符号,默认是有符号,如果插入数值超出范围,系统会警告,默认插入临界值。
# 设置有无符号
create table user(
age int UNSIGNED ,
id int
)
INSERT INTO `user` VALUES (-9,9)
2.2 浮点数
浮点型小数 float(m,d)
double(m,d)
定点型小数 DECIMAL(m,d)
,精度高,最大取值范围与double相同,m 整数部分和小数部分合起来的位数,d 小数点后保留位数,超出范围默认是临界值
2.3 字符型
短文本char
VARCHAR
,长文本text
CHAR(m)
,m指最大字符数, 固定长度字符,开的空间与长度有关 ,耗费空间,效率高,可以省略m, m默认是1。
VARCHAR(m)
m指最大字符数, 可变长度的字符,开的空间与实际占用有关,节省空间,效率低,不能省略m。
2.4 枚举型
enum('c','b')
掺入的值不在枚举内,默认是空,不区分大小写
2.5 SET
一次可以插入多个值,不区分大小写
2.6 日期值
必须用单引号引起,每个类型作用范围不同
date
1000-01-01 - 9999-12-31
time
838:59:59
datetime
1000-01-01 - 9999-12-31
year
1901 - 2155
TIMESTAMP
1970 - 2038年某一时刻,受时区影响,更能反应实际日期,与MySQL版本和sqlmode关系很大
3.表操作
3.1 创建表
CREATE TABLE book(
id INT(10) ,
`name` VARCHAR (30),
price DOUBLE,
authorId INT(10),
publishDate DATETIME
);
CREATE TABLE author(
id INT,
`name` VARCHAR(20)
);
3.2 查看表描述
DESC book
3.3 修改列名 类型
ALTER TABLE book CHANGE COLUMN publishDate pubDate datetime
3.4 修改类约束 类型
ALTER TABLE book MODIFY COLUMN pubDate datetime
3.5 添加新列
ALTER TABLE author ADD COLUMN last_name VARCHAR(20)
ALTER TABLE author ADD COLUMN first_name VARCHAR(20)
3.6 删除列
ALTER TABLE author DROP COLUMN first_name
3.7 修改表名
ALTER TABLE author RENAME TO `authors`
3.8 删除表
DROP TABLE IF EXISTS `authors`
3.9 复制
仅仅复制结构
CREATE TABLE 1_author LIKE `author`
复制结构和数据
CREATE TABLE 12_author SELECT * FROM `author`
条件复制
CREATE TABLE 12_author SELECT * FROM `author` WHERE id = 1
复制部分列
CREATE TABLE 12_author SELECT `name` FROM `author` WHERE id = 1
复制部分列,不要数据,使用恒不成立
CREATE TABLE 12_author SELECT `name` FROM `author` WHERE 2 = 1
CREATE TABLE 12_author SELECT `name` FROM `author` WHERE 0 /*0==false*/
4.约束
6种约束
- NOT NULL (非空约束): 确保列不能有
NULL
值。常用于必须填写的字段。 - DEFAULT (默认值约束): 如果插入数据时未指定该列的值,则使用默认值填充。
- PRIMARY KEY (主键约束): 保证字段值的唯一性和非空,常用于唯一标识表中每一行的字段。
- UNIQUE (唯一约束): 确保列中的值唯一,但可以有
NULL
值。 - CHECK (检查约束): 验证字段的值是否符合指定条件,但 MySQL 并不支持
CHECK
约束。 - FOREIGN KEY (外键约束): 设定两个表之间的关系,确保该字段的值必须来自于主表的关联列。
表级与列级约束:
- 表级约束: 可以在创建表时定义,除
NOT NULL
和DEFAULT
之外的所有约束都支持。 - 列级约束: 语法上支持所有约束,但 MySQL 中外键在列级定义时可能无法有效执行(需要在表级定义才能生效)。
4.1 主键
添加主键
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY
-- 支持表级约束的也可以这样
ALTER TABLE stuinfo ADD PRIMARY KEY (id)
CREATE TABLE stuinfo(
id int ,
stuname VARCHAR(20) ,
gender CHAR (1) ,
seat INT ,
age INT UNSIGNED ,
majarId INT,
CONSTRAINT pk/*mysql中,主键改名无效*/ PRIMARY KEY (id)
)
主键和唯一的对比
都可以保证唯一,主键不能为空,每个表只能有1个,可以两个列自合一起,唯一允许为空,一个表可以有多个,不能多个为空,可以两个列自合一起。
外键,从表设置外键关系,数据类型一致或兼容,主表被关联列必须是一个key,一般是主键或唯一,插入数据时,先插入主表在插入从表,删除数据,先删除从表,再删除主表。
4.2 非空
CREATE TABLE stuinfo(
id int ,
stuname VARCHAR(20) ,
gender CHAR (1) ,
seat INT ,
age INT UNSIGNED ,
majarId INT
)
-- 修改表时添加约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL
4.3 唯一
添加唯一
ALTER TABLE stuinfo ADD UNIQUE (seat)
4.4 外键
添加外键
ALTER TABLE stuinfo ADD FOREIGN KEY (majarId) REFERENCES majar(id)
添加外键 名字
ALTER TABLE stuinfo ADD CONSTRAINT fk_majar FOREIGN KEY (majarId) REFERENCES majar(id)
4.5删除约束
删除非空
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL
不添加条件,就会删除默认约束
ALTER TABLE stuinfo MODIFY COLUMN age
删除主键
ALTER TABLE stuinfo DROP PRIMARY KEY
先查到,在删除唯一约束
SHOW INDEX FROM stuinfo
ALTER TABLE stuinfo DROP INDEX seat
删除外键
ALTER TABLE stuinfo DROP FOREIGN KEY fk_majar
4.6标识列
限制某个字段,又叫自增长列,默认从1开始,必须是一个key,同一张表标识列只能有一个,只能是数值类型
CREATE TABLE stuinfo(
id int PRIMARY KEY auto_increment,
stuname VARCHAR(20) ,
gender CHAR (1) ,
seat INT ,
age INT UNSIGNED ,
majarId INT
)
步长auto_increment_increment 起始值auto_increment_offset,mysql 可以设置步长,但是不能设置起始值
show VARIABLES like '%auto_increment%'
设置删除标识列
ALTER TABLE stuinfo MODIFY COLUMN id int PRIMARY KEY auto_increment
ALTER TABLE stuinfo MODIFY COLUMN id int
MySQL数据定义语言的更多相关文章
- mysql数据库-mysql数据定义语言DDL (Data Definition Language)归类(六)
0x01 创建数据库并指定字符集和排序规则 -- 三种实例写法 create database temptab2 character set utf8 collate utf8_general_ci; ...
- mysql数据定义语言DDL
库的管理 创建 create 语法:create database 库名 [character set 字符集] # 案例:创建库 create database if not exists book ...
- <MySQL>入门三 数据定义语言 DDL
-- DDL 数据定义语言 /* 库和表的管理 一.库的管理:创建.修改.删除 二.表的管理:创建.修改.删除 创建:create 修改:alter 删除:drop */ 1.库的管理 -- 库的管理 ...
- mysql DDL数据定义语言
DDL数据定义语言 本节涉及MySQL关键字:create.alter(rename,add,chang,modify,drop).drop.delete.truncate等. -- 创建表:-- 数 ...
- 【MySQL】DDL数据定义语言的基本用法create、drop和alter(增删改)
DDL 的基础语法 文章目录 DDL 的基础语法 对数据库进行定义 对数据表进行定义 创建表结构(数据表) 设计工具 修改表结构 小结 参考资料 简单复习一波 SQL必知必会 DDL 的英文全称是 D ...
- Mysql数据库基础第四章DDL(数据定义语言):库表的管理、数据类型与约束条件
Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...
- MySQL之数据定义语言(DDL)
写在前面 本文中 [ 内容 ] 代表啊可选项,即可写可不写. SQL语言的基本功能介绍 SQL是一种结构化查询语言,主要有如下几个功能: 数据定义语言(DDL):全称Data Definition L ...
- DDL数据定义语言
DDL数据定义语言 (一)概述 DDL(Data Definition Language):数据定义语言,用来定义数据库对象,库.表.列等:创建.删除.修改 库,表结构.主要分为操作数据库的DDL和操 ...
- Oracle language types(语言种类) 表的相关操作 DDL数据定义语言
数据定义语言 Data Definition Language Statements(DDL)数据操纵语言 Data Manipulation Language(DML) Statements事务控制 ...
- SQL语言学习-数据定义语言
Sql语言至今已经有6个版本.SQL查询语言包括了所有对数据的操作命令,这些操作可分为四类:数据定义语言(DDL).数据操纵语言(DML).数据控制语言(DCL)和嵌入式SQL语言. 数据定义语言(D ...
随机推荐
- 手搓党分享:用Air700E开发板+毫米波雷达,搓一个睡眠监测仪!
只能说,看到这个大佬分享的睡眠监测仪,手上的手环瞬间不香了... 用Air700E开发板+毫米波雷达,手搓一个开箱即用的睡眠监测仪,不花冤枉钱! 一.项目原理及硬件制作 毫米波是指频率范围从30- ...
- delphi 图形图像处理 Image32
delpher 越来越少了,但不能掩盖它的优秀,很外前看到了 Image32,但发现用它的人很少,这段时间整理了它的资料,重新组合了一个DEMO,也可以说是个小工具,分享出来. Image32 关于I ...
- 不依赖 Spring,你会如何自实现 RabbitMQ 消息的消费(一)
开心一刻 上午一好哥们微信我哥们:哥们在干嘛,晚上出来吃饭我:就我俩吗哥们:对啊我:那多没意思,我叫俩女的出来哥们:好啊,哈哈哈晚上吃完饭到家后,我给哥们发消息我:今天吃的真开心,下次继续哥们:开心尼 ...
- (Redis基础教程之九) 如何在Redis中使用Sorted Sets
介绍 Redis是一个开源的内存中键值数据存储.在Redis的,排序集合类似于一个数据类型集在这两者都是串的非重复的组.不同之处在于,已排序集中的每个成员都与一个分数相关联,从而可以从最小分数到最大分 ...
- LinkedList原码分析(基于JDK1.6)
<Java集合类>一文中已经最List的基本操作进行说明,并且比较了ArrayList和LinkedList的效率.本文将进一步解析LinkedList. LinkedList也和Arra ...
- go get 和 go install 对比
(一)命令定义和区别 go install 和 go get 都是 Go 语言的工具命令,但它们之间有一些区别. go get:用于从远程代码存储库(如 GitHub)中下载或更新 Go 代码包.它会 ...
- Git学习【1】 -- 基本常用命令
目录 1.设置用户名 2.设置用户邮箱 3.初始化文件夹 4.如何修改文件 5.如何删除文件 6. 远程github操作 7. 设置密码 安装完Git,如何玩呢?下面是一些初始化和初级的常用命令. 新 ...
- Codeforces Round 960 (Div.2)
A 非常容易观察到性质,注意 Alice 为先手,发现当 \(a_{\max}\) 的个数为奇数时显然能 win,但如果 \(a_{\max}\) 的个数为偶数且有一个数具有奇数个可以作为跳板,那么也 ...
- Vue项目“TypeError: Cannot read property ‘_wrapper’ of undefined
前情 最近在开发一个H5营销活动项目,为了更高的开发效率我使用了Vue全家桶来实现. 坑位 在开发中遇到一个奇怪报错(报错截图如下),从提示看也定位不到是哪里出问题 Why? 在报错的页面仔细看了一遍 ...
- 01编程语言简介与C++
编程语言是编程的工具 计算机系统是分层的 图1: 图2: 编程语言是软件,也是分层的 图3: 图4: 图5: 图6: visual studio.vscode .dev-c++是三种用于C++编程的集 ...