MySQL数据库基本用法

了解数据库基本概念

什么是数据库?

• 长期存放在计算机内,有组织、可共享的大量数据的集合,是一个数据“仓库” 

MySQL数据库的特点

• 开源免费,小巧但功能齐全

• 可在Windows和Linux系统上运行

• 操作方便,适用于中小型甚至大型网站应用

76c0a4da23084889855f603b33bf409c.png

DDL建库建表

# 注释

-- 注释

/*

多行

注释

*/

1.sql不区分大小写

2._(下划线)进行名字的分割,不适用驼峰命名法

3.;语句sql结尾处写一个;来表示结束

4.一般关键词建议使用大写

5.所有名称不允许使用中文

#库

-- 查看所有的库

show databases;

-- 创建库

-- create database 数据库名;

-- 删除库(危险操作)

drop database 数据库名;

-- 使用库/切换库

use 数据库名;

#表的操作

-- 查看该库中所有的表

show tables;

-- 创建表

/*create table 表名(

 字段名 类型 属性,

 字段名 类型 属性,

 ...

 字段名 类型 属性

 );

 */

 create table pet(

       dog_name varchar(10),

       dog_age tinyint,

       dog_birth datetime,

       dog_id char(3),

       dog_hobby varchar(25),

       dog_weight decimal(4,1)

       );

  -- ``反引号:取消关键性

  -- DEFAULT NULL 该字段的值可以为空

CREATE TABLE `pet` (

  `dog_name` varchar(10) DEFAULT NULL,

  `dog_age` tinyint DEFAULT NULL,

  `dog_birth` datetime DEFAULT NULL,

  `dog_id` char(3) DEFAULT NULL,

  `dog_hobby` varchar(25) DEFAULT NULL,

  `dog_weight` decimal(4,1) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

#默认字符集和字符排序

DEFAULT CHARSET=utf8mb4

COLLATE=utf8mb4_0900_ai_ci

ENGINE=InnoDB 非常重要 存储:写磁盘的规则innodb 引擎:规则

-- 数据库的本质就是把数据写到磁盘上

 #查看表中的字段

       #方式一 desc 表名

       desc pet;

       #方式二

       show create table pet;

#查看当前数据库支持的存储引擎:

        show engines;

-- 表结构的修改

alter table 表名 关键词 数据;

-- 1.修改表名

alter table 旧表名 rename as 新表名;

-- 2.添加一个字段

alter table 表名 add 新字段名 类型 属性;

-- 3.删除字段(危险操作)

alter table 表名 drop 字段名;

-- 4.修改字段

-- 覆盖式修改

1.一定的默认值default null

2.如果有已经存在具体的数据(tinyint转int char转varchar)--数据是可以做隐式转换的

一旦出现不是字符的数据(字符串) 转int 这种转不了,直接报错

-- 方式一 modify  只能修改数据类型和属性

alter table 表名 modify 字段名 要修改的类型 要修改的属性;

-- 方式二 change 不仅修改类型和属性 还可以修改字段名

alter table 表名 change 旧字段名 新字段名 要修改的类型 要修改的属性;

(危险操作)

-- drop table 表名

# 约束

1.非空约束

create table tb1(

       username varchar(10) not null, -- 非空约束

       userage int

);

create table tb2(

   username varchar(10) not null default '无名', -- 非空约束

       userage int

);

2.唯一约束

是可以为null 并且可以有多个null,因为null 是一个类型

create table tb3(

       username varchar(10) unique, -- 唯一约束  行级约束

       userage int unique   -- 每个字段都是各自的唯一约束

);

 

create table tb4(

       username varchar(10),

       userage int,

       unique(username,userage)  -- 表级约束, 联合唯一约束

-- 字段是有关联的,必须每个字段的值都相同时才会触发唯一约束

);

 

create table tb5(

       username varchar(10),

       userage int,

       CONSTRAINT name_age_unique unique(username,userage)

-- 表级约束可以给约束起名字(方便以后通过这个名字来删除这个约束)

);

3.主键约束

  • 每张表必须有且只有一个主键
  • 主键的值是唯一
  • 主键是不能为null

create table tb6(

      username varchar(10) primary key,

       userage int primary key -- 错误,主键在一张表中只能有一个

);

 

create table tb8(

       username varchar(10),

       userage int,

       primary key(username,userage) -- 联合主键,联合约束

   -- 多个字段的值,只有完全相同时,才会触发约束

);

#一般主键的建立方式

主键的值是不会回补

create table tb9(

  tid int primary key auto_increment,  -- 自增

       username varchar(10),

       userage int

);

4.外键约束

  • 外键的值可以重复
  • 外键可以为null
  • 外键必须要写 父表中有的数据
  • 父表中的关联字段必须是一个具有唯一性的数据
  • 父表的字段名和从表的字段名不一定要相同,但是数据类型必须一致
  • 一个表中可以有多个外键,也可以有多个外键约束,但是只能有一个主键
  • 使用外键关系,不去建立外键约束

create table a(

       aid int primary key auto_increment,

       aname varchar(10)

);

 

create table b(

       bid int primary key auto_increment,

       bname varchar(10),

       aid int,

       FOREIGN key(aid) references a(aid)

);

约束的添加:

  • 加非空约束
  • alter table 表名 modify test_student char(10) not null;
  • 添加唯一约束
  • alter table 表名 add unique(表字段名,字段,字段,字段);
  • 添加主键约束
  • alter table 表名 add primary key(表的字段名,字段,字段);
  • 添加外键约束
  • alter table 表名 add constraint N1 foreign key (表字段名) references 父表(父表字段名);

约束的删除:

  • 删除not null约束
  • alter table 表名 modify 列名 类型;
  • 删除unique约束
  • alter table 表名 drop index 唯一约束名;
  • 删除primary key约束
  • alter table 表名 drop primary key;
  • 删除foreign key约束
  • alter table 表名 drop foreign key 外键名;

DML数据操作语句

#.新增

insert into 表名 (字段名,字段名,...,字段名)values/value(值,值,...,值)

-- 日期 使用字符串的形式进行书写日期格式 (yyyy-MM-dd HH-MM-SS)

#全字段的插入

--方式一

insert into student(sid,sname,birthday,ssex,classid) values(9,'张三','2007-1-1','男',1);

--方式二 1.null 2.default

insert into student values(null,'李四','2010-2-9','女',1);

insert into student values(default,'lili','2009-8-20','女',1);

#部分字段插入

insert into student(sname,ssex) values('zz','女');

 

alter table student modify ssex varchar(10) not null default '保密';

insert into student(sname) values('peter');

#一次性添加多条数据

-- 方式一

-- insert into 表名 (字段名..) values(值..),(值..)...

insert into student(sname,ssex) values('pony','女'),('ken','女'),('daven','女');

 

-- 方式二 不常用

-- insert into select

-- 插入和被插入的表都必须存在

create table newstu(

       stuname varchar(10),

       stusex varchar(10),

       classid int

);

insert into newstu(stuname,stusex,classid) select sname,ssex,classid from student;

 

-- 方式三

-- create table select

-- 被插入表不能存在 --被插入表没有任何约束 仅仅是将查询结果放到新表

create table stu1 select sid,sname,birthday from student;

-- io高 既要输入又要输出 容易锁表

#.修改

update 表名 set 字段名=值,字段名=值,...,字段名=值 where 子句条件;

where子句 中的条件是对表中每一条数据进行判断,判断成立,该数据的父句执行;判断不成立,该数据的父句不执行

update stu1 set birthday='1999-10-22' where sname='peter';

 

update newstu set classid=200 where stusex!='男';

#.删除

delete from 表名 where 子句

delete from newstu;-- 删除表中数据

drop table newstu;-- 删除表

delete from stu1 where sname='daven';

-- 清空表(截断表)

truncate 表名 效果和删除表一样 删除表中数据

truncate stu1;

 

delete truncate drop的区别:

delete只删数据; truncate不仅删数据 还把索引删掉了

drop 不仅删数据,还删除了索引,表结构也删了

 

DQL语句

 所有的查询都会得到一张虚拟表 不会发生变化 除非重新查

#查询

-- 最简单的查询

select 123;

select 'abc';

select 1+2;

-- 从表中获取数据

-- select 字段名,字段名 from 表名

-- 全字段查询

select sid,sname,birthday,ssex,classid from student;

select * from student;-- 效率比全字段查询慢 不推荐使用

-- 部分字段查询

select sname,ssex from student;

-- 字段名起别名

select sname as '姓名',birthday '生日',ssex 性别 from student;

-- 添加字段

select sname,'university' 学校 from student;

#distinct 去重

所有字段的数据要一致才会去重

select distinct sname,ssex from student;

#带条件的查询 where子句

select * from student where sid=5;

select * from student where sid<>5;

select * from student where sid between 3 and 5;

#面试题常考

-- 查询年龄大于1990-1-1的学生

select * from student where birthday<'1990-1-1';

#in 在某个特定的范围内

-- or会让索引失效

select * from student where sid=3 or sid=5 or sid=7;

-- 推荐使用in 可以使用到索引

select * from student where sid in (3,5,7);

#like 模糊查询

  •  模糊符号
  •  % 任意多的任意字符
  •  _ 一个任意字符

select * from student where sname like '%杨%';

#null

-- is 是一个什么

select * from student where birthday is null;

select * from student where birthday is not null;

#聚合函数

-- 把多个值变为一个值

  • count() 统计个数
  • max() 求最大值
  • min() 求最小值
  • sum() 总和
  • avg() 平均值

1.count

#select count(字段\常量\*) from 表名;

select count(sid) from student;-- 主键

select count(classid) from student;-- 不统计null类型

select count('a') from student;-- 不推荐使用

select count(123) from student;-- 推荐使用

select count(*) from student;-- 推荐使用

2.sum avg min max 数值类型

select sum(score) from sc;

select avg(score) from sc;

select max(score) from sc;

select min(score) from sc;

例:统计出成绩表中一共有多少次考试,总成绩,平均分,最高分,最低分

select count(*) 考试次数,sum(score) 总成绩,avg(score) 平均分,max(score) 最高分,min(score) 最低分 from sc;

#group by 分组

select ssex,count(*) from student group by ssex;

having和where的区别:

  •        where是对表中每一条数据进行判断
  •        having是对分组聚合后的数据进行条件筛选

#order by 排序

默认是按主键升序排序

#按班级降序desc必须声明   默认不写就是升序asc

select * from student order by classid desc;

#先写先排

select * from sc order by score desc,cid desc;

#limit 分页

0 开始  (页码-1)*步长,步长

#select * from 表名 limit 位置,步长;

select * from student limit 3,3;-- 从3开始

 

 

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

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

相关文章

Hive 的 classpath 简介

Hive的classpath是Hive运行时用于查找所需类和资源文件的路径集合。它包含了Hive运行所需的所有JAR文件和配置文件的位置。理解和管理Hive的classpath对于确保Hive正常运行、添加自定义库或解决类加载问题非常重要。 以下是关于Hive classpath的一些关键点&#xff1a; 默认位…

昇思25天学习打卡营第22天|munger85

LSTMCRF序列标注 我们希望得到这个模型来对词进行标注&#xff0c;B是开始&#xff0c;I是实体词的非开始&#xff0c;O是非实体词。 我们首先需要lstm对序列里token的记忆&#xff0c;和计算每个token发到crf的分数&#xff0c;发完了再退出来&#xff0c;最后形成1模型。那么…

Python主页

文章目录 Python全套内容整理 Python全套内容整理 杂项 代码风格 Python之禅命名规范 基础语法 数值运算赋值判断循环函数 参数(*args、**krags、\、*) 包 import 基础类 字符串 str类方法 列表元组字典集合 集合速览 进阶功能 异常文件类 常见模块 ossys 常见模块&#xf…

免费可视化工具大显身手:公司财务报表一键生成

面对海量的财务数据&#xff0c;如何快速、准确地提炼出有价值的信息&#xff0c;并以直观易懂的方式呈现给管理层及利益相关者&#xff0c;成为了每一家企业面临的重大挑战。 传统财务报表编制过程繁琐&#xff0c;不仅耗时耗力&#xff0c;还容易出错。而一些可视化工具&…

Web服务统一身份认证协议设计与实现

Web服务统一身份认证协议设计与实现 “Design and Implementation of Unified Web Service Authentication Protocol” 完整下载链接:Web服务统一身份认证协议设计与实现 文章目录 Web服务统一身份认证协议设计与实现摘要第一章 绪论1.1 研究背景1.2 研究目的和意义1.3 研究内…

Java学习笔记(四)控制流程语句、循环、跳转控制语句

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍Java控制流程语句、循环、跳转控制语句使用以及部分理论知识 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主收将持续更新学习记录获&#xff0c;友友们有任何问题…

Java多线线程-----等待唤醒机制(wait notify)

目录 一.等待唤醒机制简介&#xff1a; 二.synchronized,wait(),notify(): 三.等待唤醒机制案例: 例题一&#xff1a; 例题二&#xff1a; 四.什么时候释放锁—wait&#xff08;&#xff09;、notify&#xff08;&#xff09; 一.等待唤醒机制简介&#xff1a; 由于线程之…

华为嵌入式面试题及参考答案(持续更新)

目录 详细讲TCP/IP协议的层数 材料硬度由什么决定? SD3.0接口电压标准 晶振市场失效率 RS232-C的硬件接口组成 详细讲眼图的功能 局域网传输介质有哪几类? 详细讲OSI模型 NMOS与PMOS的区别 I2C和SPI的区别 Static在C语言中的用法 堆栈和队列的区别 数组的时间复…

pyqt5制作音乐播放器(第三版)

这次接入了数据库&#xff0c;增加了翻页模式&#xff0c;更新了功能跳转之间的细节 数据设计&#xff1a; 收藏 like1时表示被收藏&#xff0c;展示show0的时候表示表数据被搜索 from peewee import Model, PrimaryKeyField, CharField, BooleanField, MySQLDatabase,Integer…

【区块链+绿色低碳】基于区块链的碳排放管理系统 | FISCO BCOS应用案例

目前业内的碳排放核查方式主要依靠于第三方人工核查、手动填报数据&#xff0c;然后由具备有认证资质的机构进行核验 盖章。但在此过程中存在数据造假的情况&#xff0c;给碳排放量核算的准确性、可靠性带来挑战。 中科易云采用国产开源联盟链 FISCO BCOS&#xff0c;推出基于…

搭建博客系统#Golang

WANLI 博客系统 项目介绍 基于vue3和gin框架开发的前后端分离个人博客系统&#xff0c;包含md格式的文本编辑展示&#xff0c;点赞评论收藏&#xff0c;新闻热点&#xff0c;匿名聊天室&#xff0c;文章搜索等功能。 项目已经部署并运行&#xff0c;快速开发可以查看博客&am…

GitHub每日最火火火项目(7.25)

1. 项目名称&#xff1a;public - apis / public - apis 项目介绍&#xff1a;这是一个集体列表&#xff0c;收集了各种免费的 APIs。在当今的软件开发中&#xff0c;API&#xff08;应用程序编程接口&#xff09;扮演着至关重要的角色&#xff0c;它们允许不同的应用程序和服…

基于Go语言开发调用高德API地址逆编码

最近公司有一个需求&#xff0c;有一批数据只有经纬度没有确定地址&#xff0c;现在需要根据经纬度补全地址&#xff0c;刚好高德提供这么一个API&#xff0c;可以拿来使用。 不过因为提供的数据的经纬度是大地2000坐标系&#xff0c;跟高德坐标系还不一样&#xff0c;需要进行…

培训第十一天(nfs与samba共享文件)

上午 1、环境准备 &#xff08;1&#xff09;yum源 &#xff08;一个云仓库pepl仓库&#xff09; [rootweb ~]# vim /etc/yum.repos.d/hh.repo [a]nameabaseurlfile:///mntgpgcheck0[rootweb ~]# vim /etc/fstab /dev/cdrom /mnt iso9660 defaults 0 0[rootweb ~]# mount -a[…

WebKit与PWA:打造无缝的渐进式Web应用体验

WebKit与PWA&#xff1a;打造无缝的渐进式Web应用体验 随着移动互联网的快速发展&#xff0c;用户对于Web应用的体验要求越来越高。Progressive Web Apps&#xff08;PWA&#xff09;&#xff0c;即渐进式Web应用&#xff0c;以其无需安装、易于更新、跨平台等特性&#xff0c…

JavaSE--基础语法--继承和多态(第三期)

一.继承 1.1我们为什么需要继承? 首先&#xff0c;Java中使用类对现实世界中实体来进行描述&#xff0c;类经过实例化之后的产物对象&#xff0c;则可以用来表示现实中的实体&#xff0c;但是 现实世界错综复杂&#xff0c;事物之间可能会存在一些关联&#xff0c;那在设计程…

Spring-一个接口拥有多实现类-企业应用场景

前言: 由于java的多态特性,往往一个接口有多种具体的实现,传统的做法是在一个实现类中新建不同方法。但这种做法既不符合OOP的思想,而且当每种实现逻辑都相对复杂的时候,会让我们的代码显得臃肿和凌乱,当我们只需要使用其中一种实现的时候,没有必要去关心其他实现,所以…

Java读取文件中多个JSON对象,并且16进制字符串和byte相互转换,将byte转为16进制字符串并写入json文件

Java读取文件中多个JSON对象 File file new File("/home/renjx/testcases.json");//将json转为mapsObjectMapper objectMapper new ObjectMapper();List<Map<String, String>> maps objectMapper.readValue(file, new TypeReference<List<Map&…

Apache虚拟主机VirtualHost配置项详解

在Apache中,VirtualHost容器用于定义一个虚拟主机的配置,它允许在单一的物理服务器上托管多个不同的网站,每个网站可以有自己的域名、文档根目录、错误日志等。VirtualHost内的配置项非常灵活,可以包含从基本的网站信息到高级的URL重写和安全设置。 以下是一些常见的Virtu…

Java之数组应用-冒泡排序-二分查找

冒泡排序 冒泡(Bubble Sort)排序是一种简单排序算法&#xff0c;它通过依次比较交换两个相邻元素实现功能。每一次冒泡会让至少一个元素移动到它应该在的位置上&#xff0c;这样 n 次冒泡就完成了 n 个数据的排序工作。 这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”…