2阶段-------------------------------------------------------------------------------------数据库
什么是数据库?
简而言之,就是存储数据,管理数据的仓库。
常见的数据库分为:
关系型数据库, Oracle、MySQL、SQLServer、Access 非关系型数据库, MongoDB、Redis、Solr、ElasticSearch、Hive、HBase
Mysql数据库
1.mysql服务端,它来处理具体数据维护,保存磁盘
2.mysql客户端,CRUD新增,修改,删除,查询
注意:SQL不区分大小写
default character set utf8;---------------设置成utf8格式
增删改查
建库
创建数据库,数据库名称:cgb2108
create database cgb2108 default character set utf8;
删库
删除名称是cgb2108的数据库
drop database cgb2108;
查库
查看所有数据库
show databases;
表的常用操作
:使用库
use cgb2108;
创建表
创建student表,有id,name,tel字段
create table student(
id int primary key auto_increment,
name varchar(100),
tel varchar(50)
);
修改表 ⭕
#添加列 学生表里添加age列
alter table student add column age varchar(10);
删除表
#删除名称是student的表
drop table student;
查看所有表
show tables;
查看表结构/表设计
#查看student表结构
desc student;
表记录的常用操作
插入记录
#向student表中插入2条记录
insert into student values(1,'阿名');
insert into student values(2,'阿明');
查看记录
#查询student表中的所有记录
select * from student;
修改记录
#修改student表中id为1的记录(age修改成2)
update student set age=2 where id=1
删除记录
#删除student中id为2的数据
delete from student where id=2
排序
#将student表记录按照tel排序
select * from student order by tel #正序
select * from student order by tel desc;#排倒序
记录总数
#查询student表中的总记录数
select count(1) from student;
select count(*) from student;
数据类型
命名规则
-
字段名必须以字母开头,尽量不要使用拼音
-
长度不能超过30个字符(不同数据库,不同版本会有不同)
-
不能使用SQL的保留字,如where,order,group
-
只能使用如下字符az、AZ、0~9、$ 等
-
Oracle习惯全大写:USER_NAME,mysql习惯全小写:user_name
-
多个单词用下划线隔开,而非java语言的驼峰规则
字符
-
char长度固定,不足使用空格填充,最多容纳2000个字符,char(11)存储abc,占11位。查询速度极快但浪费空间
-
varchar变长字符串,最多容纳4000个字符,varchar(11)存储abc,只占3位。查询稍慢,但节省空间。Oracle为varchar2
-
大文本: 大量文字(不推荐使用,尽量使用varchar替代)
-
以utf8编码计算的话,一个汉字在u8下占3个字节
-
注:不同数据库版本长度限制可能会有不同
-
数字:
1.tinyint,int整数类型
2.float,double小数类型
3.numeric(5,2) decimal(5,2)----也可以表示小数,表示总共5位,其中可以有两位小数
4.decimal和numeric表示精确的整数数字
日期
-
date包含年月日
-
time时分秒
-
datetime包含年月日和时分秒
-
timestamp时间戳,不是日期,而是从1970年1月1日到指定日期的毫秒数
图片
blob 二进制数据,可以存放图片、声音,容量4g.早期有这样的设计但其缺点非常明显,数据库庞大,备份缓慢,这些内容去备份多份价值不大。同时数据库迁移时过大,迁移时间过久。所以目前主流都不会直接存储这样的数据,而只存储其访问路径,文件则存放在磁盘上。
添加数据
部门表dept
字段名称 | 数据类型 | 是否为空 | 备注 |
---|---|---|---|
deptno | int | 编号,主键 | |
dname | varcahr(20) | yes | 部门名 |
loc | varchar(10) | yes | 部门地点 |
create table dept(
deptno int primary key auto_increment,
dname varchar(20),
loc varchar(10)
);
insert into dept values(null,'cgb','一班');
insert into dept values(null,'jsd','二班');
insert into dept values(null,'ccb','三班');
员工表emp
字段名称 | 数据类型 | 是否为空 | 备注 |
---|---|---|---|
empno | int | 员工编号,PK主键 | |
ename | varchar(10) | Y | 员工名称 |
job | varchar(10) | Y | 职位 |
mgr | int | Y | 上级编号 |
hiredate | datetime | Y | 入职时间 |
sal | double | 月工资 | |
comm | NUMERIC(8,2) | Y | 奖金 |
deptno | int | Y | 所属部门 FK外键 |
create table emp(
empno int primary key auto_increment,
ename varchar(10),
job varchar(10) unique,
mgr int,
hiredate datetime,
sal double not null,
comm NUMERIC(8,2),
deptno int
);
insert into emp values(null,'jack','经理','null','2002-05-01',99888,null,1);
insert into emp values(null,'tony','总监',100,'2011-01-01',10000,2000,2);
insert into emp values(null,'haha','经理',200,'2012-02-02',8000,1000,2);
insert into emp values(null,'lao','员工',300,'2013-03-03',3000,200.12,2);
insert into emp values(null,'liu','员工',300,'2014-04-04',3500,200.58,2);
字段约束
主键约束
#主键约束:如果为一个列添加了主键约束,那么这个列就是主键,主键的特点是唯一且不能为空。通常情况下,每张表都会有主键。 #主键自增 当主键为数值类型时,为了方便维护,可以设置主键自增
create table abc(
id int primary key auto_increment
);
insert into abc values(null);
insert into abc values(null);
insert into abc values(null);
select * from abc;
非空约束
#非空约束:如果为一个列添加了非空约束,那么这个列的值就不能为空,但可以重复
create table user(
id int primary key auto_increment,
password varchar(50) not null
);
show tables;
insert into user values(null,null);#不符合非空约束
insert into user values(null,123;);#OK
唯一约束
#唯一约束:如果为一