初学java 数据库相关学习

创建数据库:

主键: unsigned primary key auto_increment

外键: foreign key(xx) references table_name(xx)

字段:

类型: int ; tinyint ;char(20);varchar(255); date; datetime; text; float(5,2); double(10,2); long; decimal(15,10)

约束:primary key; foreign key; not null; unique; unsigned; default; check

备注: comment 'xxxxx'

java 复制代码
create table my_tab (
    id int unsigned primary key auto_increment
    username varchar(20) not null unique comment '用户名',
    age int CHECK (age > 0 AND age <= 200)
    gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',
    image varchar(300)
    entrydate date
    column1 int,
    column2 int,
    CONSTRAINT fk_example1 FOREIGN KEY (column1) REFERENCES ref_table1(ref_column1),
    CONSTRAINT fk_example2 FOREIGN KEY (column2) REFERENCES ref_table2(ref_column2),
) comment '表';

表字段增删改:

java 复制代码
alter table tbname add qq varchar(11) comment 'QQ号码';
alter table tbname modify qq varchar(13) comment 'QQ号码';
alter table tbname change qq qq_num varchar(13) comment 'QQ号码';
alter table tbname drop qq;
rename table tbname to newtbname;

数据增删改查:

增: insert into table(...) value(...)

删: delete from table where(and ; or ; not ; is null)

改: update tabname set ... where ...

查: select [distinct] ... from where(条件) ... group by(分组)... having...(分组后条件)... order by(排序asc desc) ... limit(分页索引起始,查询总条数) ...

java 复制代码
insert into tbname(name, age) values ('张无忌', 10);
insert into tbname values('a',1),('b',2)...

delete from tabname
delete from tabname where not age=1
delete from tabname where age=1 and name!='a'
delete from tabname where (age=1 and name!='a') or name='c'

update tabname set area='wuhan',emp='fengxing'
update tabname set age=25,phone=123 where name='a'

select age from tb where area='wuhan'
select name,age,area from tb where name like '熊_龙%'
//聚合函数 count max min avg sum
select count(*) from tb where name like '%龙%'
select max(age) from tb
//分地区统计总数,年龄低于30,按照年龄分组,总数大于1个的,增序显示前3条数
SELECT age,area,count(*) FROM test WHERE age<30 GROUP BY age,area ORDER BY age ASC,area DESC LIMIT 100
//解析如下,按年龄地区统计总数,group by代表每行是一个满足条件(age<30)的聚合,优先按照age增序,area降序排列,显示100条:
//切记 select超过一个以上的列时如age,area,所有的列必须包含在group by 中,select查询的列应该是group by的子集,否则语意上有冲突,分组会出现分歧,比如使用group by age,按照age分组,但是你要求显示area列,那这个聚合可能有wuhan hangzhou shanghai,数据库不可能显示成
// 18 	wuhan,hangzhou,shanghai   32
//另外select必须有一个显示的列,不能是*,group by还需要筛选的可以在后面添加 having count(*)>5 / area!=shanghai 这种条件,对聚合后的列进行二次筛选,order by当然也必须要是group by内的列

函数和group by时配套使用的,
age		地区         count(*)
18		wuhan		  3
18		shanghai	  9
18		hangzhou      6
19		wuhan		  5
21		shanghai	  7
21		hangzhou	  2
26		hangzhou	  8
29		shanghai	  12
相关推荐
阿华的代码王国2 分钟前
【Android】PopupWindow实现长按菜单
android·xml·java·前端·后端
数据要素X6 分钟前
【数据架构08】数字化转型架构篇
大数据·数据库·数据仓库·架构·数据库架构
找不到、了7 分钟前
关于MyBatis 的懒加载(Lazy Loading)机制
java·mybatis
啃火龙果的兔子36 分钟前
快速搭建Java服务指南
java·开发语言
未来之窗软件服务38 分钟前
智慧收银系统开发进销存库存统计,便利店、水果店、建材与家居行业的库存汇总管理—仙盟创梦IDE
java·开发语言·ide·进销存·仙盟创梦ide·东方仙盟·收银台
老纪的技术唠嗑局40 分钟前
Agentic AI, 基于 Dify x OceanBase 的实践
数据库
CodeCraft Studio1 小时前
国产化PDF处理控件Spire.PDF教程:Java 提取 PDF 图片,高质量提取与图片过滤技巧
java·python·pdf·国产化·文档处理·spire·pdf图片提取
ouliten1 小时前
cuda编程笔记(11)--学习cuBLAS的简单使用
笔记·学习·cuda
冒泡的肥皂2 小时前
数据库最近学到的小知识(一
数据库·后端·架构
枫叶落雨2222 小时前
Hutool 的 WordTree(敏感词检测)
java·开发语言