当前位置: 首页 > news >正文

2.MySQL数据库操作

一.MySQL数据库介绍

数据库目前标准指令集是SQL,即结构化查询语言。SQL语言主要由以下几部分组成

DDL(数据定义语言):用来建立数据库、数据库对象和定义字段,如create、alter、drop。

DML(数据操纵语言):用来插入、删除和修改数据库中的数据,如insert、update、delete。

DQL(数据查询语言):用来查询数据库中的数据,如select,show。

DCL(数据控制语言):用来控制数据库组件的存取许可、存取权限等,如commit、rollback、grant、revoke。

二.数据库操作

1.系统数据库

经初始化后的MySQL服务器,默认建立了四个数据库:sys、mysql、information_schema、performance_schema。

information_schema:虚拟库,不占磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等

performance_schema:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象

mysql:授权库,主要存储系统用户的权限信息

sys:主要用于存储系统性能信息和监控数据,对数据库的性能优化和故障排除具有关键作用

2.数据库操作

2.1创建数据库

语法:

mysql>create  database  数据库名;

2.2数据库命名规则

可以有字母、数字、下划线、@、#、$

区分大小写

唯一性

不能使用关键字,如create、select

不能单独使用数字

最长128位

2.3选择数据库

语法:

mysql>USE  数据库名;

2.4查看数据库

mysql>show  databases;                                (查看当前数据库中有哪些表)

mysql>show  create  database  db1;              (显示创建名为db1的数据库时所使用的SQL语句)

mysql>select  database();                               (返回当前选中的数据库名称)

2.5删除数据库

mysql>drop  database  数据库名;

三.MySQL表操作

1.表介绍

库相当于文件夹,而表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有相应的标题,称为表的字段

例:

IDnameagesex
1张三18male
2李四68female
3王五20male

id、name、age、sex称为字段,其余的,一行内容称为一条数据记录。

2.查看表

使用show  tables查看当前所在的数据库中包含的表。操作之前,需要先使用use语句切换到所使用的数据库。

mysql>use  msyql;

mysql>show  tables;

3.创建表

3.1语法

mysql>create  table  表名 (字段名1  类型[(宽度)  约束条件],字段名2  类型[(宽度)  约束条件],字段名3  类型[(宽度)  约束条件];

注意:

a.在同一张表中,字段名是不能相同的

b.宽度和约束条件可选

c.字段名和类型是必须的,字段的类型宽度和约束条件是可选项

d.表中最后一个字段不要加逗号

3.2类型介绍

表内存放的数据有不同的类型,类似于使用excel存储数据时也需要设置的数据类型,每种数据类型都有自己的宽度,但宽度是可选的,不设置宽度时,会使用字段的默认宽度。

MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串类型。对于约束数据的类型有很大帮助

数值类型:

类型大小范围(有符号)范围(无符号)用途
INT4字节(-2147483648,2147483647)(0,4294967295)大整数值
DOUBLE8字节(-1797E+308,-222E-308)(0,222E-308,1797E+308)双精度浮点数值
DOUBLE(M,D)8个字节,M表示长度,D表示小数位数同上,受M和D的约束DOUBLE(5,2)-999.99-999.99同上,受M和D的约束双精度浮点数值
DECIMAL(M,D)DECIMAL(M,D)依赖于M和D的值,M最大值为65依赖于M和D的值,M最大值为65小数值

日期类型:

类型大小范围格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3‘838:59:59'/838:59:59’HH:MM:SS时间值或持续时间
YEAR11901/2155YYYY年份值
DATETIME81000-01-01 00:00:00/9999-12-31 23:59:59YYYY-MM-DD
HH:MM:SS
混合日期和时间值
TIMESTAMP41970-01-01 00:00:00/2038 结束时间是第 2147483647 秒北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日凌晨03:14:07YYYYMMDD
HHMMSS
混合日期和时间值,时间戳

字符串类型:

类型大小用途
CHAR0-255字符定长字符串 char(10) 10个字符
VARCHAR0-65535 字节变长字符串 varchar(10) 10个字符
BLOB(binarylarge object)0-65535字节二进制形式的长文本数据
TEXT0-65535字节长文本数据

3.3约束条件

约束条件与数据类型的宽度一样,都是可选参数,类似于使用excel存储数据时,可以利用excel的公示限制员工ID列:禁止重复值,且不能为空

约束条件作用:用于保证数据的完整性和一致性,只要分为:

约束条件说明
PRIMARY KEY (PK)标识该字段为该表的主键,可以唯一的标识记录
FOREIGN KEY(FK)标识该字段为该表的外键
NOT NULL标识该字段不能为空
UNIQUE KEY (UK)标识该字段的值是唯一的
AUTO_INCREMENT标识该字段的值自动增长(整数类型而且为主键)
DEFAULT为该字段设置默认值
UNSIGNED无符号
ZEROFILL使用 0填充
ENMU ()限制字段可以存储的值集合

3.4创建表示例

mysql>create  database db1;        (创建db1库)

msyql>use  db1;                             (进入db1库)

msyql>create  table  t1(id int,name  varchar(50), age  int(3), sex  enum('male','female'));

mysql>show  tables;

4.查看表结构

DESCRIBE语句:用于显示表的结构,即组成表的各字段(列)的信息。需要指定“数据库名.表名”作为参数;若只指定表名参数,则需先通过USE语句切换到目标数据库

mysql>describe  t1;                       (describe可简写成desc)

查看详细表结构或者创建表所使用的语句可以执行show  create  table  t1\G;(查看表详细结构),可以加\G,表示以长格式展示结果 

5.修改表

5.1修改表名

mysql>alter  表名  rename  新表名;

5.2增加字段

语法:

ALTER  TABLE  表名  ADD  字段名  数据类型  [完整性约束条件],ADD字段名  数据类型  [完整性约束条件...];

ALTER  TABLE  表名  ADD  字段名  数据类型  [完整性约束条件]  FLRST;

ALTER  TABLE  表名  ADD  字段名  数据类型  [完整性约束条件]  AFTER  字段名;

5.3删除字段

语法:

ALTER  TABLE  表名  DROP  字段名;

5.4修改字段

ALTER  TABLE  表名  MODIFY  字段名  数据类型  [完整性约束条件...];

ALTER  TABLE  表名  CHANGE  旧字段名  新字段名  旧数据类型  [完整性约束条件...];

ALTER  TABLE  表名  CHANGE  旧字段名  新字段名  新数据类型  [完整性约束条件...];

6.复制表

只复制表结构,不复制表中数据

mysql>create  table  t3  like  t2;

复制表结构+记录(key不会复制:主键、外键和索引)

create  table  t4  select  *  from  t2;

7.删除表

删除数据库中的表,需要指定“数据库名.表名”作为参数;若只指定表名参数,则需先通过执行“USE”语句切换到目标数据库

语法:

mysql>drop  table  t2;

msyql>drop  table  db1.t3;

四.MySQL数据操作

1.介绍

在MySQL管理软件中,可以通过SQL语句中的DML语言来实现数据的操作,包括使用INSERT实现数据的插入、使用UPDATE实现数据的更新、使用DELETE实现数据的删除、使用SELECT查询数据

创建示例表

msyql>use  db1;     (进入db1库)

msyql>create  table  t1(id  int,name  varchar(50),age  int(3),sex  enum('male','female'));

mysql>show  tables;

2.插入数据INSERT

insert  into  语句:用于向表中插入新的数据记录

格式:insert  into  表名  values(值1,值2,值3....);  

指定字段插入数据:insert  into  表名(字段1,字段2,字段3...) values(值1,值2,值3..);

插入多条记录:insert  into  表名  values(值1,值2,值3....),(值1,值2,值3....),(值1,值2,值3....);

3.删除数据insert

delete语句:用于删除表中指定的数据记录

语法:delete  from  表名  where  条件表达式

例:delete  from  t1  where  id=1;

4.更新数据insert

update语句:用于修改、更新表中的数据记录

语法:update  表名  set  字段名  1=字段值  1[,字段名  2=字段值  2]  where  条件表达式

例:update  t1  set  age=100  where  name="wangwu";

需要注意的是,在执行update、delete语句时,通常都带where条件,否则会修改或删除所有的记录,是非常危险的操作

5.查询数据INSERT

select语句:用于从指定的表中查找符合条件的数据记录

1.单表查询

语法:

select  字段1,字段2...   from  表名

                               where  条件

                                group  by  字段

                                having  筛选

                                order  by 字段

                                linit  限制条数

1.2关键字执行的优先级

from>where>group by>having>select>order by>limit

说明:

1.找到表:from

2.拿着where指定的约束条件,去文件/表中取出一条条记录

3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组

4.将分组的结果进行having过滤

5.执行select

6.将结果按条件排序:order by

7.限制结果的显示条数:limit

1.3where条件

作用是通过指定条件从表中过滤出符合条件的记录,可应用于select、update、delete等语句,控制操作范围

where字句中可以使用:

1.比较运算符:>  <  >=  <=  <>  !=

2.between  80  and  100  值在10到20之间

3.in(80,90,100)值是10或20或30

4.like  'egon%'

     pattern 可以是%或_,

     %表示多字符

      _表示一个字符

5.逻辑运算符:在多个条件直接可以使用逻辑运算符and  or  not

例:

薪资大于10000的人姓名

select  name, salary  from  renyuan  where  salary  >  10000;

不是403办公室的人姓名

select  name,office  from  renyuan  where  office  !=403;

薪资在10000至15000之间的人姓名

select name,salary  from  renyuan  where  salary  between  10000  and  15000;

薪资是9000或10000或30000的人姓名

select  name,salary  from  renyuan  where  salary  in(9000,10000,30000);

名字以“程”开头的人的信息

select  *  from  renyuan  where  name  like  "程咬_";

select  *  from  renyuan  where  name  like  "程%";

薪资17000或者办公室是403的人

select  *  from  renyuan  where  office=403  or  salary=17000;

薪资17000并且办公室是403的人

select  *  from  renyuan  where  office=403  and  salary=17000;

薪资不是9000或10000或30000的人姓名

select  name,salary  from  renyuan  where  salary  not  in(9000,10000,30000);

1.4group by 分组

(1)分组

分组指的是:将所有记录按照某个相同的字段进行归类,比如针对员工信息表职位分组,或者按照性别进行分组

例:

select  *  from  renyuan  group  by  sex;              (以sex分组,查看除了sex以外的字段会报错)

select  sex  from  renyuan  group  by  sex;

但是只查看sex字段没有任何意义,因为需要的是组内信息,所以结合聚合函数查看

(2)聚合函数:count()  avg()  max()  min()  sum()

sount():计数

例:计算男生和女生的人数

命令:select sex,count(*)   from  renyuan  group  by  sex;

avg():平均数

例:每个岗位的平均薪资

命令:select  post,avg(salary)  from  renyuan  group  by  post;

max():最大值

例:每个岗位的最高薪资

命令:select  post,max(salary)  from  renyuan  group  by  post;

min():最小值

例:每个岗位的最高薪资

命令:select  post,min(salary)  from  renyuan  group  by  post;

sum():总和

例:每个岗位的薪资总和

命令:select  post,sum(salary)  from  renyuan  group  by  post;

1.5having过滤

having和where区别:

执行优先级从高到低:where>groupby>having

Where 发生在分组 group by 之前,因而 Where 中可以有任意字段,但是绝对不能使用聚合函数。
Having 发生在分组 group by之后,因而 Having 中可以使用分组的字段,无法直接取到其他字段,但可以使用聚合函数

例:有哪些岗位是平均工资大于 10000的

命令:select post,avg(salary) from renyuan group by post having avg(salary)>10000;

1.6order  by排序

使用 SELECT 语句可以将需要的数据从 MySQL 数据库中查询出来,如果对查询的结果进行排序,该如何去实现呢?可以使用0RDERBY 语句来完成排序,并最终将排序后的结果返回给用户
排序的关键字可以使用 ASC或者 DESC。ASC 是按照升序进行排序的,是默认的排序方式,即 ASC 可以省略。SELECT语句中如果没有指定具体的排序方式,则默认按 ASC 方式进行排序。DESC是按降序方式进行排列

命令:select  * from renyuan order by id asc;              (默认是正序asc可以忽略)

           select  *  from renyuan order by id desc;           (倒叙)

1.7limit限制结果条目

在使用 MySQL SELECT 语句进行查询时,结果集返回的是所有匹配的记录。有时候仅需要返回第一行或者前几行,这时候就需要用到LIMIT 子句

例:倒叙排列后仅显示第一行

命令:select * from renyuan order by id desc limit 1;

1.8正则匹配

MySQL 正则表达式通常是在检索数据库记录的时候,根据指定的匹配模式匹配记录中符合要求的特殊字符串。MySQL的正则表达式使用 REGEXP 这个关键字来指定正则表达式的匹配模式

例:Name 是1开头的姓名

命令:select * from renyuan where name regexp " ^1";

例:Name 是u结尾的姓名

命令:select * from renyuan where name regexp "u$";

例:Name 是 wan 和 wu 之间至少1个g的姓名

命令:select * from renyuan where name regexp "wangtwu";

相关文章:

  • PMIC电源管理模块的PCB设计
  • PostgreSQL冻结过程
  • 使用零样本LLM在现实世界环境中推广端到端自动驾驶——论文阅读
  • Windows远程访问Ubuntu的方法
  • IBM BAW(原BPM升级版)使用教程第六讲
  • YOLOv8 优化:基于 Damo-YOLO 与 DyHead 检测头融合的创新研究
  • Android系统架构模式分析
  • Redis 8.0携新功能,重新开源
  • 从 AGI 到具身智能体:解构 AI 核心概念与演化路径全景20250509
  • 切比雪夫不等式专题习题
  • DevExpressWinForms-布局容器之StackPanel
  • 拆分sql数据,(shop_backup)sql文档过大(>5G)
  • 在另一个省发布抖音作品,IP属地会随之变化吗?
  • TCP/IP协议的体系结构
  • 关于大数据的基础知识(一)——定义特征结构要素
  • 单调栈模版型题目(3)
  • 图像泊松融合(convpyr_small版本)
  • <uniapp><HBuilder><故障>HBuilder真机运行时,报“同步资源失败”故障解决
  • CET中电技术:变配电智能运维方案为工业安全与效率保驾护航
  • 124549-23-1,PBFI AM,测定细胞内区隔的钾离子水平变化
  • 印巴战火LIVE丨“快速接近战争状态”?印度袭击巴军事基地,巴启动反制军事行动
  • 新城市志|上海再攻坚,营商环境没有最好只有更好
  • 巴基斯坦称对印度发起军事行动
  • 工行回应两售出金条发现疑似杂质:情况不属实,疑似杂质应为金条售出后的外部附着物
  • 上海杨浦:优秀“博主”购房最高可获200万补贴
  • 七大交响乐团在沪“神仙斗法”,时代交响奏出何等时代新声