MySQL操作

news2024/11/20 18:45:40

目录

1.对库操作

1.1 创建数据库

1.1.1 查看有哪些数据库

1.1.2 指定数据库的字符集

1.1.3 查重创建数据库

1.1.4 查看警告信息

1.1.5 小知识:SQL语句中的分号

1.1.6 小知识:设置默认字符集

1.1.7 小知识:语句中的大小写

1.2 使用/选中数据库

1.3 删除数据库(慎重操作)

2.数值类型

2.1 数值类型

2.2 字符串类型

2.3 日期类型

3 对表操作

3.1 创建表

 3.2 查看库中所有的表

3.3 查看表中结构

3.4 删除表(慎重操作)

3.5 小知识:注释

4 表的增删查改(基础)

4.1 新增

4.1.1 单行/多行新增

4.1.2 对指定列新增

4.2 查询(重点)

4.2.1 查询表里面的全部内容

4.2.2 查看指定列的内容

4.2.3 在查询时进行计算

4.2.4 查询时起别名

4.2.5 查询时去重

4.2.6 查询时排序(order by)

4.2.7 多种排序方法排序

4.2.8 条件查询(where)

4.2.9 分页查询(limit和offset)

4.3 修改update(慎重操作)

4.4 删除delete(慎重操作)

5 数据库约束

5.1 什么是约束

5.2 not null约束

5.3 unique约束

5.4 primary key 主键约束

5.5 default约束

5.6 外键约束froeign key(重要)

6.表的设计

 7 表的增删查改(进阶)

7.1 新增

7.2 聚合查询

 7.3 分组查询(group by)

7.4 联合查询(多表查询)

7.4.1 内连接

7.4.2 外连接

7.4.3 自连接

7.4.4 子查询(不建议用)

7.4.5 合并查询


1.对库操作

1.1 创建数据库

操作语句:create database 数据库名;

注意:数据库名不可以是SQL中的关键字,也不可以重名,否则会报错

针对重名,可以先去查看数据库中的所有库名,再去进行建库操作,降低重名概率

1.1.1 查看有哪些数据库

 

 操作语句:show databases;

执行操作后会显示所有的已创建的数据库,其中有几个是自带的库,千万不要删!!!(删除操作后面会说)

1.1.2 指定数据库的字符集

 操作语句:create database 数据库名 charset 字符集(一般用utf8);

指定字符集可以方便后期对库中表的操作(如果不指定字符集,后面对表的新增操作可能会出问题)

utf8: 是当前最流行的编码方式,utf8的汉字一般占3个字节,不过MySQL里面的utf8并不完整,它无法表示emoji

1.1.3 查重创建数据库

 操作语句:create database if not exists 数据库名;

查重创建的好处: 如果库中没有重复的库名,则会创建成功;如果有重名的数据库,则不会创建成功,并给出警告信息 warning(图片中我之前已经创建了test数据库,所以有警告信息)

1.1.4 查看警告信息

操作语句:show warnings;

图片中打印的是1.1.3中的警告信息

1.1.5 小知识:SQL语句中的分号

 在写SQL语句时,如果没有出现分号,那么即使摁下Enter(回车)也不会执行,因为MySQL的控制台认定只有出现分号的时候,才是一条完整的语句,所以在使用MySQL时一条语句可以分成多行输入.

1.1.6 小知识: 设置默认字符集

在MySQL中,如果没有默认字符集,那么每次创建时都要去指定字符集会很麻烦,在工作中,往往会存放相当多的数据,如果忘了指定字符集,那后果不堪设想,下面分享一下如何创建默认字符集

在外面安装完MySQL之后,在电脑中会有一个文件,名为my.ini

首先我们先找到这个文件(可能比较难找),可以去下载一个Everything这个软件去查找(只是建议)

找到之后,打开文件.

找到这两个语句,按照我的划线部分去修改

 

 修改之后,再创建数据库时,就默认字符集为utf8了

1.1.7 小知识:语句中的大小写

 

MySQL中语句的大小写不会影响它的执行,大写小写全凭个人喜好

1.2 使用/选中数据库

操作语句:use 数据库名;

目前还用不到这个,当对表操作时会用到(只有选中了一个数据库,才可以对表进行增删改查) 

1.3 删除数据库(慎重操作)

 操作语句: drop database 数据库名;

删除操作(无论是删除什么)在操作数据库都是一个危险操作,在工作中,对于删除一类的操作都要慎重考虑!!!

删库跑路这种想法放在心里想想就好了,可是不太刑啊(手动狗头)

2.数值类型

2.1 数值类型

bit[(m)]--m为指定位数,默认为1--对应Java的boolean

tinyint--1字节--对应Java的byte

smallint--2字节--对应Java的short

(常用)int--4字节--对应Java的int

bigint--8字节--对应Java的long

float(m,d)--4字节,单精度,m指定长度,d指定小数位数,会发生精度丢失--对应Java的float

(常用)double(m,d)--8字节--对应Java的double

(常用)decimal(m,d)--大小:m/d最大值+2,双精度,m指定长度,d表示小数点位数,精确数值

numeric(m,d)--同decimal

2.2 字符串类型

(常用)varchar(size)--0~65535--可变长度字符串--对应Java的String

text--0~65535--长文本数据--对应Java的String

mediumtext--0~16777215--中等长度文本数据--对应Java的String

blob--0-65535--二进制形式的长文本数据--对应Java的byte[]

2.3 日期类型

datetime--8字节--1000年~9999年,不会进行时区的检索和转换

timestamp--4字节--1970年~2038年,自动进行时区的检索和转换

3 对表操作

3.1 创建表

操作语句: create table 表名(列名 类型,......);

要想对表进行操作,首先要选中一个数据库

varchar(20) -- 里面的20代表可以存放的字符数量

注意:表名也是不可以重复的,同时也不可以是关键字,若非要用关键字当表名,就需要将表名用反引号引起来.

 反引号: ` `

 3.2 查看库中所有的表

操作语句: show tables;

3.3 查看表中结构

操作语句: desc 表名; 

详情见图.

3.4 删除表(慎重操作)

 操作语句:drop table 表名;(图中的表名是关键字比较特殊,用了反引号)

3.5 小知识:注释

-- 后面为注释

comment 后面为注释

4 表的增删查改(基础)

4.1 新增

4.1.1 单行/多行新增

操作语句: insert into 表名 values(数据,数据,......);

对于字符串可以使用单引号也可以使用双引号

上述为单行新增,还可以一次性新增多行

 一个括号相当于一行,新增时在行与行之间用逗号隔开.

4.1.2 对指定列新增

操作语句: insert into 表名(列名,......) values(数据);

在新增时,无论是指定列新增,还是行新增,数据和类型都要对应上.

4.2 查询(重点)

4.2.1 查询表里面的全部内容

操作语句: select * from 表名;

*相对于通配符,会显示全部数据

数据中没有被赋值的列会设置为null

4.2.2 查看指定列的内容

 操作语句: select 列名,列名... from 表名;

4.2.3 在查询时进行计算

 将要查询的列以表达式的形式输入,得到的结果就是表达式的结果

注意:计算后得到的表示一个临时表,原来表中的内容不会改变

表达式中的内容也可以是列与列之间的运算

 4.2.4 查询时起别名

第一种方法

操作语句: select 列,列 别名,... from 表名; 

在想要起别名的列后面加上别名即可

第二种方法

再第一种方法的基础上,在别名前加上as即可,这种方法更便于区分别名

4.2.5 查询时去重

在select 后面 加上distinct 

会对后面的指定列或者*进行去重

只有一列则把这一列重复的数据隐藏

多列,则将数据相同的两行隐藏一行

4.2.6 查询时排序(order by)

从上到下为从小到大排序: 

在语句末尾加上order by asc(asc可加可不加 默认为从小到大排序)

从上到下为从大到小排序:

order by 后面加desc

注意:如果数据中有null值,那么null值会按照最小值排列(无论其他数据有多小,null就是最小的)

4.2.7 多种排序方法排序

在不同的排序方法中间用逗号隔开

在排序时,先按照第一种进行排序,当第一种排序中出现有多行排序的数据相同时,会将这几行(某个)数据相同的行按照第二种方法排序

4.2.8 条件查询(where)

条件查询可以使用的比较运算符

>:大于,< :小于,>= :大于等于,<=: 小于等于

=: 等于,无法比较null与null相等, <=>: 可以比较null与null相等

!=: 不等于

between a1 and a2: 范围匹配[a1,a2] 

in(option,...): 括号中的option均为可匹配的数据(后面会细说)

is null: 判断是null,  is not null: 判断不是null

like:模糊匹配(后面会细说)

条件查询可以使用的逻辑运算符

and: 两边都为true才为true 相当于Java的&&

or: 两边有一个true就为true 相当于Java的||

not: true则为false,false则为true 相当于Java的!

 操作语句: select ... from 表名 where 条件;

在where语句后面也可以加order by去排序

in的用法

操作语句: where 列名 in(数据,...);

会在表中查询符合括号中的数据

like的用法

(1) % 的用法

 

代表通配符,可以代指0个1个多个字符,再根据 前后的字符在表中去匹配相似的数据

(2) _的用法

和 相比,只通配一个字符

4.2.9 分页查询(limit和offset)

limit用法: limit 后面加上要显示的行数 

代表显示的总行数,如图,limit后面为5 则只显示5行(不足5行,就显示不足5行的数据) 

limit作用在结尾处,在where 和 order by 后面

 

offset用法: offset 后面加上起始行数的位置

位置和limit相同,有limit则在limit后面使用,

假如一共有十行,那么offset 5 就会把前5行省略,从第6行开始显示

在limit后面 offset可以被逗号代替

4.3 修改update(慎重操作)

操作语句: update 表名 set 列的修改,列的修改,... where 条件(若不填写条件则全被修改);

后面也可以用order by、limit去修饰

 可以用表达式进行修改

如果数值为null,则无法修改(因为null值无法进行运算)

虽然相对于删除,修改要安全很多,但是也是危险操作,要慎重对待

4.4 删除delete(慎重操作)

操作语句: delete from 表名 where 条件;

删除的条件与修改(update)的条件相同

都可以使用order by 和 limit

5 数据库约束

5.1 什么是约束

数据库约束是作用在列上的,在创建表时,将约束加在列的后面,就可以达到对列约束的作用(一个列上可以有多个约束).

下面对一些重要的约束进行讲解

5.2 not null约束

列后加上not null 代表这一列不可以为空

5.3 unique约束

列后加上unique 代表这一列不可以出现重复的数据

如上图,对id一列进行unique约束后,新增数据时出现的第二个1就对其进行了报错

5.4 primary key 主键约束

primary key 相当于 not null unique 的同时使用

在一个表中只可以有一个主键约束,但是其他的约束不受限制

如果想要多个与主键约束相同效果的列,可以使用 not null 和 unique 的联合使用

注意: 使用多个约束,约束直接只有空格隔开即可

除此之外,主键中还有一个自增主键

auto_increment 自增主键

自增主键使用在主键之后,如下图 

效果: 有了自增主键之后,在主键列可以赋为空值(null),当赋null之后,它会自动生成一个与前面不重复的值,并且这个值是前面的最大值+1,如下图.

特殊: 如果库中的数据个数过高(比如2的31次方),则要考虑分库分表

5.5 default约束

default约束,可以设置默认值

设置的默认值放在default后面

5.6 外键约束froeign key(重要)

外键设置在表中,看起来像单独一列

 操作语句: foreign key (子表中被约束的列) references 父表(父表中的主键/unique列)

父表: 设置主键并且约束别人的表

子表: 设置外键并且被别人约束的表

特点: 子表中的被约束列必须在父表中存在,并且父表中已经约束子表的行不可以进行删除操作,对约束列也不可以进行修改

6.表的设计

 

 

 7 表的增删查改(进阶)

7.1 新增

操作语句: insert into from 表名 select ....; 

可以将查询到的结果直接新增到表中,不过新增过来的数据要保证列数及其数据类型与原表一致

7.2 聚合查询

注意: 聚合函数中的括号与函数名要紧密相连,中间不可以有空格,在()中可以有表达式可以可以其别名

常见的聚合函数有:

(1) count() 计算行数

 

当计算*时,会将全null的行也算入

 

当计算某一列时,则不会将null行算入

(2) sum() 求和

求和函数中 列的数据不是数字没有意义

(3) avg() 求平均数

(4)max() 最大值 和 min() 最小值

 7.3 分组查询(group by)

分组查询相当于把相同的数据整合到一起,所以分组查询一般和聚合函数一起使用

where在group by前面使用,对整体的数据进行修饰

having在group by后面使用,对分组后的数据进行修饰

7.4 联合查询(多表查询)

7.4.1 内连接

方法一: 

联合查询的本质上是将多个表拼合在一起,标语表之间用逗号隔开

如果不加where会将所有的情况都排列出来.

假如一个表中有2行数据,另一个表中有4行数据,那么将他俩联合查询会出现8条数据(查询全部数据)

在查询时,如果两个表中的列有重名的情况,可以在列前加上 表名.  来区分不同的列

方法二:

和方法一不同的是 方法二在表与表之间用了join on

操作语句: select ... from 表名 join 表名 on 条件;

这里的on相当于where

7.4.2 外连接

内连接方法二 的基础上,在 join 前加上 leftright ,表示即使条件不匹配,也会将 左表/右表 中的数据完全展现,与其相对应的 左表/右表 中的数据会用null来代替(即使有 not null 修饰)

7.4.3 自连接

 自连接顾名思义,是自己与自己连接

使用场景:行和行的运算

在自连接中,表名必须要起别名

7.4.4 子查询(不建议用)

子查询是将多条查询语句合并到一条查询语句中

比如:

1.单行返回结果的子查询

2.多行返回结果的子查询(用in接收)

7.4.5 合并查询

操作语句:select ... union select ...

union的使用条件是两个查询的两个结果集中列数、列名、类型都必须完全一致

它可以用作单个表,也可以用作多个表

并且union会进行自动去重,而union all 不会进行去重

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

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

相关文章

PHP视频网站用wamp、phpstudy运行定制开发mysql数据库BS模式

一、源码特点 PHP视频网站是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库系统主要采用B/S模式开发,开发环境为PHP APACHE&#xff0c;数据库为mysql5.0&#xff0c;使 用php语言开发 PHP视频网站用wamp、phpstu…

21. [Python GUI] PyQt5中的模型与视图框架-抽象模型基类QAbstractItemModel与自定义模型

PyQt5中的抽象模型基类QAbstractItemModel与自定义模型 一、关于QAbstractItemModel类 QAbstractItemModel类继承自QObject&#xff0c; 该类是Qt所有模型类的基类&#xff0c;用于管理模型/视图结构中的数据。Qt的所有模型都需要子类化该类。注意&#xff0c;该类是抽象类&am…

数字孪生应用方向展示

昨晚&#xff0c;2022年卡塔尔世界杯正式打响&#xff01;伴随开幕式的进行&#xff0c;由中国铁建城建的卡塔尔世界杯主场馆卢赛尔体育场惊艳全球。事实上&#xff0c;在数字孪生技术的加持下&#xff0c;体育场馆建设也是重点技术应用方向之一&#xff0c;今天就为大家重点展…

java读取文件

先看项目截图 public class FileTest {public static void main(String[]args) throws IOException {String path Objects.requireNonNull(FileTest.class.getClassLoader().getResource("")).getPath();System.out.println(path);System.out.println("****…

微信“史诗级”更新,小而美终于回来啦~

最近微信安卓版又有了更新&#xff0c;版本号也来到了8.0.30。 此次更新又被业界称之为“史诗级”更新&#xff0c;主要原因是新版本微信安装包体积缩小了10M。 没错&#xff0c;你没有看错微信的安装包真的缩小了&#xff0c;而且整整缩小了10M&#xff01; 天呐&#xff0…

MyBatis从入门到精通真没那么难!跟着我带你深入实践Mybatis技术原理与实战!

什么是Mybatis mybatis 是一个优秀的基于java的持久层框架&#xff0c;它内部封装了jdbc&#xff0c;使开发者只需要关注sql语句本身&#xff0c;而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。 mybatis通过xml或注解的方式将要执行的各种 statemen…

跨平台应用开发进阶(四十五)uni-app集成企微客服实战

文章目录一、前言二、功能实现2.1 环境准备2.2 代码层面2.3 拓展工具三、拓展阅读一、前言 应用运营过程中&#xff0c;考虑接入企业微信客服功能&#xff0c;大致看了下官方接入文档&#xff0c;并不困难&#xff0c;引入代码量也不大。按照手册来操作即可。 二、功能实现 …

Go Module的基本使用

go module是类似于java中的maven,是包的管理工具&#xff0c;在没有这个go module之前&#xff0c;都是配置本地的GOPATH&#xff0c;创建的每个项目也都必须创建在这个GOPATH的src目录下&#xff0c;且项目的go文件不能重名 go module是在go1.1.1版本推出的 开启go module 在…

装配式施工在建筑装修中的应用研究

目 录 摘 要 I Abstract II 1引言 1 2装配式施工在建筑装修中的发展背景及现状 2 2.1装配式施工在建筑装修中的发展背景 2 2.2建筑装饰行业现状 2 3装配式施工在建筑装修中体系的主要特点 3 4装配式施工在建筑装修中体系的构成 4 4.1八大系统 4 4.1.1集成卫浴系统 4 4.1.2集成厨…

【App自动化测试】(二)Appium环境部署

目录1. Appium生态工具2. Appium环境安装部署2.1 Appium 环境依赖说明2.2 第一步&#xff1a;安装JDK2.3 第二步&#xff1a;安装SDK2.4 第三步&#xff1a;安装Appium2.5 第四步&#xff1a;安装appium python client2.6 第五步&#xff1a;安装appium-doctor检测appium的安装…

Metabase学习教程:视图-1

你应该用哪个图表&#xff1f; 您应该使用哪种类型的图表和图表来最好地传达来自数据的见解&#xff1f;这将有助于你选择正确的工作。 选择正确的图表可以归结为两个问题&#xff1a;数据是什么样子的&#xff0c;以及您试图传达什么&#xff1f; 让Metabase为您选择图表 …

Day01-网页结构分析

网页结构分析 一 前言 姓名&#xff1a;陈云 TEL&#xff1a;18571593511 企业用人的两个标准 1.能干活,见到需求能反应出粗线条实施计划,起手实施后能自主预判和解决坑点,直至完成. 2.对某些敏感点理解较准确,有一定潜质做个性化封装和技术选型工作,应对突发状况,避免生…

SpringBoot--通过JSON传递请求参数--方法/实例

原文网址&#xff1a;SpringBoot--通过JSON传递请求参数--方法/实例_IT利刃出鞘的博客-CSDN博客 简介 本文用示例介绍SpringMVC如何通过JSON格式传递入参。 JSON格式使用post方式来请求&#xff0c;即&#xff1a;对应的注解为&#xff1a;PostMapping。 PostMapping注解的方法…

Vue学习笔记

课程来源&#xff1a;https://www.bilibili.com/video/BV1Zy4y1K7SH?p4&vd_source6f37192b213c98639a87ec77b26d105d 学习计划&#xff1a;一天学10节&#xff0c;从第四节开始做笔记&#xff0c;预计16天完成&#xff08;完成日期2022年12月7日&#xff09; 目录&#…

【1】Anaconda基本命令以及相关工具:jupyter、numpy、Matplotilb

目录 一、Anaconda ◼ anaconda命令行操作 二、jupyter notebook 1 jupyter的基础使用 ◼ jupyter的启动 ◼ ipynb文件的新建、重命名、删除 ◼ 菜单说明 ◼ 运行cell单元块 ◼ 编写文档笔记 2 jupyter的高级使用&#xff1a;常用魔法命令 ◼ writefile pycat run …

【Golang】来用GoLand开发第一个Go程序

​ &#x1f4d3;推荐网站(不断完善中)&#xff1a;个人博客 ​ &#x1f4cc;个人主页&#xff1a;个人主页 ​ &#x1f449;相关专栏&#xff1a;CSDN专栏、个人专栏 ​ &#x1f3dd;立志赚钱&#xff0c;干活想躺&#xff0c;瞎分享的摸鱼工程师一枚 文章目录&#x1f34a…

【JAVA程序设计】基于JAVA的坦克大战小游戏--入门级小游戏

基于JAVA的坦克大战小游戏--入门级小游戏零、项目获取一、项目简介二、开发环境三、游戏玩法四、运行截图零、项目获取 获取方式&#xff08;点击下载&#xff09;&#xff1a;是云猿实战 项目经过多人测试运行&#xff0c;可以确保100%成功运行。 一、项目简介 本项目是基于…

基于Java+Spring+Strusts2+Hibernate 社区智慧养老服务平台 系统设计与实现

一.项目介绍 本系统分为前端 和 后端 两块&#xff0c; 前端包括&#xff1a;首页、健康新闻、疾病预防、养生之道、动态通知、登录和注册 各模块的文章点击查看&#xff0c;支持评论以及回复功能&#xff0c; 登录成功之后点击欢迎您:后面的账号即可进入后台管理 后端包括&…

老杨说运维 | 非常重要,事关转型

《荀子》有云&#xff1a;“水能载舟&#xff0c;亦能覆舟。”在公司日常运营过程中&#xff0c;数据指标就像是水&#xff0c;孕育着生命&#xff0c;承载着万物。科学的数据指标能指引公司在正确的道路上不断前进&#xff0c;使平淡无常的业务焕发新生&#xff0c;而不合理的…

Qt QUndoStack、QUndoCommand(实现撤回和回撤)

用到的类: 1 QUndoStack&#xff1a; 一个存放 QUndoCommand 命令的栈. 2 QUndoCommand&#xff1a;The QUndoCommand class is the base class of all commands stored on a QUndoStack. 3 QUndoView&#xff1a;The QUndoView class displays the contents of a QUndoStack.&…