数据库
DataBase,称为i而数据库,简称DB
运行在操作系统上,按照一定的数据结构,保存数据的仓库。是一个电子化的文件库。
数据永久地保存在硬盘中。
数据库管理系统
DataBase Manager System,简称DBMS。例如Mysql、SQLServer、Oracle等。
是一种操作和管理数据库的大型软件,用于建立、使用和维护数据库。
常见的数据管理系统
关系型数据库
关系型数据库是主流的数据库类型
数据通过行row和列column的形式(表格)保存
每行数据称为一条记录
每列数据称为一个字段
字段通常为Java中某个实体类的属性,通过这个类创建的对象,就是一条记录
关系型数据中,数据表之间进行关联,就能快速查询想要的数据。
优点
-
易于维护:数据都是以表的结构存储,格式一致。
-
使用方便:SQL语句可用于不同的关系型数据库。
-
支持复杂查询:可以通过SQL语句在多个表之间查询出复杂数据。
缺点
-
读取性能差,在处理海量数据时,频繁读写效率低。
-
表结构不易改动,灵活度稍欠佳。
-
高并发读写时,硬盘的I/O决定了读写的速度。
非关系型数据库
数据通过对象的形式保存,对象可以是一个键值对、文档、图片等。
非关系型数据库的特点
-
保存数据的格式多样。
-
对于海量数据的的读写效率高。
-
不支持复杂查询
Mysql常用指令
-
show databases; 查看所有数据库
-
use 数据库名; 切换到指定的数据库
-
create database 数据库名;创建指定数据库
-
drop database 数据库名;删除指定数据库
-
show tables; 查看当前数据库中的表
数据库管理系统图形化管理工具
SQL
Structrued Query Language 结构化查询语言
用于操作关系型数据库的一门语言。可用来创建、维护数据库和数据。
--mysql中的注释
操作数据库
-
创建数据库
create database 数据库名称;
-
切换数据库
use 数据库名称;
-
删除数据库
drop database 数据库名称;
操作单个数据表
创建数据表
create table 表名(
字段名1 数据类型 [特征],
字段名2 数据类型 [特征],
.....
字段名n 数据类型 [特征]
)
修改数据表
修改表时,要保证不影响现有数据。
-
对表重命名
alter table 表名 rename to 修改的表名;
-
添加新字段
alter table 表名 add column 字段名1 数据类型 [特征];
-
修改字段名
alter table 表名 change 旧字段名 新字段名 数据类型 [特征];
-
删除字段
alter table 表名 drop 字段名;
-
添加唯一约束
alter table 表名 add unique(字段名);
-
添加主键约束
alter table 表名 add primary key(字段名);
-
添加默认值约束
alter table 表名 alter 字段名 set default '默认值';
-
添加外键约束
alter table 从表表名 add foriegn(从表外键字段 references 主表表面(主表主键字段);
添加约束的操作通常是对已存在的表进行修改和维护时使用。如果是一张新表,最好在创建表的时候就设计好约束。
建表的同时添加约束
create database gamedb;
use gamedb;
CREATE table hero(
id int not null primary key auto_increment COMMENT '任务编号',
name VARCHAR(20) not null UNIQUE,
sex char(1) default '男' COMMENT '性别',
price int not null COMMENT '价格',
make_time date COMMENT '创建时间',
position VARCHAR(20)
)
create table battle(
id int not null primary key auto_increment,
hero_id int not null,
nick_name VARCHAR(20),
way VARCHAR(20) not null,
foreign KEY(hero_id) REFERE
删除数据表
drop table 表名;
如果要删除有关外键关联的表,要先删除从表,在删除主表。
查看数据表
DESCRIBE 表名;
DESC 表名;
操作多个数据表(重点)
连接查询(重点
交叉连接
交叉连接、笛卡尔积,将两张表中的所有数据两两组合得到新数据
select * from 表1,表2
内连接(重点)
在笛卡尔积中得到真实有效的数据
select * from 表1,表2 where 表1.字段=表2.字段
select * from 表1 inner join 表2 on 表1.字段=表2.字段
-
通常是通过主表的主键字段关联从表的外键字段
-
如果两张表中关联的字段名一致,一定要通过"表名。字段名"进行区分,通常还会给表重命名
-
如果使用inner join关联表,带条件是需要;
左连接
-- 保证坐标显示完整的情况下,关联右表中数据,没有关联的用null表示
select * from 表1 left join 表2 on 表1.字段=表2.字段
右连接
-- 保证坐标显示完整的情况下,关联左表中数据,没有关联的用null表示
select * from 表2 right join 表1 on 表1.字段=表2.字段
嵌套查询
将查询到的结果继续使用在另一个查询中
-- 查询价格最低的图书信息
select * from book_info WHERE book_price= (select min(book_price) from book_info)
操作数据
数据添加insert
添加数据时,都是整行添加。不能只给一个字段去添加数据。
给所有字段赋值
-
可以用null、0、default来填充自增值。
-
可以用null来填充可以为空的字段
-
可以用default来填充有默认值的地方
-
添加的数据必须与表中原有的数据的数量与顺序一致。
insert into 表名 values('值1','值2'........)
给指定字段赋值
- 可以忽略自增字段、有默认值字段和允许为空的字段。
insert into 表名(字段1,字段2....) values('值1','值2'...);
批量添加
insert into 表名[(字段1,字段2...)] values
('值1','值2',.....'值n'),
('值1','值2',.....'值n'),
('值1','值2',.....'值n')
数据修改update
修改单个字段的所有值
update 表名 set 字段 = '值';
修改多个字段的所有值
update 表名 set 字段 = '值',字段 = '值'.....;
根据条件修改(where子句)
update 表名 set 字段 = '值',字段 = '值'... where 条件;
-
指定值
使用=指定某个字段的值
update 表名 set 字段 = '值',字段 = '值'... where 字段 = '值