DAY18.1 Java核心基础
MySQL
创建数据库
数据库是一个服务,实际开发需要根据具体的项目创建对应的数据库实例
create database mytest1 default character set utf8 collate utf8_general_ci;
create database mytest2 default character set utf8 collate utf8_bin;
collate 设置数据库的校验字符集:如何给数据库中的数据进行排序,不在 SQL 中添加任何排序语句的情况下,默认的排序值
utf8_general_ci:不区分大小写
utf8_bin:区分大小写
现在将a和B插入到两个数据库的users表中,两个表中的字段都是a和B,现在我们来查询试试
use mytest1;
insert into users(name) VALUES('a');
insert into users(name) VALUES('B');
mytest1:a B
mytest2:B a
use mytest1;
SELECT * FROM users ORDER BY name;
mytest1结果:
mytest1 校验字符集不区分大小写,所以 B 排在 a 后面
use mytest2;
SELECT * FROM users ORDER BY name;
mytest2结果:
mytest2 校验字符集区分大小写,所以比较的是字母的二进制编码,
二进制编码中
B:66
a:97
默认是升序排列,所以越小的排在前面,所以 B a
创建数据表
create table 表名(字段列表);
-- 示例:
create table users(
name varchar(20)
);
MySQL 中的数据类型
整数类型:tinyint(1 个字节 byte)smallint(2 个字节)mediumint(3 个字节)int(4 个字节)bigint(8 个字节)
浮点类型:float(4 个字节)double(8 个字节)
定点类型:decimal(M,D) M 数字的最大值(精度)D 小数点后数字的长度(标度)
日期和时间类型:datetime、date、timestamp、time、year
- year:1 个字节,取值范围:1901~2155
- time:3 个字节,取值范围:-838:59:59 ~ 838:59:59 负数是因为它可以表示时间间隔
- date:3 个字节,取值范围:1000-01-01 ~ 9999-12-31
- datetime:8 个字节,取值范围:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
- timestamp:4 个字节,表示 1970 年 1 月 1 号到现在的毫秒数
- 字符串类型:char(M) M 个字节、varchar(M) M+1 个字节、text(M) M + 2 个字节
- 二进制类型:bit、binary、varbinary、tinyblob、blob、mediumblob、longblob
- bit(M) M 个字节
- binary(M) M 个字节
- varbinary(M) M 个字节
- tinyblob 255 个字节
- blob 2^16-1 个字节
- mediumblob 2^24-1 个字节
- longblob 2^32-1 个字节
创建数据库
1、创建数据库
create database 数据库名 default character set utf8 collate utf8_general_ci;
2、删除数据库
drop database 数据库名;
3、查看数据库
show databases;
4、选择数据库(在需要操作数据的时候选择一个数据库操作,不然不知道你要操作哪一个数据库)
use 数据库名;
5、创建数据表
create table 数据表名(字段列表);
-- 示例:
create table users(
name varchar(20)
);
6、删除数据表
drop table 数据表名;
7、查看数据表
show tables;
8、查看表结构
desc 数据表名;
9、修改表结构
-
新增一个字段
-- 在student表中新增一个字段sex varchar(2)类型 alter table student add sex varchar(2);
-
修改一个字段
-- 修改student表中的sex字段,改为字段名为gender int类型 alter table student change sex gender int;
-
删除一个字段
-- 删除student表中的gender字段 alter table student drop gender;
SQL 函数
SQL 提供了很多函数,可以完成很复杂的功能
业务尽可能使用 Java 来完成,SQL 一般只负责对数据的管理
MySQL 本身是一种检索机制,消耗很多资源
SQL 只是针对查询出来的结果进行了处理,而不会影响到原数据的值
数学函数
abs() 求绝对值
select abs(score) from student;
返回结果
floor() 返回小于参数的最大整数(分数是90.1,返回的是90)
select floor(score) from student;
ceil() 返回大于参数的最小整数(分数是90.1,返回的是91)
select ceil(score) from student;
字符串函数
insert(s1,index,len,s2)
s1 中 index 位置开始,长度为 len 的字符替换成 s2,index 从 1 开始
select insert(name,1,2,"小红") from student;
upper()、ucase() 将字母变为大写
select ucase(name) from student;
select upper(name) from student;
lower()、lcase() 将字母变为小写
select lower(name) from student;
select lcase(name) from student;
left(s,len) 返回 s 字符串的前 len 个字符
select left(name,1) from student;
right(s,len) 返回 s 字符串的后 len 个字符
select right(name,2) from student;
substring(s,index,len) 截取 s 字符串,从 index 位置开始,长度为 len
select substring(name,2,1) from student;
reverse() 反序输出
select reverse(name) from student;
日期函数
curdate() current_date() 获取当前日期
select current_date();
curtime() current_time() 获取当前时间
select current_time() from student;
now() 获取当前日期+时间
select now();
datediff(d1,d2) d1 和 d2 之间相隔的天数
select datediff("2024-05-01","2021-06-23");
adddate(d,n) 返回 d 日期之后 n 天的日期
select adddate("2024-05-01",1000);
subdate(d,n) 返回 d 日期之前 n 天的日期
select subdate("2024-05-01",1000);
聚合函数
count() 根据某个字段统计数量
select count(id) from student;
sum() 计算某个字段值的总和
select sum(score) from student;
avg() 求某个字段值的平均值
select avg(score) from student;
max() 求某个字段的最大值
select max(score) from student;
min() 求某个字段的最小值
select min(score) from student;