惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
G
Google Developers Blog
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
人人都是产品经理
人人都是产品经理
J
Java Code Geeks
P
Proofpoint News Feed
V
Visual Studio Blog
爱范儿
爱范儿
The Cloudflare Blog
博客园 - 叶小钗
V
V2EX
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
M
MIT News - Artificial intelligence
Microsoft Security Blog
Microsoft Security Blog
博客园 - 聂微东
H
Help Net Security
B
Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 【当耐特】
量子位
宝玉的分享
宝玉的分享
WordPress大学
WordPress大学
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

Liu Zijian's Blog | 一个技术博客

使用Certbot自动续签HTTPS证书 使用Filebeat采集Nginx日志到ES Python的协程 Python中的异常 Python中的类和对象 Python的函数 Python的数据结构,推导式、迭代器和生成器 Spring AI集成多模态模型 LangChain4j多模态 LangChain Tools工具使用 Python中的模块和包 Python全局环境和虚拟环境(venv) LangChain Prompt提示词工程 LangChain4j Tools工具使用 基于Dify搭建AI智能体应用 LangChain4j RAG检索增强生成 Spring AI实现MCP Server Spring AI集成MCP Client LangChain4j Prompt提示词工程 Spring AI使用知识库增强对话功能 Spring AI实现一个智能客服 Spring AI实现一个简单的对话机器人 实现MinIO数据的每日备份 自己实现一个DNS服务 简单理解AI智能体 大模型和大模型应用 LangChain开篇 LangChain4j开篇 一个解析Excel2007的POI工具类 DataPermissionInterceptor源码解读
MySQL数据定义语言
Liu Zijian · 2024-06-09 · via Liu Zijian's Blog | 一个技术博客

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种约束

  1. NOT NULL (非空约束): 确保列不能有 NULL 值。常用于必须填写的字段。
  2. DEFAULT (默认值约束): 如果插入数据时未指定该列的值,则使用默认值填充。
  3. PRIMARY KEY (主键约束): 保证字段值的唯一性和非空,常用于唯一标识表中每一行的字段。
  4. UNIQUE (唯一约束): 确保列中的值唯一,但可以有 NULL 值。
  5. CHECK (检查约束): 验证字段的值是否符合指定条件,但 MySQL 并不支持 CHECK 约束。
  6. FOREIGN KEY (外键约束): 设定两个表之间的关系,确保该字段的值必须来自于主表的关联列。

表级与列级约束:

  • 表级约束: 可以在创建表时定义,除 NOT NULLDEFAULT 之外的所有约束都支持。
  • 列级约束: 语法上支持所有约束,但 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