数据库管理系统

本文详细介绍了MySQL数据库的管理,包括字符集选择、表的创建与修改、数据的增删查改操作,以及复杂的查询技巧如条件查询、聚合查询、分页和排序。此外,还讲解了SQL中的流程控制、数据约束、存储过程和触发器的使用,深入探讨了数据的分组、子查询、多表关联查询和函数应用,帮助读者掌握数据库管理与高效查询的实践方法。
摘要由CSDN通过智能技术生成

管理数据库

注意:mysql的关键字不区分大小写

  1. 查询所有的数据库
show databases;
  1. 创建数据库的SQL语句
格式:create database 数据库名 default character set 字符编码 collate 字符编码校验规则
 eg: create database demo default character set utf8 collate utf8_general_ci;
  1. 修改数据库的字符编码
 格式:alter database 数据库名 default character set 字符编码

eg: alter database demo default character set gbk;
  1. 删除数据库
 格式:drop database 数据库名
  eg: drop database demo;
  1. 切换操作的数据库
  格式:use 数据库名
  eg: use demo;

字符集,

什么是字符集

我们都知道,计算机底层只能存二进制,01010000

abc,您好,55665,这些如果存到计算机,得有对应的二进制编码规则
二进制的编码规则就是字符集,有很多个
对应中国的用户来说,中英文数字特殊字符。。。。
我们也有自己的字符集,gbk,utf-8,目前用的最多的是utf-8,这个字符集对中文的支持最好

如果想要把公司的所有员工都存到数据库

  1. 有一个表来保存员工信息,给表一个名字,这个表名在当前的数据库下表名是唯一的,一般表名的命名都是要有含义,首选英文名称,emp
  2. 给表定义要存什么,员工是一个概念,对应要存员工的什么(信息)进行进一步的分解,各级实际的情况来分解,id,姓名,性别,身份证号,部门
  3. 表存数据是以行的形式来存储,一个行数据就一个完成的概念,对应emp来说,它的一行数据就一个员工
  4. 在步骤2,我们又知道员工的整体概念被分解一个个单独信息(id,姓名,性别,身份证号,部门等等这些东西),这些就被称为一行的多个列,正式这些多个列的信息构成一行完整的数据
  5. 被分解一个个单独信息,我们称之为字段(属性的意思)
  6. 表名–字段名的关系,具体到我们现在的员工表的例子,就是员工有哪些字段(属性),这样就通过表名–字段名这样的形式,就把员工给描述清楚了
  7. 字段的名和表名也是一样,也得最好有含义,首选英文名称
id,姓名,性别,年龄,身份证号,部门,对于这些字段来说,要存到数据库的表中,要对字段做一个数据类型
年龄,一般是数字的
姓名,字符串类型
身份证号,一般用字符串类型规定
生日,日期类型

这个也是RDMS的特有的东西,就是数据的结构化,可以规则某一列是指定的某种数据类型

浮点数和定点数,都有有效数字位数m和小数位位数d的定义

有效数字,是之一个数从左开始(不是0的)向右计数

  • 2.34,2位有效数字,2.3
  • 0.123,2位有效数字,0.12

管理表

注意:mysql的关键字不区分大小写

  1. 查看当前数据库的所有表
  • 查看当前操作的数据库有哪些表
 show tables;
  1. 创建表
格式:
CREATE TABLE 表名 (
  字段名 字段类型 [NOT NULL] [AUTO_INCREMENT],
  [字段名 字段类型 ,]
   .....
  [字段名 字段类型 ,]
  [PRIMARY KEY (字段名)]
) 

示例:
#创建学生表 (表名和字段名经量用有含义的中文来表示)
create table student(
id int not null,
#id为主键,不能是null
name varchar(100),  
age int(2),
primary key(id)
)
  1. 修改表
  • 给表添加一个字段
格式:
alter table 表名 add column 字段名 字段类型;

示例:
alter table student add column sex varchar(2);
  • 给表添加多个字段
格式:
alter table 表名 add 字段名 字段类型,add 字段名 字段类型,...,add 字段名 字段类型;

示例:
alter table student add a int,add b int,add c int;
  • 修改字段数据类型
格式:
alter table 表名 modify column 字段名 字段类型;

示例:
alter table student modify column sex char(4);
  • 修改字段的名称
格式:
alter table 表名 change column 原字段名 新字段名 字段的数据类型

示例:
alter table student change column a a1 int;
  • 删除表的一到多个字段
格式:
alter table 表名 drop column 字段名;
alter table 表名 drop column 字段名,...,drop column 字段名;

示例:
alter table student drop column a1;
alter table student drop column b,drop column c;
  • 修改表名
格式:
alter table 原表名 rename to 新表名;

示例:
alter table student rename to stu;
  1. 删除表
格式:
drop table 表名

示例:
drop table student;
  1. 查看表结构
格式:
describe 表名

示例:
describe student;

管理数据

  1. 查询表的所有数据
格式:
select * from 表名;

示例:
select * from student;
  1. 给表插入数据
  • 单条全量插入数据,注意’’(一组单引号)代表字符串,在给所有字段插入数据时,要根据表结构的字段顺序给值
格式:
insert into 表名 values (字段1的值,字段2的值,...,字段n的值);

示例:
insert into student values (1,'张三',14,'男');
  • 单条指定字段插入数据,注意插入的值要和前面指定的字段的顺序保存一致
格式:
insert into 表名 (字段1,字段2,...,字段n) values (字段1的值,字段2的值,...,字段n的值);
insert into 表名 (字段1,字段3,字段5) values (字段1的值,字段3的值,字段5的值);

示例:
insert into student (id,name,age) values (2,'李四',15);
insert into student (name,age,id) values ('王五',16,3);

注意:字段的值必须可以空才可以指定输入

  • 批量插入数据
格式:
insert into 表名 values 
(字段1的值,字段2的值,...,字段n的值),
(字段1的值,字段2的值,...,字段n的值),
...
(字段1的值,字段2的值,...,字段n的值);

示例:
insert into student values (4,'lucy',14,'女'),(5,'小明',15,'男'),(6,'小红',16,'女');

注意:在插入数据时,如果某一个字段是自动递增的,可以不用插入这个字段的值,而由数据库自己计算填充

  1. 修改数据
  • 修改一到多个指定字段的所有行的值
格式:
update 表名 set 字段名 = 值,字段名 = 值,...,字段名 = 值;


示例:
把表的当前所有行的class字段的值改成'二班'
update student set class = '二班';
  • 按条件修改指定字段的值
格式:
update 表名 set 字段名 = 值 where 字段名 = 值;

示例:
把id为2的学生的性别修改为男
update student set sex = '男' where id = 2;
  • 按条件修改一到多个指定字段的所有行的值
    • 这种查询是前面2种查询的结合使用
    • 按条件改表某一行的某几个字段,注意不加where条件会改变当前所有行的数据
格式:
update 表名 set 字段名 = 值,字段名 = 值,...,字段名 = 值where 字段名 = 值;

示例:
把id为3的学生的姓名改为张三,年龄改为12,性别改为男,班级改为一般
update student set name = '张三',age = 12,sex = '男',class = '一班' where id = 3;
  1. 删除表

删除表都是按行删除

  • 按条件删除
格式:
delete from 表名 where 字段名 = 值;

示例:
删除学生表中id为2的对应行数据
delete from student where id = 2;
删除学生表中姓名为lili1的对应行数据(如果有多个叫lili1,就是删除多行)
delete from student where name = 'lili1';
  • 整体删除,删除表当前的所有行数据
格式:
delete from 表名

示例:
删除学生表的所有行数据
delete from student;

注意:

  • 如果表中有字段是字段递增类型的,使用delete删除全表后,自动递增的起始点保留。例如,一个表的id已经自动递增到了10,那么使用delete删除全表后,再次insert插入数据时,id是从10继续往后递增,而不会从0开始计算。
  • 如果想要让自动递增也回归初始状态,需要把表drop掉,然后重新建表。
  • 如果表中有字段是字段递增类型的时候,删除中间的某条数据,不会影响递增的累加。例如,一个表的id已经自动递增到了10,那么使用delete删除id为3的那行数据,再次insert插入数据时,id是从10继续往后递增,中间缺失的3就缺失了,除非你在insert的时候指定插入的id字段的值为3。

查询数据(重点)

简单查询

  • 查询所有列
格式:
select * from 表名;

示例:
select * from student;
  • 查询指定的列
格式:
select 字段,字段,...,字段 from 表名;

示例:
select name,class from student;
  • 给查询的指定列取一个别名
格式:
select 字段名 别名,字段名 别名 from 表名;

示例:
select name '姓名',class '班级' from student;

注意:取别名在多表联合查询时可能会用,例如表a有一个字段叫name,表b有一个字段叫name,我们就可以通过设置别名来区分这两个name
  • 合并列查询,

例如,我们想做把班级和姓名放在一个列中查询,展示的时候是 类似二班-张三这种的

select CONCAT(class,'-',name,'-',age,sex) '班级-姓名' from student;

合并查询可以做算数查询,例如查询servlet和jsp的总成绩

select name '姓名',(servlet + jsp) '总成绩' from student;
  • 查询时添加常量列
#就是直接查询一个普通的字符串,这个字符串在查询中就会作为一个常量在结果结果集中展示
select name, age, (servlet + jsp) '总成绩', class, '光明小学' from student;

select '常量' from student;
  • 去除某个列重复数据,
    使用distinct 列名,注意在使用的时候去重的列要单独查询,不要和其他队列一起查询
格式:
select distinct 字段名 from 表名;

示例:
查询学生的所有的年龄,查询时去除重复的年龄
select distinct age from student;

条件查询

基本格式:
select 字段,字段,...,字段 from 表名 where 查询条件

比较条件

符号	含义
=	等于
!=	不等于
>	大于
<	小于
>=	大于等于
<=	小于等于
between and	在a和b两个值之间,包含a和b
  • 查询所有年龄大于14岁的学生的姓名,性别,班级
select name,sex,class,age from student where age > 14;
  • 查询所有年龄大于等于14岁的学生的姓名,性别,年龄,班级
select name,sex,class,age from student where age >= 14;
  • 查询所有年龄小于14岁的学生的姓名,性别,年龄,班级
select name,sex,class,age from student where age < 14;
  • 查询所有年龄小于等于14岁的学生的姓名,性别,年龄,班级
select name,sex,class,age from student where age <= 14;
  • 查询所有jsp成绩在80到90之间的学生,(包含80和90)
select * from student where jsp between 80 and 90;

逻辑条件

符号	含义
and	    并且
or	    或者
  • and 和or可以无限连用
  • 查询二班的jsp成绩在95分以上的学生,这里查询要使用and,意思就并且
select * from student where class = '二班' and jsp > 95;
  • 查询二班的jsp成绩在95分以上的男学生
select * from student where class = '二班' and jsp > 95 and sex = '男';
  • 例如查询servlet的成绩在85分以上或者jsp成绩在95分以上的学生
select * from student where servlet > 85 or jsp > 95;
  • 例如查询servlet的成绩在85分以上或者jsp成绩在95分以上或者id为4的学生
select * from student where servlet > 85 or jsp > 95 or id = 4;
  • 比较条件和逻辑条件混合使用
    查询二班jsp成绩在95分以上或者一班servlet成绩在85分以上的学生
select * from student where (class = '二班' and jsp > 95) or (class = '一班' and servlet > 85);

判空条件

符号	    含义
=''	        是空字符串''
is nul	    是null值
is not null	不是null值
<>	        不是,非
<>''	    不是空字符串'',也不是null值
  • 查询name是’'的数据
SELECT * from student where name = '';
  • 查询name是null的数据
SELECT * from student where name is null;
  • 查询name不是null的数据,is not null单纯的指的是值不是null
SELECT * from student where name is not null;
  • 查询name不等于’'的数据,这个里面包含不等于null,也就是说<> '‘代表的意思是不是’'也不是null
SELECT * from student where name <> '';
  • 不等于条件<>,还可以用来判断别的值
例如:
查询所有姓名不是张三的学生
SELECT * from student where name <> '张三';

查询所有年龄不是14的学生
SELECT * from student where age <> 14;

模糊条件

字段类型为字符串时,查询字段值是否包含某些子串
例如:查询行姓张的学生都有哪些,这个需要模糊查询

符号	    含义
like	    包含
not like	不包含

模糊查询立刻主要是用来查询字符串,like 要配合_或者%一起使用

_是匹配0到1个字符,%是匹配0到多个字符

  • 查询name中含有一个张字的学生
select * from student whe
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mosun_zgs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值