目录:
* 使用SQL语句完成单表的增删改查
* 使用JDBC通过java代码完成单表的增删改查
一 数据库
1.1 数据库概述
*什么是数据库
数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以通过SQL对数据库中的数据进行增加,修改,删除以及查询操作。
*数据库和表
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立,使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中表的数据。
*常见的数据库(软件)
MYSQL:开源免费的数据库,小型的数据库,已经被Oracle收购了,MySQL6.X版本也开始收费,
mysql变异版:mariadb-->阿里云centos 内置数据库
Oracle: 收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL.
SQLServer:MicroSoft 公司收费的中型的数据库,C# .net等语言常使用
SyBase: 已经淡出历史舞台,提供了一个非常专业数据建模的工具PowerDesigner
SQLite:嵌入式的小型数据库,应用在手机端
Java相关的数据库:MYSQL ,Oracle
1.2 MySql使用
- 打开window"服务"
win+r,运行-->services.msc
- 启动和关闭(必须以管理运行cmd命令窗口)
- 登录
1.3 SQL语句
* 什么是SQL语句
结构化查询语言,关系数据库语言的国际标准;
各个数据库厂商都支持ISO的SQL标准:普通话
各个数据库厂商在标准基础上做了自己的扩展:方言
*SQL分类
- 数据定义语言:简称DDL(Data Definition Language) ,用来定义数据库对象:数据库database,表table,列column等.关键字:创建 create ,修改 alter ,删除 drop等(结构)
- 数据操作语言 :简称DML(Data Manipulation Language) ,用来对数据库中表的记录进行更新;关键字: 插入 insert ,删除 delete, 更新 update等(数据)
- 数据查询语言:简称DQL(Data Query Language) , 用来查询数据库中表的记录,关键字:select , from , where 等
- 数据控制语言:简称DCL(Data Control Language) , 用来定义数据库的访问权限和安全级别,及创建用户,关键字:grant等.
1.4 数据库操作:database
- 创建数据库
*create database 数据库名;
*create database 数据库名 character set 字符集;
- 查看数据库
查看数据库服务器中所有的数据库: show databases;
查看某个数据库的定义的信息:show create database 数据库名;
- 删除数据库
drop database 数据库名称;
仅剩web08_1;
- 其他数据库操作命令
切换数据库: use 数据库名;
查看正在使用的数据库: select database();
1.5 表操作 table
- 创建表
create table 表名(
字段名 类型(长度) [约束],
字段名 类型(长度) [约束]
);
字符类型:varchar(n)
单表约束: * 主键约束: primary key ,要求被修饰的字段:唯一 和非空
* 唯一约束: unique , 要求被修饰的字段: 唯一
* 非空约束: not null, 要求被修饰的字段:非空
- 查看表
查看数据库中的所有表: show tables;
查看表结构: desc 表名;
- 删除表 drop table 表名;
- 修改表
添加一列 alter table 表名 add 列名 类型(长度) [约束]; --修改表添加列
修改列的类型(长度.约束)alter table 表名 modify 列名 类型(长度) 约束; --修改表修改列的类型长度及约束
修改列的列名alter table 表名 change 旧列名 新列名 类型(长度) 约束; -- 修改表修改列名;
删除表的列alter table 表名 drop 列名; --修改表删除列
修改表名rename table 表名 to 新表名; -- 修改表名
修改表字符集alter table 表名 character set 字符集; --修改表的字符集
1.6 对数据库表记录进行操作
- 插入记录 insert
语法: insert into 表 (列名1,列名2,列名3...) values (值1,值2,值3...); --向表中插入某些列
insert into 表 values (值1,值2,值3...); --想表中插入所有列
注意: ① 列名数与values后面的值得个数相等
② 列的顺序与插入的值的顺序一致
③列名的类型与插入的值要一致
④插入值得时候不能超过最大长度
⑤值如果是字符串或者日期需要加引号,一般都是单引号
问题:插入数据中文乱码问题解决方案:
方式一(不建议)
直接修改数据库安装目录里面的my.ini文件的第57行
方式二 set names gbk;
- 更新记录 update
① 不带条件的
他会将该列的所有记录都更改
② 带条件的
- 删除记录 delete
① 带条件的 delete from 表名 where 条件
注意,删除后,uid不会重置!
② 不带条件的 delete from 表名;
准备数据
删除操作
- 查询记录 query
语法 select [distinct] *| 列名 from 表名[where 条件]
① 简单查询(无条件查询)
*查询所有商品 select * from product;
* 查询商品名和商品价格 select pname,price from product;
* 查询所有商品信息使用表别名 select * from product as p;
* 查询商品名,使用列别名 select pname as p from product; as可以省略
* 去掉重复值(按照价格) select distinct(price) from pruduct;
准备重复的数据:
去掉重复数据
* 将所有的商品的价格+10进行显示 select pname,price+10 from product;
② 条件查询
where后的条件写法:
> ;< ;= ; >=;<=;<>
like 使用占位符 _ 和% _ 代表一个字符 % 代表任意个字符
in 在某个范围中获得值
* 查询商品名称为"左慈"的商品信息 select * from product where pname='左慈';
* 查询价格>60元的所有商品信息 select * from product where price>60;
* 查询商品名称含有"士"字的商品信息 select * from product where pname like '%士%';
* 查询商品id在(3,6,9)范围内的所有商品 select * from product where pid in(3,6,9);
* 查询id为2 或者为6的商品信息 select * from product where pid =2 or pid = 6;
③ 排序
* 查询所有的商品,按照价格进行排序(升序 ,降序)
select * from product order by price asc; 升序
select * from product order by price desc; 降序
* 查询名称有"士"的商品信息并且按照价格降序进行排列
select * from product where pname like '%士%' order by price desc;
④ 聚合函数
常用的聚合函数:sum() avg() max() min() count()计数 聚合函数不统计null值
* 获取所有商品的价格总和 select sum(price) from product;
* 获得所有商品的平均价格 select avg(price) from product;
* 获取所有商品的个数 select count(*) from product;
⑤ 分组操作
* 添加分组id(alter table product add cid varchar(32));)
* 初始化数据
update product set cid ='1';
update product set cid='2' where pid in (5,6,7);
* 根据cid字段分组,分组后统计商品的个数 select cid ,count(*) from product group by cid;
* 根据cid分组,分组统计每组商品的平均价格,并且平局额价格大于20000元
select cid ,avg(price) from product group by cid having avg(price) > 20000;