MySQL操作

目录

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 外键约束foreign 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 外键约束foreign 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 不会进行去重

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追梦不止~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值