学习笔记-mysql基础(DDL,DML,DQL)

news2024/9/25 9:32:37

一.DDL

DDL,Data Definition Language,数据库定义语言,该语言包括以下内容:

  • 对数据库的常用操作
  • 对表结构的常用操作
  • 修改表结构

1.对数据库的常用操作

-- 查看所有的数据库
show databases
-- 创建数据库
create database [if not exists] test [charset=utf8]
-- 切换 选择 数据库
use test 
-- 删除数据库
drop database [if exists] test
--修改数据库编码
alter database test character set utf8

注意:在sql server 中使用,if exists和mysql不同,sql server里面检查是否有这个表再删除,需要这样:if exists (select * from dbo.sysobjects where id = object_id(N’表名’) and OBJECTPROPERTY(id, N’IsUserTable’) = 1)

2.对表结构的常用操作

(1) 创建表
create table [if not exists]表名(
	字段名,数据类型[(宽度)],约束,[comment'字段说明']
)

数值类型
在这里插入图片描述

日期类型
在这里插入图片描述
字符串
在这里插入图片描述

PS:记录一些数据类型的使用与sql server不同的地方(日后补充):
1.在SQL Server中, Tinyint类型表示一个无符号整数,它的取值范围是从0到255。而MySQL中,默认取值范围是从-128到127,可以通过unsigned关键字的使用,取值范围变为0到255
2.MySQL中没有nvarchar数据类型,但可以使用varchar类型来存储Unicode字符数据。使用utf8mb4字符集和正确的排序规则可以确保正确存储和比较Unicode字符数据

(2) 其他操作
-- 查看数据库的其他表
show tables
-- 查看某个表的创建语句
show create table 表名 # 可以看到字段数据类型及长度还有约束等
-- 查看表结构
desc 表名  //这个真的很好用,比sql server方便很多!
-- 删除表
delete table 表名

3.对表结构的常用操作

(1) 列名操作
-- 添加
alter table 表名 add 列名 数据类型(长度) [约束]
-- 修改 可以适用于很多修改
alter table 表名 change 旧列名 新列名 数据类型(长度) [约束]
-- 删除
alter table 表名 drop 列名

注意: SQL Server中修改字段名和数据类型需要分开修改,如下所示:

-- SQL Server
exec sp_rename '表名.旧列名','新列名'
alter table 表名 alter column 新列名 数据类型(长度) 
(2) 修改表名
-- mysql
rename  table 表名 to 新表名
-- sql server
exec sp_rename '表名','新表名'

二. DML

DML,Data Manipulation Language,用来对数据库中表的数据记录进行更新
关键字:

  • insert
  • delete
  • update

1. 数据插入

insert  into(1,2,...) values (1,2,...) //插入一行
insert  into(1,2,...) values (1,2,...),(11,22,...) //插入多行
insert into(1,2,...)  select1,2,... [from 其他表]

2. 数据修改

update 表名 set 字段名=1 [where 条件]

3. 数据删除

delete  from 表名 [where 条件]  # 与sql server不同的是,sql server中可以直接使用 delete 表名,from可以省略 
truncate table  表名 	|   truncate 表名
注意:delete和truncate原理不同,delete只删除内容,而truncate类似于drop table ,可以理解为将整表删除,然后再创建该表

三. 约束

表在设计的时候加入约束的目的就是为了保证表中的记录完整性和有效性.
分类:

  • 主键约束(primary key) PK
  • 自增长约束(auto_increment)
  • 非空约束(not null)
  • 唯一性约束(unique)
  • 默认约束(default)
  • 零填充约束(zerofill)
  • 外键约束(foreign key) FK

1. 主键约束

  • 每个表最多只允许有一个主键
  • 主键约束相当于 唯一约束+非空约束的组合,主键约束列不允许重复,也不允许出现空值
  • 当创建主键的约束时,系统默认会在所在的列和列组合上建立对应唯一索引
(1) 单列主键
-- 在create table时,通过primary key关键字来指定主键
create table 表名(
<字段名> <数据类型> primary key
)
-- 在定义字段之后再指定主键
create table 表名(
...
[constraint <约束名>] primary key(字段名)
);


(2) 多列主键(联合主键)
 create table 表名(
 ...
[constraint <约束名>] primary key(字段1,字段2,...)
);

注意:联合主键的每一列都不能为空

(3) 通过修改表结构来添加主键
alter table 表名 add primary key (字段)  //可当列可多列
(4) 删除主键
alter table 表名 drop primary key 

2. 自增长约束

语法: 字段名 数据类型 auto_increment
特点:

  • 默认情况下,auto_increment的初始值是1,每新增一条记录,字段值自动+1
  • 一个表中只能有一个字段使用auto_increment,该字段必须有唯一索引,以免序号重复(即为主键或者主键的一部分)
  • auto_increment约束的字段必须具备NOT NULL属性
  • auto_increment约束的字段只能是整数类型
  • auto_increment约束的字段的最大值受该字段的数据类型约束,如果达到上限,就会失效
    注意:
    [42000][1075] Incorrect table definition; there can be only one auto column and it must be defined as a key |表定义错误;auto列只能有一个,并且必须定义为键
    mysql的自增键必须是主键或者主键的一部分,与mysql 不同的是,sql server中,自增键可以是主键,但主键不一定是自增键
(2) 指定字段的初始值
  -- 创建表时指定
  create table 表名(
  字段 数据类型 primary key auto_increment,
  ...
  ) auto_increment=100 
  -- 创建表之后指定
  create table 表名(
  字段 数据类型 primary key ,
  ...
  ) auto_increment=100 
  alter table 表名 auto_increment=100 
  -- 

注意:设置了自增长的字段上,在mysql中,直接插入null值或者0,系统会默认成自增长的值,但是在sql server中会直接报错

3. 非空约束

(1) 添加非空约束
# 创建表时指定
create table 表名(
字段 数据类型 not null ,
...
)
# 创建表之后指定
alter table 表名 modify 字段 数据类型 not null ;
(2) 删除非空约束
# 方法1
alter table 表名 modify 字段 数据类型 ; 
# 方法2
alter table 表名 change 字段 数据类型 ; 
# 注意:如果是主键,不能直接删除非空约束
alter table 表名 drop primary key
alter table 表名 change 字段 数据类型 ; 

4. 唯一约束

(1) 添加唯一约束
# 方法1 创建表时指定
create table 表名(
字段 数据类型 unique,  # 默认字段名就是约束名
...
)
# 方法2 创建表之后指定
alter table 表名 add constraint 约束名 unique(列名) ;

注意:添加唯一约束的时候系统会给添加一个索引 create unique index,默认名字是字段名

(2) 删除唯一约束
# 方法1
alter table 表名 drop index  约束名 ; 
# 方法2
drop index 约束名 on 表名;

5. 默认约束

(1) 添加默认约束
# 方法1 创建表时指定
create table 表名(
字段 数据类型 default 默认值 ,  
...
)
#方法2 创建表之后指定
alter table 表名 modify 字段 数据类型 default 默认值 ;
(2) 删除默认约束
# 方法1
 alter table 表名 change 字段名 字段名 数据类型;
# 方法2
alter table 表名 modify 字段 数据类型 default null ;

6. 零填充约束

  • 插入数据时,当该字段的值的长度下于定义的长度时,会在该值面前补上相应的0(作用:长度固定的显示效果)
  • zerofill默认为int(10)
  • 当使用zerofill时,默认会自动加unsigned(无符号)属性,使用unsigned后,数值范围是原来的2倍,例如,有符号为-128到127,无符号为0都256
(1) 添加零填充约束
create table 表名(
字段 数据类型 zerofill ,  
...)
(2) 删除零填充约束
alter table 表名 modify 字段 数据类型 ;

四. DQL 基本查询

DQL:Data Query Language 数据查询语言,用来查询数据库中的记录

1. 基本语法

select [all|distinct]  字段1 [别名1],字段2 [别名2]...
from 表名 
where 条件 
group by 分组字段                                   
having 分组之后的条件 [asc|desc]
order by 排序
limit 数字或列表

详细用法见数据查询语言DQL

2. 正则表达式

(1) 介绍

mysql通过关键字regexp支持正则表达式进行字符串匹配

(2) 使用
-- ^ :在字符串开始处进行匹配 
select 'abc' regexp '^a'   --1
--$ : 在字符串末尾开始匹配
select 'abc' regexp 'a$'   --0
select 'abc' regexp 'c$'   --1
-- . :可以匹配除了换行符以外的任意字符
select 'abc' regexp 'a.'   --1
select 'abc' regexp '.b'   --1
select 'abc' regexp '.c'   --1
select 'abc' regexp '.d'   --0
-- [...] 匹配括号内的任意单个字符
select 'abc' regexp '[xyz]'   --0
select 'abc' regexp '[xaz]'   --1
-- [^...] 注意^符号只有在[]内才是取反的意思,在别的地方都是表示开始处匹配
select 'a' regexp '[^xyz]'   --1
select 'x' regexp '[^xyz]'   --0
select 'abc' regexp '[^a]'   --1
-- a* 匹配0个或多个a,包括空字符串。 可以作为占位符使用.有没有指定字符都可以匹配到数据
SELECT 'stab' REGEXP '.ta*b'  --1
SELECT 'stab' REGEXP '.(ta)*b'  --1
SELECT 'stb' REGEXP '.ta*b'  --1
SELECT 'stb' REGEXP '.(ta)*b'  --0
SELECT '' REGEXP 'a*'  --1
-- a+  匹配1个或者多个a,但是不包括空字符
SELECT 'stab' REGEXP '.ta+b' --1
SELECT 'stb' REGEXP '.ta+b' --0
-- a?  匹配0个或者1个a
SELECT 'stb' REGEXP '.ta?b' --1
SELECT 'stab' REGEXP '.ta?b' --1
SELECT 'staab' REGEXP '.ta?b' --0
-- a1|a2  匹配a1或者a2
SELECT 'a' REGEXP 'a|b' --1
SELECT 'b' REGEXP 'a|b' --1
SELECT 'b' REGEXP '^(a|b)' --1
SELECT 'a' REGEXP '^(a|b)' --1
SELECT 'c' REGEXP '^(a|b)' --0
-- a{m} 匹配m个a
SELECT 'auuuuc' REGEXP 'au{4}c' --1
SELECT 'auuuuc' REGEXP 'au{3}c' --0
-- a{m,n} 匹配m到n个a,包含m和n
SELECT 'auuuuc' REGEXP 'au{3,5}c' --1
SELECT 'auuuuc' REGEXP 'au{4,5}c' --1
SELECT 'auuuuc' REGEXP 'au{5,10}c' --0
-- (abc) abc作为一个序列匹配,不用括号括起来都是用单个字符去匹配,如果要把多个字符作为一个整体去匹配就需要用到括号,所以括号适合上面的所有情况。
SELECT 'xababy' REGEXP 'x(abab)y' --1
SELECT 'xababy' REGEXP 'x(ab)*y' --1
SELECT 'xababy' REGEXP 'x(ab){2,3}y' --1
SELECT 'xababy' REGEXP 'x(ab){3}y' --0

3. 多表关系

(1) 外键约束
//创建表时添加
create table 从表表名(
...,
[constraint 外键名 ] foreign key 列名 references 主键表(主键字段)
)
//创建表后添加
alter table 从表表名 add constraint 外键名 foreign key (列名) references 主键表名(主键字段)
//删除外键
alter table 表名 drop foreign key 外键名
(2) 多表联合查询
  • 交叉连接查询[产生笛卡尔积,select * from a,b]
  • 内连接查询[inner join]
  • 外连接查询[left|right|full outer join]
  • 子查询[关键字:all|any|some|in|exists]
  • 表自关联
注意:mysql对full join 的支持不好,一般用union 来达到目的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1380281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何判断 vite 的运行环境是开发模式还是生产模式 production? development?

如何判断 vite 的运行环境是开发模式还是生产模式 production&#xff1f; development&#xff1f; vite 有两种获取当前运行环境模式的方法&#xff1a; 官方说明&#xff1a; 完整说明地址&#xff1a; https://cn.vitejs.dev/guide/env-and-mode.html#node-env-and-modes…

Netty开篇——NIO章上(三)

Java NIO基本介绍 java non-blocking I/O 称为NIO(也叫New IO)。JDK4开始提供,同步非阻塞相关内容在 java.nio 包及子包下&#xff0c;对java.io 包中的很多类进行改写。三大核心: Channel(通道)&#xff0c;Buffer(缓冲区),Selector(选择器)NIO是面向缓冲区或者面向块编程的。…

使用Java连接MongoDB (6.0.12) 报错

报错&#xff1a; Exception in thread "main" com.mongodb.MongoCommandException: Command failed with error 352: Unsupported OP_QUERY command: create. 上图中“The client driver may require an upgrade”说明了“客户端驱动需要进行升级”&#xff0c;解…

【昕宝爸爸小模块】如何让Java的线程池顺序执行任务

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你&#x1f44d;点赞、&#x1f5c2;️收藏、加❤️关注哦。 本文章CSDN首发&#xff0c;欢迎转载&#xff0c;要注明出处哦&#xff01; 先感谢优秀的你能认真的看完本文&…

【Python数据可视化】matplotlib之设置坐标:添加坐标轴名字、设置坐标范围、设置主次刻度、坐标轴文字旋转并标出坐标值

文章传送门 Python 数据可视化matplotlib之绘制常用图形&#xff1a;折线图、柱状图&#xff08;条形图&#xff09;、饼图和直方图matplotlib之设置坐标&#xff1a;添加坐标轴名字、设置坐标范围、设置主次刻度、坐标轴文字旋转并标出坐标值matplotlib之增加图形内容&#x…

进程的创建与回收学习笔记

目录 一、进程内容&#xff1a; 二、进程常用命令 三、创建子进程 四、子进程进阶 五、进程的退出 六、进程的回收 一、进程内容&#xff1a; 程序&#xff1a; 存放在磁盘上的指令和数据的有序集合&#xff08;文件&#xff09; 静态的 进程&#xff1a; 执行一个程序所…

仓储库房温湿度监测解决方案——福建蜂窝物联

一、背景 1.1 现状 在实际应用中&#xff0c;仓储对环境变化非常敏感。例如医药行业中的冷库主要存放需要低温保存的试剂或物品&#xff0c;一旦温度、湿度发生变化&#xff0c;容易影响到产品质量。对于现在很多大型工厂或者物流基地来说&#xff0c;仓库无疑是存放物品的重…

Linux 内核学习 2 - 用户程序如何被塞进内核进行调度?

Shell是系统的用户界面&#xff0c;提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。 fork里copy了父进程的信息&#xff0c;并激活task放到运行队列&#xff0c;当系统发生调度并获得执行机会时开始执行&#xff0c;但这时还不是hello程序…

LeetCode讲解篇之47. 全排列 II

文章目录 题目描述题解思路题解代码 题目描述 题解思路 初始化一个nums中元素是否被访问的数组used、记录还需要递归的深度deep&#xff0c;遍历nums&#xff0c;如果当前元素被访问过或者当前元素等于前一个元素且前一个元素没被访问过就跳过该次遍历&#xff0c;否则选择当前…

Colab 谷歌免费的云端Python编程环境初体验

最新在学习AIGC的过程中&#xff0c;发现很多教程&#xff0c;demo使用到了Colab这个谷歌工具。 Colab 是什么&#xff1f; Google Colab是一个强大且免费的云端Python编程环境&#xff0c;为学生、研究人员和开发者提供了一个便捷的平台来开展数据科学、机器学习和深度学习项…

大数据之谷歌文件系统论文 GFS The Google File System

原文地址 谷歌文件系统论文 摘要 我们设计并实现了Google文件系统&#xff0c;这是一个面向大规模分布式数据密集型应用的可扩展分布式文件系统。 它在廉价的通用硬件上运行&#xff0c;提供了容错性&#xff0c;并向大量客户端提供高聚合性能。 尽管与先前的分布式文件系统…

怎么理解接口幂等,项目中如何保证的接口幂等

都 2024 年了&#xff0c;竟然还有人不知道接口幂等是什么东西。 hi&#xff0c;大家好&#xff0c;我是 浮生 今天正好有空&#xff0c;给大家分享一下 幂等的实现。 什么是幂等&#xff1f; 一、问题解析 简单来说&#xff0c;就是一个接口&#xff0c;使用相同的参数重复执…

c++算法之二分

目录 二分法简介 解题步骤 整数二分 模板 例题 输入描述 输出描述 样例输入输出 解 浮点二分 模板 二分答案&#xff08;最重要&#xff09; 模板 例题 跳石头 题目描述 输入描述 输出描述 输入输出样例 解 例题 肖恩的苹果林 输入描述 输出描述 解 测…

GBASE南大通用数据库如何检索单行

SELECT 语句返回的行集是它的活动集。单个 SELECT 语句返回单个行。您可使用嵌入式 SELECT 语句来从数据库将单个行检索到主变量内。然而&#xff0c;当 SELECT 语句返回多行数 据时&#xff0c;程序必须使用游标来一次检索一行。在 检索多行 中讨论“多行”选择操作。 要检索单…

png格式图片怎么转换?分享3个转换的方法

随着互联网的普及和自媒体的发展&#xff0c;我们每天都会遇到各种图片格式&#xff0c;其中PNG格式因其透明背景和高质量的图像而受到广泛欢迎。然而&#xff0c;有时候我们需要将PNG格式的图片转换成其他格式以满足不同的需求。那么&#xff0c;如何轻松转换PNG格式的图片呢&…

在全志T113-i平台上实现H.265视频解码步骤详解

H.265&#xff0c;也被称为HEVC(HighEfficiency Video Coding)&#xff0c;作为H.264的继任者&#xff0c;提供了更好的视频压缩和更高的视频质。H.265通过引入更多先进的编码技术&#xff0c;如更强大的运动估计和更高效的变换编码&#xff0c;对比H.264进行了改进。这些改进使…

代码随想录 Leetcode203. 移除链表元素

题目&#xff1a; 代码(首刷看解析 2024年1月11日&#xff09;&#xff1a; class Solution { public:ListNode* removeElements(ListNode* head, int val) {if(headnullptr) return nullptr;ListNode* BeforeHead new ListNode(0,head);ListNode* temp BeforeHead;while(te…

seata分布式事务(与dubbo集成)

1.seata是什么? Seata 是一款开源的分布式事务解决方案&#xff0c;致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 2.seata的注解 GlobalTransactional&#xff1a;全局事务注解&#xff0c;添加了以后可实现分布式事务的回滚和提交&#xff0c;用法与spring…

C语言从入门到实战——数据在内存中的存储方式

数据在内存中的存储方式 前言1. 整数在内存中的存储2. 大小端字节序和字节序判断2.1 什么是大小端2.2 为什么有大小端2.3 练习2.3.1 练习12.3.2 练习22.3.3 练习32.3.4 练习42.3.5 练习52.3.6 练习6 3. 浮点数在内存中的存储3.1 练习3.2 浮点数的存储3.2.1 浮点数存的过程3.2.2…

模拟退火算法(SA)解决旅行商(TSP)问题的python实现

旅行商问题 旅行商问题&#xff08;Travelling Salesman Problem, 简记TSP&#xff0c;亦称货郎担问题)&#xff1a;设有n个城市和距离矩阵D [dij]&#xff0c;其中dij表示城市i到城市j的距离&#xff0c;i, j 1, 2 … n&#xff0c;则问题是要找出遍访每个城市恰好一次的一…