数据库
数据库是储存数据的仓库,带有访问权限限制不同的人员有不同的操作
E-R图也称实体-联系图(Entity Relationship
Diagram),方框-实体,椭圆-属性,菱形-关系
登陆数据库:
mysql -uroot -proot;
SQL分类:
DDL:数据库定义语言,与数据库/表结构:create,drop,alter
DML:数据库操作语言,操作表数据:insert update delete
DCL:数据控制语言:设置用户的访问权限 安全
DQL:数据查询语言:select from where
数据库操作:
创建数据库
create database 数据库名 character set 字符集 collate 校对规则;
查看所有数据库:
show database;
查看数据库定义:
show create database 数据库名;
查看当前正在使用的数据库:
select database();
修改数据库:alter database character set 字符集
删除数据库:drop database;
选中数据库:use database;
列的类型:char varchar int
表结构的操作:
创建表:create table 表名(字段名 类型 约束,字段名 类型 约束);
主键约束:primary key
唯一约束:unique
非空约束:not null
自动增长:auto_increment
修改表:
添加列(add):
alter table student(表名) add score(列名) int(类型) not null(约束);
修改列(modify):
alter table student modify sex varchar(2);
修改列名(change):
alter table student change sex(旧列名) gender(新列名) varchar(2);
删除列(drop):
alter table student drop score;
修改表名(rename):
rename table student to teacher;
修改表的字符集
alter table teacher character set gbk;
删除表:
drop table teacher;
查看表:
show tables;
show create table 表名; – 查看表的定义结构/创建语句
desc 表名; – 查看表的结构
数据操作:增删改查
1.插入记录
insert into 表名(列名1,列名2) values(值1,值2);
insert into 表名 values(值1,值2); –
如果插入的是全列的数据,列名可以省略批量插入:
insert into 表名(列名1,列名2) values(值1,值2),(值1,值2),(值1,值2);2.删除记录
delete from 表名 [where 条件]
– 如果没有指定条件 会将表中数据一条一条全部删除掉问题:delete和truncate删除数据有什么差别?
delete:DML,一条一条一条删除表中的数据;
truncate:DDL,先删除表再重建表.
关于哪条执行效率高:具体要看表中的数据量
如果数据比较少,delete比较高效
如果数据比较多,truncate比较高效3.更新记录
update 表名 set 列名=列值,列名2=列值2 [where 条件];
– 如果没加条件会把表中所有的数据修改4.查看记录
select * from 表名;
select [distinct] [*] [列名,列名2] from 表名 [where
条件];
distinct:去除重复的条件运算查询:
select * ,price*1.5 as 折上价 from product;条件查询[where]
select * from product where price > 60;关系运算符: > >= < <= = != <>
!= 不等于 标准sql语法
<> 不等于 非标准sql语法
between…and
判断某一列是否为空:is null,is not null逻辑运算:and or not
select * from product where price > 60 and price < 100;模糊查询 like
_ 代表一个字符
%代表多个字符
select * from product where pname like’%饼%’;in 在某个范围中
select * from product where cno in (1,3,5);排序查询 order by
asc:ascend 升序
desc:descend 降序
select * from product order by price desc;聚合函数
注意:where条件后面不能接聚合函数
max()最大值
min()最小值
avg()平均值
sum()求和
count()统计数量
select sum(price) from product;
– 子查询
select * from product where price > (select avg(price) from
product);分组 group by
select cno,count(*) from product group by cno;
select cno,avg(price) from product group by cno having
avg(price) > 60;
– having关键字可以接聚合函数,出现在分组之后
– where 关键字不可以接聚合函数,出现在分组之前
编写顺序:
select…from…where…group by…having…order by
执行顺序:
from…where…group by…having…select…order by
多表操作
外键约束:foreign key
alter table product add foreign key(cno) references category(cid);建数据库原则:
通常情况下一个项目建立一个数据库多表之间的建表原则:
- 一对多:在多的一方添加外键指向一方的主键
- 多对多:建立一张中间表,将多对多的的关系拆分成一对多的关系,中间表至少有两个外键,分别指向原来的两张表
JDBC对象:
DriverManager 创建连接通道
Connection 通道
Statement 发送并执行SQL
缺点:1.不安全,能SQL注入
2.效率低
PreparedStatement: