MySQL数据库管理与开发

news2024/12/24 2:49:48

什么是MySQL 数据库?

M典MQLB公司开发的一个关系型数据库管理系统。通过它司以有效地组织和管理存储在数据库中的数据。MySQL 数据库可以称得上日前运行速度最快的SQL语言数据库。

MySQL 的优势

MySQL数据库是一款自由软件,任何人都可以从MySQL的官方网站下载该软件是一个真正的多用户、多线程的SQL数据库服务器。它是以客户机/服务券线经构实蔬,油一个服务器守护程序mysqld和很多不同的客户程序和库组成的。态能销关走、有效和安全地处理大量的数据。相对于 Oracle 等数据库来说,MySQI的使有还非常简单的。M:SQL主要目标是快捷、便捷和易用。 

MySQL服务器的安装与配置 

1、数据库:存储数据的仓库。
2、安装数据库;

  •       解压mysql安装包
  •       修改配置文件my.ini(basedir=设置为自己mysql安装的路径;datadir=设置为自己mysql安          装的路径\data)
  •       初始化Mysql         (mysqld --initialize)
  •       获取初始化之后的Mysql登录密码(mysql安装目录下的DESKTOP-JA5S8TS.err文件中)
  •       安装Mysql服务     (mysqld --install)
  •       启动Mysql服务       (net start mysql)
  •       使用初始化密码进行登录Mysql     (mysql -uroot -p初始化密码)
  •       修改数据加密规则(alter user 'root'@'localhost' identified by 'password' password expire never)
  •       修改初始化密码(alter user 'root'@'localhost' identified with mysql_native_password by '新设置的密码')
  •       ctrl+z 关闭再重新用新密码进行登录
  •       查询显示所有数据库信息    (show databases)

3、安装Navicat;注意:把破解文件复制到Navicat安装目录下

在创建数据库时,数据库命名有以下5项规则

  • 不能与其他数据库重名,否则将发生错误。
  • 名称可以由任意字母、阿拉伯数字、下划线(    )和“$”组成,可以使用上述的任意字符开头,但不能使用单独的数字,否则会造成它与数值相混淆。
  • 名称最长可为 64 个字符,而别名最多可长达    256 个字符。    
  • 不能使用MySQL关键字作为数据库名、表名
  • 在默认情况下,Windows 下数据库名、表名的的大小写是不敏感的,而在 Linux 下数据库名、表名的大小写是敏感的。为了便于数据库在平台台间进行移植,建议读者采用小写来定义数据库名和表名。 

MySQL数据类型 

MySQL支持所有的ANSI/ISO SQL 92 数字类型。这些类型包括准确数字的数
据类型(NUMERIC、DECIMAL、INTEGER和SMALI INT),还包括近似数字的数据类型(FLOAT、REAL和 DOUBLE PRECISION)。    其中的关键词INT是INTEGER的同义词,关键词DEC 是 DECIMAL 的同义词

数字类型总体可以分成整型和浮点型两类。

1.整数数据类型

2.浮点数据类型

在创建表时,使用哪种数字类型,应遵循盾以下原则。

  • (1)选择最小的可用类型,如果值永远不超过 127,则使用 TINYINT 比INT强。
  • (2)对于完全都是数字的,可以选择整类数类型。
  • (3)浮点类型用于可能具有小数部分的数。如货物单价、网上购物交付金额等。

3.字符串类型

在创建表时,使用字符串类型型时应遵循以下原则。

  • (1)从速度方面考虑,要选译固定的列,可以使用 CHAR 类型。
  • (2)要节省空间,使用动态的列,可以使用 VARCHAR 类型。
  • (3)要将列中的内容限制在一种选择,可以使用 ENUM 类型。
  • (4)允许在一个列中有多于一个的条目,可以使用 SET 类型。
  • (5)如果要搜索的内容不区分大小写,可以使用TEXT 类型。
  • (6)如果要搜索的内容区分大小写,可以使用 BLOB 类型。

4.日期和时间数据类型

日期和时间类型包括:DATETIN ME DATE TIMESTAMP、TIME和 YEAR。其中的每种类型都有其取值的范围,3如赋予它一个不合法的值,将会被“0”代替。

安装 phpStudy和Navicat

1. 创建数据库
   create database 自定义的名字;

-- 判断数据库存在就删除数据库
drop database if exists mydb;
-- 创建数据库
create database mydb;
#设置数据的视图---使用数据库
use mydb;

2. 创建表
    create table 自定义的表名(
        列名1 数据类型 [完整性约束条件],
        列名2 数据类型 [完整性约束条件],
           ……
        列名n 数据类型 [完整性约束条件],
    )

#判断表存在就删除表
drop table if exists student;
#创建表
create table student(
stuId int primary key auto_increment,
stuName varchar(20),
stuSex varchar(2),
stuAge int,
stuAddr varchar(50) 
);

约束条件

  • 主键约束 primary key 不能为空 不能重复 
  • 自增 auto_increment
  • 非空约束  not null
  • 唯一约束 unique  可以为空 不能重复
  • 默认约束 default 
  • 外键约束    foreign key (本表列名) references 外表(外表列名),注意设置表的搜索引擎 ENGINE=InnoDB 

3. 录入数据

第一种格式:insert into 表名(字段名1,字段名2,....字段名n) values(值1,值2,....值n)

 insert into student VALUES
       (101,'林彬','男',21,'郑州'),
       (102,'小桃红','女',20,'开封'),
       (103,'孙悟空','男',18,null);

第二种格式:默认录入所有的字段     insert into 表名 values(值1,值2,....值n)

#插入测试数据
insert into student(stuName,stuSex,stuAge,stuAddr) values ('张三','男',20,'河南');
insert into student(stuName,stuSex,stuAge,stuAddr) values ('小美','女',18,'山东');
insert into student(stuName,stuSex,stuAge,stuAddr) values ('Rose','女',19,'美国');
insert into student(stuName,stuSex,stuAge,stuAddr) values ('Jack','男',21,'英国');

注意:

  • 1.字段名和值的个数要一样
  • 2. 数值类型不需要加'',字符串用''
  • 3. 必须录入不能为空的数据                  

4. 修改数据:update 表名 set 字段名1=值1,....字段名n=值n [where 条件表达式]

-- 1.	将班级编号是151104 的班级名称修改为jsp班
  update class set classname='jsp班' where classno='151104';
-- 2.	将姓名为张晶晶的学生年龄修改为25岁,语文成绩修改为83
  update student set age=25,chinese=83 where stuname='张晶晶';
-- 15.	将学生表中所有年龄小于18岁的男生年龄修改为18岁
  update student set age=18 where age<18 and sex='男';

5. 删除数据:delete from 表名 [where 条件表达式]

delete from student;
-- 14.	删除学生表中年龄为18岁的男学生。
  delete from student where age=18 and sex='男';

6. 查询数据:select 字段名1,字段名2,....字段名n from 表名
查询所有的字段 用*代替   起别名  as 

-- 3.	查询表中所有学生的信息
  select * from student;
-- 4.	查询表中所有学生的姓名和对应的英语成绩 英语成绩用别名英语展示
  select stuname, english as'英语' from student;
-- 5.	查询英语分数在 80-90之间的学生信息
  select * from student where english between 80 and 90;
-- 6.	显示年龄小于18岁或大于20岁的学生信息
  select *from student where age<18 or age>20;

6.1 过滤条件

1.>、 < 、 =、 <>(不等于)   >= 、<=  (between and):在XXXX区间
2. 多条件查询     and :且   or:或者
3. 模糊查询    like

  • %: 0或多个 
  • 张%:获取姓张(以张开头)
  • %张%:获取包含张的
  • %张:获取以张结尾的
  • _:占位符 
  • 张_    :两个字符的名字 第一个字为张
-- 9.	查询名字当中第二个字为‘小’的学生信息
  select * from student where stuname like '%小%';
-- 10.	查询家庭住址在洛阳并且性别为女的学生信息
  select * from student where address='洛阳' and sex='女';

6.2  排序
order by 字段名 asc|desc    (升序|降序)    
select * from 表名 [where 条件] order by 字段名 asc|desc

-- 7.	根据语文成绩从大到小排序显示前10个的学生信息
  select * from student order by chinese desc limit 0,10;

6.3 限制获取的条数
limit a,b  从a条数据之后开始获取,获取b条数据

6.4 聚合函数
select count(1)| min(字段名)|max(字段名)|avg(字段名)|sum(字段名) from 表名
            汇总      最小             最大             平均              求和

-- 11.	查询学生的英语的平均成绩,及最高成绩
  select avg(english),max(english) from student;
-- 12.	统计学生表每个班级的总人数,输出班级编号和班级人数。
  select classno,count(1) from student group by classno;
-- 13.	统计学生表,根据性别输出性别和人数
  select sex,count(1) from student group by sex;

 6.5 分组 group by
select 字段名,聚合函数 from 表名  group by 字段名;
分组一般和聚合函数一起使用 查询的结果只能是聚合函数或者分组的列名


--创建数据库
CREATE DATABASE keDB character set utf8;


CREATE TABLE class (
	Classno CHAR (8) NOT NULL PRIMARY KEY,
	classname CHAR (20) NOT NULL UNIQUE,
	number INT
)engine=innodb;


CREATE TABLE student (
	Stuno INT PRIMARY KEY auto_increment,
	stuname CHAR (8) NOT NULL,
	sex CHAR (2),
	age INT,
	address VARCHAR (30) default '南阳',
  english int check(english >=0 and english <=100),
  chinese int check(chinese >=0 and chinese <=100),
	classno CHAR (8) NOT NULL,
	FOREIGN KEY (classno) REFERENCES class (classno)
) auto_increment = 101,engine=innodb;



-- 1.	将班级编号是151104 的班级名称修改为jsp班
update class set classname='jsp' where classno='151104';
-- 2.	将姓名为张晶晶的学生年龄修改为25岁,语文成绩修改为83
update student set age=25,chinese = 83 where stuname ='张晶晶';
-- 3.	查询表中所有学生的信息
select * from student ;
-- 4. 查询表中所有学生的姓名和对应的英语成绩 英语成绩用别名英语展示
select stuname,english as 英语 from student;
-- 5. 查询英语分数在 80-90之间的学生信息
select * from student where english between 80 and 90;
-- 6. 显示年龄小于18岁或大于20岁的学生信息
select * from student where age>18 or age<20
-- 7.根据语文成绩从大到小排序显示前10个的学生信息
select * from student order by chinese desc limit 0,10;
-- 8.查询所有姓李的学生英语成绩
select english from student where stuname like '李%';
-- 9. 查询名字当中第二个字为‘小’的学生信息
select * from  student where stuneme like '_小%';
-- 10.查询家庭住址在洛阳并且性别为女的学生信息
select * from student where  address='洛阳'and sex='女';
-- 11.	查询学生的英语的平均成绩,及最高成绩
select avg(english),max(english) from student ;
-- 12.统计学生表每个班级的总人数,输出班级编号和班级人数
 select classno ,count(*) from student group by classno
-- 13.统计学生表,根据性别输出性别和人数
select sex ,count(*) from student group by sex
-- 14.删除学生表中年龄为18岁的男学生
delete from student where age=18 and sex='男';
-- 15.将学生表中所有年龄小于18岁的男生年龄修改为18岁
update student set  age=18  where age<18;
-- 16.查询每个学生的信息及班级名称
select s.*,c.classname from student as s
left join class as c on s.classno= c.Classno

 7. 多表查询
    1. 交叉连接 select * from A,B where A.字段名 =B.字段名
    2. 内连接   select * from A inner join B on A.字段名 =B.字段名  [where 条件表达式]
    3. 外连接分为
        左连接  left join 左边表(A表)全部以及两个表内连接的数据    
                select * from A left join B on A.字段名 =B.字段名  [where 条件表达式]
        和右连接  right join 右边表(B表)全部以及两个表内连接的数据 
                select * from A right join B on A.字段名 =B.字段名  [where 条件表达式]

create table  teacher(
 id int primary key auto_increment,
 name varchar(32) not null ,
 description varchar(1024)
);

create table student1 (
id int primary key auto_increment,
name varchar(32) not null,
sex varchar(8) not null,
teacher_id int ,
age int not null
);

INSERT INTO  teacher (name,description)VALUES("张老师","教语文的");
INSERT INTO teacher (name,description) VALUES("王老师","教数学的");
INSERT INTO teacher (name,description)VALUES("范老师","教英语的");
INSERT INTO teacher (name,description) VALUES("赵老师","教体育的");



INSERT INTO student1 (name,sex,	teacher_id,age) VALUES("张三",'男',1,35);
INSERT INTO student1 (name,sex,	teacher_id,age)VALUES("李四","男",2,20);
INSERT INTO student1 (name,sex,	teacher_id,age)VALUES("小红","女",2,22);
INSERT INTO student1 (name,sex,	teacher_id,age)VALUES("小明","男",2,21);
INSERT INTO student1 (name,sex,	teacher_id,age)VALUES("笑笑","女",2,18);
INSERT INTO student1 (name,sex,	teacher_id,age)VALUES("赵六","女",3,36);
INSERT INTO student1 (name,sex,	age)VALUES("张三","男",19);
INSERT INTO student1 (name,sex,	age)VALUES("王五","男",18);

-- 交叉连接
 select * from student1 as s,teacher as t where s.teacher_id=t.id;
-- 内连接 select * from A inner join B on A.字段名=B.字段名
 select * from teacher inner join student1 on student1.teacher_id=teacher.id;
-- 外连接的左连接
 select * from teacher left join student1 on student1.teacher_id=teacher.id;
-- 外连接的右连接
 select * from teacher right join student1 on student1.teacher_id=teacher.id;

8. 创建视图  
     create view 自定义的视图名称 as +sql语句

创建观图自定义的视图名称as+sq1语句create VieW
create view teacherXinxi as
SELECT
teachername as tname 
teacher.description,
student1. name as sname r
student1.age
FROM
teacher
LEFT JOIN student1 ON studentl.teacher id = teacher.id
查看视图
select *from teacherXinxi order by age;

代码示例

#设置数据的视图---使用数据库
use mydb;
#判断表存在就删除表
drop table if exists student;
#创建表
create table student(
stuId int primary key auto_increment,
stuName varchar(20),
stuSex varchar(2),
stuAge int,
stuAddr varchar(50) 
);
#插入测试数据
insert into student(stuName,stuSex,stuAge,stuAddr) values ('张三','男',20,'河南');
insert into student(stuName,stuSex,stuAge,stuAddr) values ('小美','女',18,'山东');
insert into student(stuName,stuSex,stuAge,stuAddr) values ('Rose','女',19,'美国');
insert into student(stuName,stuSex,stuAge,stuAddr) values ('Jack','男',21,'英国');
#查询数据表
select * from student;
#根据id查询数据

#删除数据
delete from student where stuName ="李四";
#修改数据
update student set stuName="王五" where stuId=1;
#模糊查询
select * from student where stuName like '%o%';

枚举类型

MySQL 枚举类型如何定义比较好 tinyint?enum?varchar?_mysql中枚举类型符号_羁士的博客-CSDN博客

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

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

相关文章

保姆级 雅特力AT32 MCU 从SRAM启动KEIL工程配置步骤(STM/GD/APM通用)

好记性不如烂笔头&#xff0c;既然不够聪明&#xff0c;就乖乖的做笔记&#xff0c;温故而知新。 本文档用于本人对知识点的梳理和记录。 一、前言 开发工具&#xff1a;KEIL 开发板&#xff1a;AT32F415 AT-START-F415 软件工程&#xff1a;雅特力BSP flash_wirte_read 点击…

阿里开业项目chat2DB-人工智能SQL分析介绍

1. chat2DB简介 1-1. 简介 ​ chat2DB是一款有开源免费的多数据库客户端工具&#xff0c;支持windows、mac本地安装&#xff0c;也支持服务器端部署&#xff0c;web网页访问。和传统的数据库客户端软件Navicat、DBeaver 相比Chat2DB集成了AIGC的能力&#xff0c;能够将自然语…

RabbitMQ系列(9)--RabbitMQ预取值及利用预取值实现不公平分发

概念&#xff1a;RabbitMQ的默认分发消息机制是轮询分发&#xff0c;但在消费者之间处理任务速度不同时&#xff0c;这种分发消息机制会导致任务的处理效率低下&#xff0c;处理任务速度快的消费者很大一部分的时间处于空闲状态&#xff0c;速度慢的消费者则一直在干活&#xf…

SpringBoot教学资料6-SpringBoot登录注册功能实现(带简单前端)

项目样式&#xff1a; SQL: CREATE TABLE t_user (id int(11) NOT NULL AUTO_INCREMENT,username varchar(32) NOT NULL,password varchar(32) NOT NULL,PRIMARY KEY (id),UNIQUE KEY username (username) ) ENGINEInnoDB AUTO_INCREMENT5 DEFAULT CHARSETutf8项目结构&#xf…

数据结构(排序)

文章目录 一、排序的概念二、插入排序1. 基本思想2. 直接插入排序3. 希尔排序(缩小增量排序) 三、选择排序1. 基本思想2. 直接选择排序3. 堆排序 四、交换排序1. 基本思想2. 冒泡排序3. 快速排序 五、归并排序六、其他排序6.1 计数排序6.2 基数排序6.3 桶排序 一、排序的概念 …

记一次 .NET 某医院预约平台 非托管泄露分析

一&#xff1a;背景 1. 讲故事 前几天有位朋友找到我&#xff0c;说他的程序有内存泄露&#xff0c;让我帮忙排查一下&#xff0c;截图如下&#xff1a; 说实话看到 32bit&#xff0c; 1.5G 这些关键词之后&#xff0c;职业敏感告诉我&#xff0c;他这个可能是虚拟地址紧张所…

Docker快速部署Hadoop环境

Docker安装部署Hadoop环境&#xff0c;通过三个容器来模拟三个节点&#xff0c;最后只保留Master节点实现搭建。 安装环境 Ubuntu 22.04.1 LTS 和Docker 23.0.1 安装过程 拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/hadoop_test/hadoop_base在Docker中创建网…

供应链管理系统有哪些模块?

先弄搞清楚&#xff1a;供应链管理的概念与定义 供应链管理(Supply Chain Management ,简称SCM)&#xff1a;就是指在满足一定的客户服务水平的条件下&#xff0c;为了使整个供应链系统成本达到最小而把供应商、制造商、仓库、配送中心和渠道商等有效地组织在一起来进行的产品…

Kubernetes(k8s)容器编排Pod调度策略

目录 1 节点调度1.1 创建资源清单1.2 应用部署1.3 删除pod 2 定向调度(标签调度)2.1 创建标签2.1.1 添加标签2.1.2 显示标签 2.3 创建资源清单2.4 应用部署2.5 删除pod 1 节点调度 ​ 一般而言pod的调度都是通过RC、Deployment等控制器自动完成&#xff0c;但是仍可以通过手动配…

自然语言处理的分词与词嵌入

1 分词 1.1 什么是分词 分词是把自然语言语句进行数字化的过程。 1.2 为什么要分词 自然语言是字符串序列&#xff0c;机器没办法直接处理&#xff0c; 需要处理成数字的形式。 1.3 如何进行分词 以英文为例&#xff1a; 1 按空格划分 这应该是最简单也最直观的做法了。这…

Vue3setup的参数说明

setup的两个参数 setup包含两个参数&#xff0c;一个为props、一个为context &#xff08;均为形参&#xff09; props&#xff1a;值为对象&#xff0c;包含&#xff1a;组件外部传递过来&#xff0c;且组件内部声明接收了的属性。context&#xff1a;上下文对象 <scrip…

26-DOM常见的操作(了解)

一、DOM &#x1f37f;&#x1f37f;&#x1f37f;文档对象模型 (DOM) 是 HTML 和 XML 文档的编程接口 它提供了对文档的结构化的表述&#xff0c;并定义了一种方式可以使从程序中对该结构进行访问&#xff0c;从而改变文档的结构&#xff0c;样式和内容 例如&#xff1a;随着…

2023再更新下百度蜘蛛最新UA(User Agent)

其实百度蜘蛛的UA一直没什么变化&#xff0c;有不少朋友以为百度蜘蛛修改特征了&#xff0c;我查了下日志&#xff0c;把最新的UA整理出来给大家。 百度UA信息&#xff1a; Mozilla/5.0 (compatible; Baiduspider/2.0; http://www.baidu.com/search/spider.html) 神码ai在了…

LVS负载均衡群集——DR直接路由模式

一.LVS数据包流向分析 1.数据包流向 &#xff08;1&#xff09;客户端发送请求到 Director Server&#xff08;负载均衡器&#xff09;&#xff0c;请求的数据报文&#xff08;源 IP 是 CIP,目标 IP 是 VIP&#xff09;到达内核空间。 &#xff08;2&#xff09;Director Ser…

Spring Bean 的生命周期快速记忆

引言 “请你描述下 Spring Bean 的生命周期&#xff1f;”&#xff0c;这是面试官考察 Spring 的常用问题&#xff0c;可见是 Spring 中很重要的知识点。 我之前在准备面试时&#xff0c;去网上搜过答案&#xff0c;大多以下图给出的流程作为答案。 如何记忆 Spring Bean 的…

电影《消失的她》观后感

上周看了电影《消失的她》&#xff0c;也许是和朋友一起看的原因吧&#xff0c;这次电影的体验感觉比以往更好&#xff0c;这或许就是共同经历的缘故&#xff0c;同时看完电影&#xff0c;还可以大家一起讨论下。本部电影讲述一个富商国外旅游&#xff0c;女友莫名消失&#xf…

LVS负载均衡群集博客

文章目录 LVS负载均衡群集一.什么是集群1.群集的含义 二.集群使用在那个场景三.集群的分类1.负载均衡器群集2.高可用群集3.高性能运算群集 四.负载集群的架构1.第一层&#xff0c;负载调度器2.第二层&#xff0c;服务器池3.第三层&#xff0c;共享存储 五.负载均衡集群的工作模…

人工智能在航天领域中有哪些应用?

随着科技的不断进步&#xff0c;人工智能已经成为各个领域中的重要驱动力。在航天领域中&#xff0c;人工智能的应用正日益展现出巨大的潜力。航天领域对精确性、自动化和高效性的需求&#xff0c;使得人工智能成为实现这些目标的关键技术之一。人工智能正在以其独特的优势和算…

使用MQL4编写自己的交易策略:技巧与经验分享

随着技术的发展&#xff0c;越来越多的投资者开始使用程序化交易系统进行交易&#xff0c;其中MQL4语言是广泛应用于MetaTrader 4平台上编写交易策略的一种语言。本文将分享一些技巧和经验&#xff0c;帮助读者利用MQL4编写自己的交易策略。 策略开发流程 首先&#xff0c;我…

如何用ChatGPT写Shell脚本

因为最近下班前都要拿机子搞压测&#xff0c;所以这段时间对shell脚本比较感兴趣&#xff0c;用chatGPT写shell脚本很方便。 如下是一些案列 比如我需要写一个批处理&#xff1a;写一个批处理在当前文件夹下建立20个文件夹每个文件夹里面有一个文本文档文本文档的第一句话是hel…