4.10-4.11学习总结

目录

MySql

 关系型库数据

 mysql启动方法

 SQL通用语法

查询表

创建表

Mysql数据类型 

表操作-修改

 MySQL图形化界面

 DCL

函数

 约束

JDBC


MySql

4.10-4.11学习总结_第1张图片

 关系型库数据

建立在关系模型基础上,由多张相互连接的二维表组成的数据库

特点:

  1. 使用表存储数据,格式统一,便于维护
  2. 使用SQL语言操作,标准统一,使用方便

4.10-4.11学习总结_第2张图片 4.10-4.11学习总结_第3张图片

 mysql启动方法

4.10-4.11学习总结_第4张图片

2.客户端链接:

1.MYsql提供的的客户端命令行工具 

4.10-4.11学习总结_第5张图片

4.10-4.11学习总结_第6张图片

使用这种方式,需要配置PATH环境变量  

 SQL通用语法

1.SQL语句可以单行或多行书写,以分号结尾。
2.SQL语句可以使用空格/缩进来增强语句的可读性。
3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
4.注释:
单行注释:--注释内容 或# 注释内容(MySQL特有)
多行注释:/*注释内容*/

 4.10-4.11学习总结_第7张图片

 1.DDL

查询所有数据库

show databases;

查询当前数据库

select database();

创建

create database [if not exists] 数据库名称 [default charset 字符集] [collate 排序规则]

删除

drop database[if exists]数据库名

使用

use 数据库名

查询表

1.查询当前数据库所有表:

show tables;

2.查询表结构:

desc 表名;

3.查询指定表的建表语句:

show create table 表名;

创建表

4.10-4.11学习总结_第8张图片

Mysql数据类型 

4.10-4.11学习总结_第9张图片

4.10-4.11学习总结_第10张图片

 4.10-4.11学习总结_第11张图片

如果将一个char 类型定义为 char (10),那么即使只输入了一个字符,它在内存中仍然占用10个字符 

varchar 会在使用的时候根据内容去计算存储的内容,输入多少字符它就会占用几个字符。

对于用户的用户名最好使用 varchar ;但是只需要使用一个字符就可以表示性别 ;

4.10-4.11学习总结_第12张图片

表操作-修改

1.添加字段

alter table 表名 add 字段名 类型(长度) [comment 注释] [约束]

2.修改数据类型

alter table 表名 modify 字段名 新数据类型(长度);

3.修改字段名和字段类型

alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];

4.删除字段:

alter table 表名 drop 字段名;

5.修改表名

alter table 表名 rename to 新表名;

6.删除表

drop table [if exists] 表名;

7.删除指定表,并重新创建表

truncate table 表名;

在删除表时,表中的全部数据也会被删除。

 MySQL图形化界面

DML:用来对数据库中表的数据记录进行增删改操作。

  • 添加数据(INSERT)
  • 修改数据(UPDATE)
  • 删除数据(DELETE)

1.添加数据

(1)给指定字段添加数据

insert into 表名(字段名1,字段名2,...) values(值1,值2,...);

(2)给全部字段添加数据

insert into 表名 values(值1,值2,...);

(3)批量添加数据

insert into 表名(字段名1,字段名2,...)values(值1,值2,...),(值1,值2,...),(值1,值2,...);
insert into 表名(值1,值2,...),(值1,值2,...),(值1,值2,...);
  • 插入数据时,指定的字段顺序需要与值的顺序是一一对应的
  • 字符串和日期型数据应该包含在引号中
  • 插入的数据大小,应该在字段的规定范围中

2.修改数据

update 表名 set 字段1 = 值1 , 字段名2 = 值2,...[where 条件];

修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。

3.删除数据

delete from [表名] [where 条件]
  •  delete语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的所有数据
  • delete 语句不能删除某一个字段的值(可是使用update)

DQL:

DQL英文全称是Data Query Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。

查询关键字:SELECT

4.10-4.11学习总结_第13张图片

(1)基本查询 

(1)查询多个字段:

select 字段1,字段2,字段3... from 表名;
select *from 表名;

(2)设置别名

select 字段1 [AS 别名1], 字段2[AS 别名2] ...from 表名;

去除重复记录

select distinct 字段列表 from 表名;

(2)条件查询

4.10-4.11学习总结_第14张图片

注意点:

  • 查询时的等于是一个“=”而不是两个
  • 多选一除了用 “or” 之外还可以用 in(),中间用逗号隔开,例如要查询年龄等于18或者20或者40的人,有两种写法:
select *from  emp where age=18 or age = 20 or age =40;

select *from emp wherer age in(18.20.40)
  • 查询字段长度用的是 like 占位符,例如要查询名字为两个字的员工
select *from emp where name like '__';
  • 查询身份证号最后一位是X的员工信息
select *from emp where idcard like '%X';
select *from emp where idcard like '_________________X';

(3)聚合函数:

4.10-4.11学习总结_第15张图片

select count(*) from emp;

//16

若要统计某个限定条件的个数,例如统计来自西安地区的员工的年龄之和


select sum(age) from emp where work_address = '西安';

(4)分组查询

where与having区别:

  • 执行时机不同: where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
  • 判断条件不同: where不能对聚合函数进行判断,而having可以。

注意点;

  • 执行顺序: where >聚合函数>having 。
  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

 例如要根据性别分组,统计男性员工 和 女性员工的数量

select gender,count(*) from emp group by gender;

 或者查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址

select work_address,count(*) address_count from emp where age <45 
group by work_address having address_count >=3;

(5)排序查询

 排序方式;

  1. ASC:升序(默认值)
  2. DESC:降序
  3. 如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序

例如对一个表中的成员按照年龄升序排序

select *from emp order by age asc;

select *from emp order by age ;

例如根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序:

select *from emp order by age asc,entrydate desc ;

(6)分页查询

4.10-4.11学习总结_第16张图片

注意事项: 

  1. 起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数。
  2. 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
  3. 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10。

 4.10-4.11学习总结_第17张图片

 一些练习:

-- 1.查询年龄为20,21,22,23岁的员工信息。
select *from emp where gender = '女' and age in(20,21,22,23);

-- 2.查询性别为男,并且年龄在20-40岁(含)以内的姓名为三个字的员工。
select *from emp where gender = '男' and age between 20 and 40 and name like '___';

-- 3.统计员工表中,年龄小于60岁的,男性员工和女性员工的人数。
select gender , count(*) from emp where age <60 group by gender;
-- 4.查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按年龄升序排序,如果年龄相同按入职时间降序排序
select  name ,age from emp where age <=35 order by age asc,entrydate desc ;

-- 5、查询性别为男,且年龄在20-40岁(含)以内的前5个员工信息,对查询的结果按年龄升序排序,年龄相同按入职时间升序排序。
select *from emp where (age between 20 and 40) and gender ='男' 
order by age asc , entrydate asc  limit 5;

 (7)DQL执行顺序

 4.10-4.11学习总结_第18张图片

 DCL

DCL用来管理数据库用户、控制数据库的访问权限。

4.10-4.11学习总结_第19张图片

 (1)DCL管理用户

4.10-4.11学习总结_第20张图片

  •  创建用户可以在任何主机访问该数据库,主机名用%
  • 创建用户可以在某个主机上访问该数据库,则需要指定主机名

(2)DCL-权限控制

4.10-4.11学习总结_第21张图片

 4.10-4.11学习总结_第22张图片

  • 多个权限之间,使用逗号分隔
  • 授权时,数据库名和表名可以使用*进行通配,代表所有。 

函数

函数是指一段可以直接被另一段程序调用的程序或代码。

(1)字符串函数:

 4.10-4.11学习总结_第23张图片

select concat('Hello,','Mysql');
-- Hello,Mysql

select lower('HELLO');
-- hello

select upper('hello');
-- HELLO

select lpad('01',5,'-');
-- ---01

select trim('  Hello    MySQL   ');
-- Hello    MySQL

select substring('Hello MySql',1,5);
-- Hello

通过字符串 lpad 函数 ,可以实现对学生 学号前面的填充

例如设定学生的学号 id  

 4.10-4.11学习总结_第24张图片

 执行以下语句后:

update student
set student_id = lpad(student_id,9,'20224010')
where Entrance_time = '2022-09-01';

 4.10-4.11学习总结_第25张图片

 (2)数值函数

4.10-4.11学习总结_第26张图片

select ceil(1.1);
-- 2

select floor(1.9);
-- 1

select mod(3,5);
-- 3

select rand();
-- 0.7219960677642339
-- 0.6061000177693553
-- 0.8645119162877202


select  round(2.567,2);
-- 2.57
通过数据库的函数,生成一个六位数的随机验证码:
select lpad (round(rand()*1000000,0),6,'0');
-- 504260
-- 927762
-- 024998

(3)日期函数

4.10-4.11学习总结_第27张图片

select curdate();
-- 2023-04-10

select curtime();
-- 21:25:40

select now();
-- select now();

select YEAR(now());
-- 2023

select MONTH(now());
-- 4

select DAY(now());
-- 11

select date_add(now(),INTERVAL 70 YEAR);
-- 2093-04-10 21:26:29

select datediff('2022-12-01','2001-09-01');
-- 7761

(4)流程函数

4.10-4.11学习总结_第28张图片

select
    name,
    ( case Entrance_time when '2022-09-01' then '大一' when '2021-09-01' then '大二' else '大三'end)
from student;

4.10-4.11学习总结_第29张图片

 约束

概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。

目的:保证数据库中数据的正确、有效性和完整性。

4.10-4.11学习总结_第30张图片

 约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

1.约束演示

create table user(
    id int primary key auto_increment comment '编号',
    name varchar(10) not null unique comment'姓名',
    age int check (age between 0 and 120) comment '年龄',
    status char(1) default '1' comment '状态',
    gender char(1) comment '性别'
)comment '用户表';


insert into user( name, age, status, gender)
    values ('Tom',19,'1','男'),('Jack',20,'0','男');

4.10-4.11学习总结_第31张图片

为编号增加了一个 auto_increment 约束,就可以明显见到编号是不断在自增的

4.10-4.11学习总结_第32张图片

 4.10-4.11学习总结_第33张图片

 给姓名增加的约束 not null 和 unique 添加姓名时不能为空或者重复

(3)外键约束 

外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

4.10-4.11学习总结_第34张图片

 目前上述的两张表,在数据库层面,并未建立外键关联,所以是无法保证数据的一致性和完整性的。

4.10-4.11学习总结_第35张图片

 外键约束的删除/更新4.10-4.11学习总结_第36张图片

 外键约束的删除和更新可用于实现课表与老师或者老师和学生之间的联系

多表查询:

4.10-4.11学习总结_第37张图片

JDBC

 JDBC就是使用Java语言操作关系型数据库的一套API

4.10-4.11学习总结_第38张图片

 4.10-4.11学习总结_第39张图片

JDBC本质:

  • 官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口
  • 各个数据库厂商去实现这套接口,提供数据库驱动jar包
  • 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类

 JDBC好处:

  • 各数据库厂商使用相同的接口,Java代码不
  • 需要针对不同数据库分别开发
  • 可随时替换底层数据库,访问数据库的Java代码基本不变

4.10-4.11学习总结_第40张图片

常用接口
DriveManager:用于管理JDBC驱动的服务类

Connection:代表数据库连接对象

ResultSet:结果集对象

你可能感兴趣的:(学习)