【数据库基础】Mysql基本概念讲解与实操

news2025/1/12 15:50:53

文章目录

  • 数据库基础
    • 服务器,数据库,表关系
    • Mysql的架构
    • Sql分类
  • 库的操作
    • 修改默认的编码格式
    • 两种校验
    • 修改数据库
    • 删除数据库
    • 备份和恢复
    • 观察用户,查看连接
  • 表的操作
    • 修改表字段长度
    • 删除某一列
    • 修改表名
    • 修改列名称
  • 数据类型
    • 小数类型
    • float
    • decimal
    • 字符串类型
    • char
    • varchar
    • 日期时间
    • enum 和 set
  • 表的约束
    • 空属性
    • 默认值
    • 列描述
    • zerofill
    • 主键
    • 复合主键
    • 自增长
    • 唯一键
    • 外键
    • 表的操作
    • NULL的比较
    • and / or
    • in
    • 模糊匹配
    • order by
    • limit
    • REPLACE
    • update 语句
    • 删除
    • 插入查询结果
  • 表的筛选字段
    • group by
    • having
    • interval
    • mysql的字符串函数
    • conv
    • 向上,向下取整
    • ifnull
    • union
    • union all
  • 总结


数据库基础

为什么要有数据库?
文件保存的缺点:安全性,文件删除,文件可能被用户恶意访问。
进程将数据从文件刷新到文件,而且要是刷新的数据过大,导致操作失败。

即文件的保存是不靠谱的

数据库是一个具有客户端,具有服务端的网络程序。
通过netstat -nltp 可以查看到mysql是一款ipv6的一款网络程序,占用3306的端口号。
在这里插入图片描述
[ljh@iZwz9dzqma1ozj0ll6l9qpZ 9.23]$ mysql -uroot -p
通过mysql命令行,输入密码就可以登入mysql 了。注意,这里用mysql -uroot -p 登入实际上我是一个客户端。

mysql> show databases;
通过show databases;可以查看有哪些数据库。
在这里插入图片描述

服务器,数据库,表关系


在这里插入图片描述
vim /etc/my.cnf 可以查看到这个数据库的文件
在这里插入图片描述

通过观察 /var/lib/mysql的时候可以查看有如下文件,其中我建的数据库ljh
在这里插入图片描述
也就是所谓的数据库,实际上就是/var/lib/mysql 当中的一个文件夹

create database ljh;就可以创建一个数据库。

mysql> use ljh; Database changed
就可以切换到ljh这个数据库使用。

创建表的操作 create table [if not exists 不存在创建] + 表名(数据类型)引擎,编码

mysql> create table if not exists user( name varchar(8) not null, age int not null ) engine=InnoDB default charset=utf8;

通过show tables;指令可以查看到这个数据库的表。在这里插入图片描述
通过desc + 表名 可以查看到该表具有的字段。
在这里插入图片描述
紧接着我们看看文件夹下面多了哪些文件,可以看到多了两个文件

  • user.frm表示表的数据
  • user.idb表示表的索引

在这里插入图片描述
在linux中,Mysql 在数据库的创建表结构,其实只是创建若干个普通文件。

也就是mysql client 命令行输入命令时,就可以让MySQL帮我们处理数据的存储

总结:

  • 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,
  • 一般开发人员会针对每一个应用创建一个数据库。
  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。

插入记录
mysql> insert into user ( name,age) values('张三',19);

查看插入记录
mysql> select * from user;
在这里插入图片描述

插入的时候我们观察表的数据大小,发现数据并没有刷新到文件。并且即使client 进行quit,该文件也不一定就会变大。
在这里插入图片描述

Mysql的架构

Mysql 是一个可移植的数据库,即源代码在任意平台下都可以进行跑,实际上只需要动态调用不同平台的系统调用就可以实现可移植性,通过条件编译来完成。如 Unix/Linux、Windows、Mac 和Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。

Client Connections 表示客户端可以用什么语言进行连接。
Connetction Pool:类似reactor,对于连接进行管理
Sql Interface …:词法,语法分析,sql调优
Pluggable Storage Engines :表示用哪一个存储引擎实现用户的操作
文件系统: 往哪放

在这里插入图片描述

Sql分类

  • DDL【data definition language】 数据定义语言,用来维护存储数据的结构代表指令: create, drop, alter
  • DML【data manipulation language】 数据操纵语言,用来对数据进行操作代表指令: insert,delete,update
    • DML中又单独分了一个DQL,数据查询语言,代表指令: select
  • DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务
    代表指令: grant,revoke,commit

库的操作

修改默认的编码格式

default-storage-engine=INNODB
character_set_server=utf8
在my.cnf加上以上几行,reboot或重启mysqld,
mysql>show variables like '%storage_engine%';
在这里插入图片描述

mysql>show variables like 'character_set_%';
在这里插入图片描述

两种校验

校验是指调用select 之后的结果,通常编码我们采用utf8,那么校验规则会有不同的选择,接下来介绍两种不同的校验规则引起select的结果不同。

show variables like 'collation_database';
在这里插入图片描述
show variables like 'character_set_database';

在这里插入图片描述

对数据进行增删查改,都得对数据进行对比,比如插入的时候用utf8,但插入的时候用lation进行校验,那么就会出现问题、

创建一个用utf8_general_ci 的表。
create database test1 collate utf8_general_ci;

通过下面指令查看数据库的信息。
mysql> show create database test1;
在这里插入图片描述

此时通过mysql> show create table person\G;也可以看到该表的引擎和默认编码都已经是我们设置在my.cnf的。

在这里插入图片描述
插入 a A b B的数据
mysql> insert into person values('a');
在这里插入图片描述
mysql> select * from person where name='b';
查看过后发现它默认是不区分大小写的。
在这里插入图片描述

改变校验方式:
创建test2的表,用 utf8_bin 的校验规则。
mysql> create database test2 collate utf8_bin;

mysql> show create database test2;
查看校验规则,此时时utf8编码,utf8_bin校验。
在这里插入图片描述

mysql> create table person (name varchar(20)); 我们依旧采用创建person 表的方式,插入同样的字符。
在这里插入图片描述

奇迹发生:
此时校验规则,筛选出来的数据集没有‘A’了
在这里插入图片描述

并且不只如此,调用order by 也会有所不同。
mysql> select * from person order by name;
表一:utf8_general_ci
在这里插入图片描述
表二:utf8_bin
在这里插入图片描述

推荐编码:utf 8 ,校验 utf8_general_ci,默认不填写校验的时候是和utf8_general_ci相同的,当然也有编码集可以显示表情包之类的。
好了,这样子不同的校验规则带来的不同也是显而易见了~

默认情况:
在这里插入图片描述

注意/*!40100 DEFAULT CHARACTER SET utf8 */不是注释,而是表示当前mysql版本大于4.01版本则编码用utf8.

数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字

修改数据库


数据库的修改尽量是在前期,后期的话倘若修改的话实际上是不好的。
ALTER DATABASE db_name [alter_spacification [,alter_spacification]...]

删除数据库

drop databases xxx;

备份和恢复

mysqldump -P3306 -u root -p 密码 -B 数据库名 > 数据库备份存储的文件路径

mysql内部有日志,bin,undo,redo,通过日志就能够将先前的sql语句获取出来,我们可以重定向到文件,然后拿到这个backup.sql。 后续可以拿backup.sql进行恢复。
[ljh@iZwz9dzqma1ozj0ll6l9qpZ ~]$ mysqldump -P3306 -uroot -p -B ljh > backup.sql;
在这里插入图片描述

mysql> drop database ljh;先删库,然后恢复

然后通过source 调用sql 就能够恢复ljh这个数据库了。
mysql> source ./backup.sql
在这里插入图片描述
-B选项若没有带上,则需要自己手动创建ljh这个数据库,之后才能执行./backup.sql

当进入数据库use ljh;,可以通过show tables;观察有哪些表。

观察用户,查看连接

mysql> show processlist;
在这里插入图片描述

表的操作

语法:

CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;

  • field 表示列名
  • datatype 表示列的类型
  • character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准
  • collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准

先创建一张表。

mysql> create table if not exists users(
    -> id int,
    -> name varchar(20) comment '用户名',
    -> password varchar(30) comment '用户的密码',
    -> birthday date comment '生日'
    -> ) engine=InnoDB default charset=utf8;

又新增两个字段,
在这里插入图片描述

mysql> insert into users values(1,'a','b','1982-01-04'),(2,'b','c','1984-01-04')

在这里插入图片描述

mysql> alter table users add path varchar(100) comment '图片路径' after birthday
先前数据默认为NULL
在这里插入图片描述

comment 语句当我们通过 show create table + 表名 的方式就可以看到有字段的注释。
在这里插入图片描述
再插入一条语句。
mysql> insert into users values(3,'c','c','1983-03-04','/var/lib');
观察现象:
在这里插入图片描述

修改表字段长度

mysql> alter table users modify name varchar(40);
在这里插入图片描述

删除某一列

mysql> alter table users drop path; 在这里插入图片描述

修改表名

mysql> alter table users rename to student;
在这里插入图片描述

修改列名称

mysql> alter table student change password passwd varchar(30); 在这里插入图片描述

数据类型

在这里插入图片描述

在这里插入图片描述

bit[(M)] : 位字段类型。M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。

bool 类型底层是以tinyint来维护的。
mysql> create table stu(name varchar(30),sex bool);在这里插入图片描述
在这里插入图片描述

小数类型

float

float[(m, d)] [unsigned] : M指定显示长度,d指定小数位数,占用空间4个字节.

小数:float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入

四舍五入体现在哪里?
mysql> create table stu (id int,salary float(4,2));
在这里插入图片描述

在这里插入图片描述
可以看出这里的的m指的是整数+小数的位数,d是小数的位数,也就是小数和整数都是固定长度的。
在这里插入图片描述

decimal

decimal(m, d) [unsigned] : 定点数m指定长度,d表示小数点的位数

规则类似于float。
mysql> create table t2 (id int,salary decimal(4,2));
在这里插入图片描述

上述发现和float没有区别。其实是精度上面有区别。
原因:因为有些数据,小数部分乘二取整,有一些是取不到1的,所以转化的时候会有精度丢失。

验证:
创建表
mysql> create table t3 (salay1 float(10,8),salay2 decimal(10,8));
插入一个小数点后8位的数。
mysql> insert into t3 values(12.12345678,12.12345678);

检查结果:
在这里插入图片描述
说明:float表示的精度大约是7位。

  • decimal整数最大位数m为65。支持小数最大位数d是30。
  • 如果d被省略,默认为0.如果m被省略,默认是10。
    建议:如果希望小数的精度高,推荐使用decimal。

字符串类型

char

mysql 的char是字符串类型,最大长度为255.若要更大的则选择BLOG或者TEXT类型。固定长度字符串。
在这里插入图片描述

create table t4 (text char(1));
在这里插入图片描述

若修改时出现不能插入整数的情况:
在这里插入图片描述
则把latin1弄成utf8
具体方法

  • su-
  • vim /etc/my.cnf
  • 添加 character-set-server=utf8
  • service restart mysqld
  • 此时创建一个数据库

由于我的数据库没有什么东西,我直接删掉重新创建。
在这里插入图片描述
验证结果:可以存下一个汉字,汉字可不是一个字节。所以我们称mysql下的char为“字符” ,中英文都可!!
在这里插入图片描述

mysql的char类型让我们使用起来更简单了。

但是mysql更多人使用varchar 来定义变量,接下来介绍varchar

varchar

varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节

首先和char一样,他的“字符”也是汉字或字母!
在这里插入图片描述

varchar长度可以指定为0到65535之间的值(字节),但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532(字节)。
但是我们设置的时候最多只能为21844; 因为utf8 是3字节/1字节。当然这种情况表格当中只能由一个字段,才能到达21844.既不能即定义varchar(21844),又定义其他字段。
在这里插入图片描述

可变长度,如何理解?
类似string扩容,需要size,capacity来辅助进行扩容,所以需要一些数据记录长度。
但是如果我是定义varchar(1024);那么我们一开始只放1字符,实际上他一开始不会开到1024,浪费空间。所以平日用的比较多。

varchar vs char

  • varchar的表示范围大于char
  • varchar 可以动态扩容,相对来说节省空间。

如何选择定长或变长字符串?

  • 如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5
  • 如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去。
  • 定长的磁盘空间比较浪费,但是效率高。
  • 变长的磁盘空间比较节省,但是效率低。
  • 定长的意义是,直接开辟好对应的空间
  • 变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。

日期时间

date 年月日
datetime 年月日 + 时分秒
timestamp 默认进行设置,就是当前时间,年月日 + 时分秒的格式。

mysql> create table birthday (
    -> t1 date,
    -> t2 datetime,
    -> t3 timestamp);

在这里插入图片描述
在这里插入图片描述
mysql> update birthday set t1='2000-01-01'; 当你通过update 进行更新的时候,它会自动更新t3
字段。
在这里插入图片描述
select now()now() 可以显示当前的 年月日 + 时分秒
在这里插入图片描述
如果我们需要获取之前注册的值,而非当前时间,可以通过mysql> insert into birthday (t1,t2) values('2000-01-01',now());此时t2,t3的时间相同。
在这里插入图片描述
但如果我们再次更新时间,如果是类似用户的注册时间,那么t2就能很好的表示了。
在这里插入图片描述

enum 和 set

enum 和 set 和 C ++ 不太相同!

enum:枚举,“单选”类型;
enum(‘选项1’,‘选项2’,‘选项3’,…);

即多选一
你的性别::
o男 o女

set:集合,“多选”类型;
set(‘选项值1’,‘选项值2’,‘选项值3’, …);

即多选多
你喜欢的水果:
[]苹果 []香蕉 []葡萄 []哈密瓜

为什么说类型有着约束的作用:
sex char(); 如果这样设置那么sex可以填写’男’,‘女’,‘A’,这个’A’就很莫名其妙了,这就是类型char没有起到约束。
所以说sex enum 这样就不会乱套!!

mysql> create table votes( name varchar(16), sex enum('男','女'), hobby set('登山','游泳','打篮球','rap'));

插入两条正确的数据看看:
mysql> insert into votes values('张三','男','登山');
mysql> insert into votes values('李四','男','登山,游泳');

在这里插入图片描述
尝试插入错误的数据
性别错误:
mysql> insert into votes values('王五','A','登山,游泳');
在这里插入图片描述
集合没有开飞机错误:
mysql> insert into votes values('王五','男','开飞机');
在这里插入图片描述

总结:
集合和枚举的特点就是只要不在其中的选项mysql都会报错。只不过enum 多选一,set 则多选多(一)

小特性:
enum 相当于数组维护着,只不过是用1开始的,若是男女,则是1,2;
mysql> insert into votes values('赵六',1,'登山');
在这里插入图片描述
set 也有,只不过set稍微有点不同,他是相当于比特位进行使用,1表示登山,2表示游泳,3则是登山+游泳。相当于一个比特位意味着一个运动。
在这里插入图片描述
结果和上面所说的一样。
在这里插入图片描述
同理
在这里插入图片描述

不过数字这种方式可读性不好,直接用字符串比奥是就可以了,这里只是提一嘴~

集合的查找需要用find_in_set(sub,str_list):
如果 sub 在 str_list 中,则返回下标;如果不在,返回0; str_list 用逗号分隔的字符串。
在这里插入图片描述

在这里插入图片描述
mysql> select * from votes where find_in_set('登山', hobby) and find_in_set('游泳',hobby); 如果需要查询多个兴趣,需要用and 连接
在这里插入图片描述

表的约束

空属性

NULL、这个NULL能够约束上层是否必须要填写这个字段。

mysql> create table if not exists myclass ( class_name varchar(32) not null,root_name varchhar(48) not null));

在这里插入图片描述
mysql> insert into myclass(class_name,root_name) values('123','123');
若没有正常插入:
ERROR 1364 (HY000): Field ‘root_name’ doesn’t have a default value
在这里插入图片描述

默认值

一种数据一般为哪个值,那么我们就给默认值。比如我们是一所理工类院校的计算机学院的学生,那么我们选课表当中默认给性别为男生,这合理吗,还是很合理的~

mysql> create table if not exists t2(
    -> name varchar (32) not null,
    -> age tinyint unsigned default 18,
    -> sex char(1) default '男'
    -> ) engine=Innodb default charset=utf8;

如下图,不能为null,其实就没有必要默认值了。
在这里插入图片描述

mysql> insert into t2(name) values('唐三藏');
在这里插入图片描述

设置NOT NULL 可不可以同时设置default 值?
可以的

mysql> create table if not exists t13(age int not null default 18,name char(16) not null);
在这里插入图片描述
只插入name,age有默认值不为null可以正常插入的!
mysql> insert into t13 (name) values('张三');
在这里插入图片描述
语义上:
NOT -> 不可能插入空值 -> 不能使用默认
DEFAULT -> 默认允许不给该列插入 -> 如果没有,就默认
实际上:
DEFAULT 的语义强于NOT NULL;即便为NOT NULL,也可以插入空。

列描述

相当于注释,通常说明列是用来做什么的?

mysql> create table if not exists t14( name varchar(32) not null comment '姓名', age tinyint unsigned default 18 comment '年龄,默认为18岁', sex char(1) default '女' comment '用户的性别,学校为女子院校' );
tinyint 为1字节,能表示 -128~127;
tinyint unsigned为1字节,能表示 0~255;
显示表的详细信息的时候就能看到这些字段。
mysql> show create table t14\G;
在这里插入图片描述

zerofill

表示输出的时候填充上0,超过位宽则不会补0.int(10),表示位宽是10,如果是有符号会多一位,放负号。

mysql> alter table t15 change a a int(10) zerofill default 10;
插入正常数据时:
mysql> insert into t15(a,b) values(123,321);
在这里插入图片描述
在这里插入图片描述

主键

主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型。

mysql> create table t16 (id int primary key,name varchar(30) );

在这里插入图片描述

复合主键

符合主键就是将多个列作为主键。
mysql> create table t17 (id int,school_id int,primary key(id,school_id));
查看表格,我们可以看到有两个PRI主键。
在这里插入图片描述
可以看出,只有复合主键所有的列值都出现冲突,才算主键冲突。

在这里插入图片描述
删除主键:
mysql> alter table t17 drop primary key;

自增长

只有主键所在列才能够自增长。
auto_increment 所在列是可以不填写,插入的时候需要指定插入的列即可。
创建表
mysql> create table t18 (id int unsigned primary key auto_increment,name varchar(18));
查看表结构,
在这里插入图片描述

mysql> insert into t18 (name) values('张三'); 我仅仅插入名字这一行,虽然id不允许为null,但是没出错。这是因为Extra 字段显示auto_increment 表示该列能够自增长。

在这里插入图片描述

自增长会随着上次设置的id往后走。
在这里插入图片描述

唯一键

一张表中有往往有很多字段需要唯一性,数据不能重复,但是一张表中只能有一个主键:唯一键就可以解决表中有多个字段需要唯一性约束的问题。
唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。

唯一键: 唯一性 + 约束性
主键是唯一的,唯一键也是唯一的,从这里看只有唯一键为空这一点有所不同。

由于主键具有唯一性,我们也有很多具有唯一性的属性,我们通常选择与挑选业务无关的id作为主键,其他字段设置为唯一键。

创建表
mysql> create table t20 (id int primary key,name varchar(32),tele char(32) unique);
KEY栏可以看见tele为UNI为唯一键。
在这里插入图片描述
插入之后若主键重复或者唯一键重复都会报错!!
在这里插入图片描述

外键

定义:
外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

下面哪个是主表?哪个是从表?
在这里插入图片描述
答案:
班级表是主表,因为班级表不需要依附于学生表就能存活。
学生表是从表,因为class_id字段若是不能去班级表进行查找,也不能知道学生所在班级。
要求班级表的id必须是主键或唯一键。

外键 vs 外键约束
外键是指具体列,有外键不一定有外键约束;
外键约束就是外键预期想达到的效果。

相当于创建学生表没有使用 foreign key (字段名) references 主表(列),两个表没有产生联系,这时候只能说具有外键,但是没有外键约束。

表的操作

NULL的比较

在这里插入图片描述
在这里插入图片描述
假设我们现在有t21这张表;
在这里插入图片描述
错误比较:
mysql> select *from t21 where name=NULL;
Empty set (0.00 sec)

正确的比较方式
mysql> select *from t21 where name <=> NULL;
在这里插入图片描述
select *from t21 where name is NULL;在这里插入图片描述
mysql> select id from t21 where id <> 2;
mysql> select id from t21 where id != 2;
不等于的比较
在这里插入图片描述

and / or

and就是两个条件必须同时成立
or表示两个条件满足一个即可。
between xx and xx 表示一段范围

in

in表示是否在这个集合。
在这里插入图片描述

模糊匹配

LIKE,可以用%或者_ 搭配使用,%可以匹配一批,_可以匹配一个字符。
在这里插入图片描述

order by

order by在语句当中是靠后执行的
select name,english+chinese+math total from exam_result order by total desc; order by 是在select 将表结构弄出来之后才排序的。
试想万一我的表有百万条数据,他不会全部排序后才进行选择。

limit

limit 可以限定输出的条数,他执行的过程要晚于order by,我们一般在表结构比较大的时候通常可以带上limit。
limit一般跟在order by 的后面。

mysql> select *from votes limit 0,3; limit 可以指定从哪一条记录开始,从0开始,找几条。经常被用作分页功能。
在这里插入图片描述
limit 搭配 offset 也能实现上述效果。
mysql> select *from votes limit 3 offset 0;
在这里插入图片描述

REPLACE

REPLACE 若表中出现了重复的,就进行替换,没有则进行插入,类似map当中的operator[]操作。

REPLACE INTO students (sn, name) VALUES (20001, 'zhangsan');

update 语句

mysql> update votes set sex='女';
没有加入筛选条件,就会导致所有人的性别都被改成女了。
所以update 实际上是一个很危险的语句。

在这里插入图片描述
mysql> update votes set sex='男' where name='赵六';
在这里插入图片描述

删除

delete 和 truncate
delete 语句会记录在日志当中。
mysql> delete from votes;
如果是这样,表当中的数据都没有了。
跟update一样,删除动作也同样危险
在这里插入图片描述
如果表中有auto_increament,表中不会重新从0开始。

mysql> truncate table t2; 则什么都没有,不会记录在日志。

插入查询结果

语法:
INSERT INTO table_name [(column [, column …])] SELECT …

类似往一张原始数据表查询想要的插入另一张表,可以用来去重插入。

创建表
mysql> CREATE TABLE duplicate_table (id int, name varchar(20));
插入重复数据
mysql> INSERT INTO duplicate_table VALUES (100, 'aaa'), (100, 'aaa'), (200, 'bbb'), (200, 'bbb'), (200, 'bbb'), (300, 'ccc');

在这里插入图片描述
select 语句通过distinct可以实现去重
mysql> select distinct * from duplicate_table;
在这里插入图片描述
如果需要把去重后的数据进行插入。
创建表结构
mysql> create table no_duplicate_table (id int,name varchar(20));
插入duplicate表中不重复的数据到no_duplicate_table中。
mysql> insert into no_duplicate_table select distinct * from duplicate_table; 在这里插入图片描述

为什么可以进行上述操作?
select 是往显示屏显示一个表结果,insert之后相当于把向显示屏上输出的内容插入到表当中。
实际上有一点重定向的味道了~

若要对两个表进行重命名:
一定要通过RENAME,通过备份修改好后进行换名字。一般除非数据库设计不合理,出现大量重复数据,此时才能用这种方法,先把不重复的数据跳出来做备份,然后交换两个表的名字。
– 通过重命名表,实现原子的去重操作 RENAME TABLE duplicate_table TO old_duplicate_table, no_duplicate_table TO duplicate_table;

表的筛选字段

表的内容展示。
在这里插入图片描述

mysql> select count(chinese) from exam_result;
在这里插入图片描述

mysql> select sum(chinese) from exam_result;
在这里插入图片描述

mysql> select avg(math) from exam_result;

在这里插入图片描述

mysql> select sum(math) / count(*) from exam_result; 在这里插入图片描述

mysql> select max(english) from exam_result;

在这里插入图片描述

group by

引入scoot表,是oracle当中经典测试表。

having

having 是group by 的条件筛选的组合,对比where,having 的执行是在group by 的后面。是对分完组,做完数据聚合统计之后,进行的条件筛选。
mysql> select avg(deptno),ename from emp where ename = 'CLARK' group by deptno,ename;
where 操作在group by 的前面。having 在 group by 的后面执行。

在这里插入图片描述

mysql> select current_timestamp(); 在这里插入图片描述
mysql> select datediff('2022-06-23','1949-10-01');
datediff能够用来计算两个日期的差值。若想查询从今天开始到先前的日志信息,需要进行计算。若将日志存放在数据库当中,就可以通过这种方式查看近期的日志。

在这里插入图片描述

interval

interval 可以用来加减时间,也有date_add和date_sub实现类似的功能。

在这里插入图片描述

mysql的字符串函数

在这里插入图片描述

datetime 的类型。
在这里插入图片描述

mysql> select concat('a','b');
在这里插入图片描述
mysql> select instr('aaabbbcccddd','abb');
instr 是返回匹配的第一个,返回的是第几个字符,不是下标。不满足返回0.

在这里插入图片描述
在这里插入图片描述

mysql> select ucase('helloworld');
在这里插入图片描述
mysql> select lcase('HELLOWORLD');
在这里插入图片描述
left 从第一个字符开始,截取第二个参数个字符。
mysql> select left('helloworld',5);
在这里插入图片描述
length 显示字符的长度
mysql> select length('helloworld');
在这里插入图片描述

replace 将参数1中的参数二部分替换成参数3,hello 替换成 !!!
并且并一定需要等长替换。
mysql> select replace('helloworld','hello','!!!!');
在这里插入图片描述

strcmp 进行两个字符串的比较
mysql> select strcmp('aaa','bbb');
mysql> select strcmp('aaa','aaa');
在这里插入图片描述

substring 截取参数一中的从第二个参数开始截取,截取第三个参数个。
mysql 当中都是以字符计算,而不是下标。

mysql> select substring('abcd1234',1,4);
在这里插入图片描述

trim rtrim ltrim 就是去除表中的去除空格,去除右边空格,左边空格。
在这里插入图片描述

conv

mysql> select conv(15,15,2);
在这里插入图片描述

向上,向下取整

ceiling 向上取整 ceiling 本身有天花板的意思,在这里指向上取整。
floor 向下取整 floor 本身是地板的意思,在这里指向下取整。

ifnull

类似三目运算符,ifnull(a,b),a不是null返回a,反之返回b。

先分组后聚合。

union

union 合并两个自动是去重的。

union all

union all 不会进行去重。

总结


Mysql基本实操到此为止

  • 喜欢就收藏
  • 认同就点赞
  • 支持就关注
  • 疑问就评论

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

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

相关文章

Hystrix

一、Hystrix(豪猪)简介 1、Hystrix的设计目的 &#xff08;1&#xff09;对依赖服务调用时出现的调用延迟和调用失败进行控制和容错保护。 &#xff08;2&#xff09;阻止某一个依赖服务的故障在整个系统中蔓延&#xff0c;服务A->服务B->服务C&#xff0c;服务C故障了…

MySQL - Delete 和 Truncate 的区别

1. DELETE 命令 语法 &#xff1a; delete from 表名 [where 条件] -- 删除数据 (避免这样写, 会全部删除) DELETE FROM student;-- 删除指定数据 DELETE FROM student WHERE id 1; 2. TRUNCATE 命令 作用 : 完全清空一个数据库表, 表的结构和索引约束不会变. -- 清空 stu…

大体积mbtiles影像地图文件用什么软件浏览?

mbtiles格式简称mbt&#xff0c;是一种影像地图文件。PC端和手机端都有软件可以加载留着mbt格式的影像地图。 电脑桌面端 电脑端上的软件可以使用“图新地球”&#xff0c;直接把mbt文件拖到地图上即可&#xff0c;非常简便。 手机端 可以从华为应用商店下载“外业精灵”app…

Meta提出用向量检索来改进图像描述模型

出品人&#xff1a;Towhee 技术团队 作者&#xff1a;王翔宇 顾梦佳 随着深度神经网络的发展&#xff0c;自动图像描述技术取得了令人瞩目的进展。然而&#xff0c;现有的方法主要注重生成的描述与人类参考描述之间的相似性&#xff0c;却忽视了描述在实际应用中的特定目标。Me…

用户体验测试要怎么做?

用户体验测试是软件和应用程序开发的关键环节&#xff0c;它可以帮助团队了解如何优化产品以提高用户满意度&#xff0c;那用户体验测试要怎么做&#xff1f;下面是一些进行用户体验测试的最佳实践&#xff1a; 制定测试计划 在进行用户体验测试之前&#xff0c;您需要制定测试…

【Gradio】Could not create share link

Gradio是MIT的开源项目&#xff0c;用于构建机器学习和数据科学演示和 Web 应用&#xff0c;挺有意思的&#xff0c;感兴趣的同学可以去Gradio官网查看。 本地环境&#xff1a; - OS: Win 11 - Pyton: 3.10.11 - Gradio: 3.29.0 Gradio库的安装(Python 需要3.7 版本): - pip …

6.5 指令与文件的搜寻

6.5.1 指令文件名的搜寻 在终端机模式当中&#xff0c;连续输入两次[tab]按键就能够知道使用者有多少指令可以下达。 which &#xff08;寻找“可执行文件”&#xff09; 这个指令是根据“PATH”这个环境变量所规范的路径&#xff0c;去搜寻“可执行文件”的文件名。所以&…

iOS distribution发布证书过期或者被手动revoke了app会被下架吗?

在距离distribution 证书过期一个月&#xff08;或被手动revoke了&#xff09;的时候会受到apple的邮件 虽然distribution过期&#xff08;或者被手动revoke&#xff09;了&#xff0c;如果你的开发者账号是company&#xff08;公司&#xff09;类型或个人类型的&#xff0c;只…

LDR6023Q在USB摄像头转接器的应用

最近USB摄像头火了起来&#xff0c;连接手机后可以用于直播&#xff0c;内窥镜&#xff0c;探鱼器&#xff0c;上网课等等&#xff0c;应用非常广泛&#xff0c;但在长时间连接手机的时候&#xff0c;电量消耗特别快&#xff0c;所以USB摄像头转接器应运而生。 USB摄像头转接器…

多元回归预测 | Matlab海鸥算法(SOA)优化极限学习机ELM回归预测,SOA-ELM回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab海鸥算法(SOA)优化极限学习机ELM回归预测,SOA-ELM回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% 清空环…

我的创作纪念日(一周年)

机缘 作为一位互联网安全专业的大一学生&#xff0c;我始终怀抱着提升自身技术能力、保护网络安全、推动互联网世界发展的初心。 通过实战项目的经验分享&#xff0c;我收获颇多。参与团队网络安全演练与攻防对抗&#xff0c;使我学会了应对不同类型攻击与漏洞&#xff0c;提…

vue(typescript)项目在vs中打开出现的各种问题

目录 vue3 报错解决&#xff1a;找不到模块或其相应的类型声明。&#xff08;Vue 3 can not find module&#xff09; (TS) 未知的编译器选项“allowImportingTsExtensions”。 TS6046 (TS) “--moduleResolution”选项的参数必须为 node, classic, node16, nodenext。…

FinalShell连接不上Ubantu

解决方法 1.ssh服务问题 1.先安装openssh-server服务 sudo apt install aopenssh-server 2.重启ssh服务 sudo systemctl restart ssh 2.防火墙问题 1. 直接关闭防火墙(最省时) ufw stop 2. 开放FinalShell要连接的端口号,下图。 ufw allow 22

python使用WxPusher自动向微信发送信息

Github地址&#xff1a;https://github.com/wxpusher/wxpusher-docs Demo演示功能&#xff1a;https://wxpusher.zjiecode.com/demo/ 使用说明文档&#xff1a;https://wxpusher.zjiecode.com/docs/#/ 使用方法 首先进入网址&#xff1a;https://wxpusher.zjiecode.com/admi…

【Linux】4、BootLoader:UBoot | BIOS、BMC 介绍

文章目录 一、bootloader1.1 uboot 二、BIOS2.1 grub 三、BMC3.1 原理3.2 使用场景3.3 IPMI 规范3.4 配置和使用3.4.1 通过 ipmitool 设置 BMC IP3.4.2 通过 BIOS 设置 BMC IP 一、bootloader 参考 windows开机时会首先加载bios&#xff0c;然后是系统内核&#xff0c;最后启…

糟糕透了!知识答题PK出线上bug了!复盘与总结一下吧

糟糕透了&#xff01;知识答题PK出线上bug了&#xff01;我来进行复盘与总结一下吧。 主要两大问题&#xff1a; 1、服务器问题&#xff1a;云数据库watch监听报错的问题&#xff1b; 2、卡bug问题&#xff1a;匹配成功或者pk开始后&#xff0c;有人中途退出的问题&#xff1b;…

数据库监控与调优【十九】—— SQL调优实战

SQL调优实战 SQL调优实战1-常规调优 项目建表语句 -- ---------------------------- -- Table structure for carousel -- ---------------------------- DROP TABLE IF EXISTS carousel; CREATE TABLE carousel (id varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_09…

找不到mfc140u.dll怎么解决?mfc140u.dll丢失的三个解决方法

在使用Windows操作系统的时候&#xff0c;即使更新到最新系统&#xff0c;电脑系统偶尔也会出现系统报错&#xff0c;这个是由于Windows系统的开放性导致的。在系统报错的时候&#xff0c;只需要找对修复方法&#xff0c;对其进行修复即可&#xff0c;比如提示“由于找不到mfc1…

oracle只读打开数据库

客户经常有这样的需求&#xff0c;数据库已迁移&#xff0c;但还是希望原库可以打开&#xff0c;就只能只读模式打开了 方法一 SYSorcl> STARTUP OPEN READ ONLY; ORACLE instance started. Total System Global Area 4.0086E10 bytes Fixed Size 22549…

浅谈 Android Tombstone(墓碑日志)分析步骤

最近项目产品刚刚出货&#xff0c;客户退机、死机事件频发。日常解决bug中&#xff0c;少不了和墓碑日志打交道&#xff0c;截止今天之前&#xff0c;见到墓碑日志都是一脸懵逼&#xff0c;不知道怎么分析。最近又有了两个日志&#xff0c;硬着头皮看吧。之所以称之为浅谈&…