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,一经查实,立即删除!

相关文章

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

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

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

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

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; 由于线程之…

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…

培训第十一天(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[…

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

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

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

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

实在智能RPA助力三大运营商用“AI+RPA”打造新质生产力!

近年来&#xff0c;人工智能及自动化技术的突破性进展&#xff0c;正深刻地影响和重塑全球的生活生产模式。 作为我国现代化和数字化进程中的先行军的运营商行业&#xff0c;以中国电信、中国联通和中国移动等为代表的运营商企业&#xff0c;正致力于把握这一历史机遇&#xff…

SpringBoot项目配置多环境env

javaSpringBoot项目多环境配置 为什么maven Profiles 救命项目的pom文件管理 为什么 项目里面需要集成测试环境、开发、生产、多云环境&#xff0c;不仅需要application.yml,还需要加载别的config配置文件 故&#xff0c;我需要便捷多环境配置管理 maven Profiles 救命 项目的…

MySQL练手 --- 1934. 确认率

题目链接&#xff1a;1934. 确认率 思路 由题可知&#xff0c;两个表&#xff0c;一个表为Signups注册表&#xff0c;另一个表为Confirmations信息确认表&#xff0c;表的关联关系为 一对一&#xff0c;且user_id作为两个表的连接条件&#xff08;匹配字段&#xff09;&#…

【C# WInForm】将TextBox从输入框设置为文本框

1.需求情形&#xff1a; textbox作为最常用的控件之一&#xff0c;通常是用来输入文本信息或者显示文字&#xff0c;但是如果要在界面中显示大段文本&#xff0c;一个带有边框、可选中的文本样式似乎不合适。像这样&#xff1a; 我需要的是这段文字不仅能跨行&#xff0c;而且…

c++笔记2

目录 2.2 栈底&#xff08;bottom&#xff09; } 大数乘大数 节点&#xff1a;包含一个数据元素及若干指向子树分支的信息 。 节点的度&#xff1a;一个节点拥有子树的数目称为节点的度 。 叶子节点&#xff1a;也称为终端节点&#xff0c;没有子树的节点或者度为零的节点…

elmentui this.$confirm使用模板字符串构建HTML结构

tip(){const checkingList [];const findList[入会1,入会2,入会3] //数组const sueccList [{name:入会,suecc:1000,numcot:1000},{name:aaaaa,suecc:222,numcot:3333}] //数组对象var message// 使用模板字符串构建HTML结构if(sueccList.length>0){message <div>…

Apache ShardingSphere Proxy5.5.0实现MySQL分库分表与读写分离

1. 前提准备 1.1 主机IP:192.168.186.77 version: 3.8services:mysql-master:image: mysql:latestcontainer_name: mysql-masterenvironment:MYSQL_ROOT_PASSWORD: 123456MYSQL_USER: masterMYSQL_PASSWORD: 123456MYSQL_DATABASE: db1 ports:- "3306:3306&quo…

ModuleNotFoundError: No module named ‘scrapy.utils.reqser‘

在scrapy中使用scrapy-rabbitmq-scheduler会出现报错 ModuleNotFoundError: No module named scrapy.utils.reqser原因是新的版本的scrapy已经摒弃了该方法,但是scrapy-rabbitmq-scheduler 没有及时的更新,所以此时有两种解决方法 方法一.将scrapy回退至旧版本,找到对应的旧版…

android13 Settings动态显示隐藏某一项

总纲 android13 rom 开发总纲说明 目录 1.前言 2.确定目标设置项 3.修改参考 3.1 方法1 3.2 方法2 4.编译测试 5.彩蛋 1.前言 在Android 13系统中,动态显示或隐藏Settings应用中的某一项通常涉及到对Settings应用的内部逻辑进行修改。由于Settings应用是一个系统应用…

Mybatis——快速入门

介绍 MyBatis是一款优秀的持久层&#xff08;Dao层&#xff09;框架&#xff0c;用于简化JDBC的开发。MyBatis 底层是基于 JDBC 实现的&#xff0c;它封装了 JDBC 的大部分功能&#xff0c;使得数据库操作更加便捷和高效。同时&#xff0c;MyBatis 也保留了 JDBC 的灵活性&…