关系型数据库:描述实体与实体之间的关系。
E-R关系图:Entity Relationship
JDBC—Java DataBase Connectivity
Dao----Data Access Object 数据访问对象
NOSQL–非关系型数据库(Mongodb/redis)
SQL—Structured Query Language 结构化查询语言
DDL—数据定义语言
-定义数据库,数据表的结构:create(创建) drop(删除) alter(修改)
DML—数据操作语言
-操作数据库:insert(添加) delect(删除) update(修改)
DCL—数据控制语言
-定义访问权限,安全设置
DQL—数据查询语言
-select(查询)
注:char——固定长度
varchar——可变长度
JDBC建立连接步骤:
1,注册驱动:
Class.forName(com.mysql.jdbc.Driver);
2,使用驱动管理器连接数据库:
Connection conn=DriverManager.getConnection(url,name,password);
3,创建声明,并使用sql语句进行操作
String sql="";
PrepareStatement ps=conn.prepareStatement(sql);
Statement和PrepareStatement的区别:
Statement安全问题:
执行顺序:先拼接SQL语句,再一起执行
PrepareStatement(预处理)——预先对SQL语句进行拼写检查校验,sql中变量可以使用?占位符,进行占位,然后再进行变量的添加。
Connection conn=DriverManager.getConnection(url,name,password);
PrepareStatement st=conn.prepareStatement(sql);
SQL相关操作语句:
1,insert(增加,插入)
String sql="INSERT INTO t_stu VALUES(NULL,'QIANQIAN',27)";
int result=st.executeUpdate(sql);
2,delete(删除)
String sql="DELETE FROM t_stu WHERE id=6";
int result=st.executeUpdate(sql);
注:delete——一条一条的从表中删除数据
truncate——先删除表再重建表
3,query(查询)
String sql="SELECT*FROM t_stu WHERE USERNAME='"+NAME+"'AND PASSWORD='"+PASSWORD+"'";
ResultSet rs=st.executeQuert(sql);
模糊查询:“like”
String sql=“select * from t_stu where name like '%娃哈哈%'”
排序查询:“order by 对象 asc/desc” asc:升序 desc:降序
String sql=“select * from t_stu order by id asc”
4,update(更新,更改)
String sql="UPDATE t_stu SET age=28 WHERE id=5";
int result=st.executeUpdate(sql);
注:若列的参数是字符串或者日期,需要使用单引号
5,聚合函数
求和:“select sum(price) from product”
求平均数:“select avg(price) from product”
求个数(计数):“select count(*) from product”
分组:group by
"select cno from product group by cno"
"select cno from product group by cno having avg(price)>60"
**特别注意:
sql语句
编写顺序: select...from...where...group by...having...order by
执行顺序: from...where...group by...having... select...order by
注意:where之后不能接聚合函数
having之后可以接聚合函数,出现在分组之后**
数据库建库原则:一个项目/应用建立一个数据库
多表之间的建表原则:
1,一对多:在多的一方表添加一个外键,指向一的一方表
例:分类列表和商品列表
2,多对多:建立一张中间表,将多对多的关系,拆分成一对多的关系,中间表至少有两个外键,两个外键分别指向原来的表
例:学生和课程,课程和老师
3,一对一:一张表有唯一的一个外键指向另一张表,两张表可以合并成一张表
例:国家和国旗
表与表关系
外键约束——foreign key
product和category两个表添加外键约束:
alter table product add foreign key(cno) references category(cid);
注意:主键约束(primary key)与唯一约束(unique)的区别:
主键约束:主键约束用于唯一地标识表中的每一条记录
主键列上的内容不能重复,不能为null
主键不能更新
主键可以作为外键,外键指向另一张表的主键
主键一张表只能有一个,但是可以定义一列或者多列为主键
唯一约束:唯一约束用于限制不受主键约束的列上的数据的唯一性,可以有多个唯一约束
唯一约束可以更新
列里面的内容,必须是唯一的,不能出现重复,但是可以为null
唯一约束不可以作为其它表的外键
交叉连接查询——selectfrom product,category;
查询结果(笛卡尔积)——两张表的乘积
selectfrom product,category where cno=cid;对查询结果进行过滤,得到有用信息
内连接查询:
隐式内连接:select*from product as p,category as c where p.cno=c.cid;
显式内连接:select*from product p inner join category c on p.cno=c.cid;
区别:隐式内连接:在查询出两个表后,再以where条件去过滤结果
显式内连接:呆着条件去查询结果,效率更高
外连接查询:
左外连接:select*from product p left outer join category c on p.cno=c.cid;
右外连接:select*from product p right outer join category c on p.cno=c.cid;
分页查询——select*from product limit 0,10:
表示:索引从0开始,每页显式10条数据.
子查询——sql语句的嵌套(sql语句中嵌套sql语句)
select*from product where pno=(select cno from category where cname=“手机”);