1.对数据库的操作
2.对表的操作
3.对数据的操作
4.备份和恢复数据库
5.多表操作
注:本文用的数据库是mysql
1.对数据库的操作
(1).创建数据库
create database db1 character set utf8 collate utf8_bin;
注:collate是编码校对规则
(2).删除数据库
drop database db1;
(3).修改数据库
alter database db1 character set gbk;
(4)查找数据库
^1.查看所有数据库
show databases;
^2.查看指定数据库的建表语句
show create database db1;
(5).使用数据库
use db1;
2.对表的操作
(1).创建表(字段名,类型,约束,<主键的话还有一个增长方式>)
create table tb1(
id int primary key auto_increment,
name varchar(20) unique,
birthday date,
salary double,
job varchar(40),
gender bit not null
);
(2).删除表
drop table tb1;
(3).修改表
^1.给表改名
rename table tb1 to tb2;
^2.给表改编码
alter table tb1 character set gbk;
^3.新增一个字段
alter table tb1 add name2 varchar(20);
^4.删除一个字段
alter table tb1 drop column name2;
^5.修改字段名
alter table tb1 change name name3 varchar(10);
^6.修改字段类型
alter table tb1 modify name3 varchar(20);
(4)查表
^1.显示所有表
show tables;
^2.显示指定表创建语句
show create table tb1;
^3.显示表结构
desc db1;
3.对数据的操作
(1).编码,解码,转码
编码:将字符变成二进制
byte[] bs = s.getBytes(utf-8);
解码:将二进制解析成字符
String s = new String(111,gbk);
转码:将utf8编码的二进制转化成gbk编码的二进制
注:若想改变数据库编码方式:my.ini==>default-character-set=gbk/utf8
(2).插入(insert)
insert into tb1 (id,name,job,birthday) values (1,'鹏哥哥','程序员','1995-11-20');
^1.字符和日期需要加单引号
^2.第一个括号可以不写,但是第二个括号的值必须按照表里字段的顺序一个个加(建议写)
(3).删除(delete)
^1.删除一条记录
delete from tb1 where name='鹏哥哥';
^2.仅删除整个表数据
delete from tb1;
^3.不但删除表数据,还删除表本身
truncate table tb1;
(4).改(update)
update tb1 set job='未来的架构师' where name='鹏哥哥';
(5).查(select)
^1.基本查询
select distinct chinese 语文 from exam;
&1.关键字distinct可以去除掉字段重复的数据
&2.chinese 语文相当于给chinese字段重命名为语文
^2.where判断
select chinese from exam where chinese >60;
&1.where中可以用'='来筛选
&2.where中可以用'>'或'<'来筛选
&3.where中可以用between 80 and 100来筛选
&4.where中可以用in(90,100)来筛选90分和100分的成绩
&5.where中可以用like '张%'筛选张开头的人名
&6.where中可以用like '张_'筛选张开头且名字只有2个字的人名
^3.order by 排序
ASC:升序(默认)
DESC:降序
^4.聚合函数
&1.求数量:count()
select count(*) from exam;
&2.求和:sum()
select sum(chinese) from exam;
&3.最值:min()/max()
select min(chinese) from exam;
&4.平均值:avg()
select avg(chinese) from exam;
&5.group by(分组查询):查询到指定字段重复的结果,会将重复的去掉或是根据聚合函数操作这些字段
select product 商品名,sum(price) 商品总价 from orders group by product having sum(price)>100
%1.where和having的区别
where不可以过滤聚合函数,having可以
where在group by之前执行,having在其之后执行
%2.写sql的顺序
select from where groupby having orderby
%3.sql执行顺序
from where select groupby having orderby
4.备份和恢复数据库
备份:cmd下:mysqldump -u 用户名 -p 密码 dbName>路径
恢复:
(1).cmd下:mysql -u 用户名 -p 密码 dbName<路径
(2).mysql命令下:source 路径
注:恢复只能恢复数据,不能回复数据库,所以数据库需要先自己创建一下
5.多表操作
(1).外键的意义
数据库除了保持数据还要保持数据的关系,多个表直接的关系就靠外键维护
(2).关于关系
一对一:外键随便在哪个表里
一对多:外键在多的那一方
多对多:专门用一个表记录这些表的外键
(3)
create table emp(
id int primary key auto_increment,
name varchar(20),
foreign key (foreignId) references dept(id)
);
create table dept(
id int primary key auto_increment,
name varchar(10)
);
(4)多表查询
^1.笛卡尔积查询(表1有M条数据,表2有N条数据,可以查到M*N条,错误多,不推荐)
^2.内连接(可以认为是两个表的交集)
select * from emp inner join dept on emp.foreignId = dept.id;
^3.左外连接(可以认为交集再加左表特有的,排除右表私有的)
select * from emp left join dept on emp.foreignId = dept.id;
^4.右外连接(与左外连接正好相反)
select * from emp right join dept on emp.foreignId = dept.id;
^5.全外连接(交集+左边独有+右边独有)
select * from emp full join dept on emp.foreignId = dept.id;
注:mysql没有全外连接,用union关键字代替
select * from emp left join dept on emp.foreignId = dept.id;
union
select * from emp right join dept on emp.foreignId = dept.id;