数据库
什么是数据库?
数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
-
是一个实体,它是能够合理保管数据的“仓库”,用户在该“仓库”中存放要管理的事务数据,“数据”和“库”两个概念结合成为数据库。
-
是数据管理的新方法和技术,它能更合适的组织数据、更方便的维护数据、更严密的控制数据和更有效的利用数据。
java 和 数据库sql:
java与数据库的初级程序员应该可以做到:
-
服务器端的编程技术
-
数据库端编程技术
-
服务器如何访问数据库
-
客户端的编程技术
-
客户端如何访问服务器
-
怎么利用框架提高开发效率
数据的存储形式
-
文件(存储在硬盘)
-
文件存储的格式
-
对数据处理可以通过java代码实现
-
缺点:读写速度慢,硬盘本身的特点就是读写慢。
-
变量(存储在内存)
-
读写速度快,临时数据的存储
-
数据库(数据库管理系统)
-
数据库管理系统(DBMS-database manage system)是一套软件,是一种存储和管理数据表的软件系统。
-
适用于大数据量,支持多人并发操作。
-
数据库中的数据是永久存储,数据操作效率高。
使用数据库之前
1.安装数据库
数据库安装方法很简单,这里仅做需要手动书写的地方
配置环境变量path,可以使用命令,操作数据库的数据。
命令行连接数据库服务器
安装客户端软件:
Navicat Premium 15: 通过客户端软件,连接到mysql服务器软件 , 然后使用图形化的操作界面,降低sql的难度。
数据库分类
关系型数据库 : MySQL , sql server , oracle , db2 ...
-
数据以二维表的方式存储
-
实体之间的关联关系
-
支持SQL(结构化查询语言)语言 (近期学习的重点)
非关系型数据库: redis (后期要使用) , MongoDB , Hbase .....
-
数据按不同的数据类型存储。
-
不支持SQL
ER模型(E - entity 实体 , R - realation 关系)
ER模型,就是将数据库中的table之间的关系,以图形的方式展示出来。
ER模型,就是创建数据库表的依据。
举行代表实体 , 菱形代表关系 , 椭圆代表实体的属性。
实体之间的关系:
-
1对1 : 一个国家有一个总统
-
1对多:一个班级有多个学生
-
多对多: 课程和学生
mysql的命令行操作
连接到mysql服务器:
mysql -u root - p
使用mysql的命令
-- 是mysql的注释
show databases; -- 显示所有的数据库
use hello; -- 选择要使用的数据库的名字
show tables; -- 显示hello数据库中的所有的表
desc stu; -- 查看stu表结构
-- Field , 字段
-- Type , 字段的类型
-- key , 键
+--------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| name | varchar(255) | YES | | NULL | |
| age | int | YES | | NULL | |
| gender | varchar(10) | YES | | NULL | |
+--------+--------------+------+-----+---------+-------+
insert into stu(name ,age , gender) values('邹麟',18,'女'); -- 插入数据的sql语
句
-- 插入成功之后,数据库的提示信息: Query OK, 1 row affected (0.01 sec)
select * from stu; -- 查询数据
+------+------+--------+
| name | age | gender |
+------+------+--------+
| 洪涵 | 21 | 男 |
| 林涛 | 20 | 男 |
| 刘思 | 20 | 女 |
| 邹麟 | 18 | 女 |
+------+------+--------+
update stu set age = 22 where name='洪涵'; -- 修改数据
-- 修改成功之后的提示信息: Query OK, 1 row affected (0.01 sec)
delete from stu ; -- 删除数据
-- 删除成功之后的提示信息: Query OK, 4 rows affected (0.01 sec)
drop table stu; -- 删除名字叫stu的表
drop database hello; -- 删除名字叫hello的数据库
create database cms; -- 创建名字教cms的数据库
create table test(id int , name varchar(6) , pwd varchar(8)); -- 创建一个
名字叫test的表
exit -- 退出mysql
注: 注释 -- 之后要加空格才能使注释生效
SQL(Struct Query Language) : 结构化查询语言
sql语言中,字符串可以使用单引号或者双引号 , 保证单双引号匹配
注释 : -- 注释内容 ,/* */
sql语言中,关键字不区分大小写 , 字段名不区分大小写 , 数据内容有大小写之分
比如: select 同SELECT , NAME 字段 , 也可以是name , 数据 “ALICE”和‘alice’就有区别
sql的使用:
-
创建数据库: create database 数据库名字;
create database 数据库名字 default character set utf8; -- 指定了数据库的编码
删除数据库 : drop database 数据库名字;
-
创建表:
create table 表名(字段1 字段类型 约束条件 , 字段2 ....)
-
如果字段名,表名和关键字重复了,那么就在字段名或表名上添加引号。
-
尽量避免和关键字重名 。 一般表可以教前缀 : cms_stu --表示学生表, s_name -- 表示学生表的字段名
-
约束条件: not null ,表示字段值不能是null .
-
int类型的数据,可以设置为自动增加 : auto_increment
-
主键约束: primary key,主键的特征就是非空且不重复 , 一般用于实现表中的每行数据不重复。
-
练习: 创建一个名字叫t_test的表,字段名包括 t_id int类型, 主键,并且自动增加,
t_name 字符串类型 ,不为空,最大长度50 ,
t_age int 类型
-
CREATE TABLE `cms`.`t_test` (
`t_id` int NOT NULL AUTO_INCREMENT COMMENT 'id',
`t_name` varchar(50) NOT NULL COMMENT '名字',
`t_age` int NULL COMMENT '年龄',
PRIMARY KEY (`t_id`)
);
3.删除表
drop table 表名 ;
数据类型
类型 | 含义 | 特点 |
---|---|---|
tinyint | 短整型 | 对应java 的 byte , short |
int | 整形 | 对应java 的int |
bigint | 长整型 | 对应java 的long |
float | 单精度浮点数 | 对应java 的float |
double | 双精度浮点型 | 对应java 的double |
decimal(宽度,精度) | 指定总长度,及其小数占的位数 | 如: decimal(10,3) 总长10,小数占3位 |
char(长度) | 定长字符串 | 对应java的String,位数不足时,用空占位 |
varchar(长度) | 可变长字符串 | 对应java 的String,位数不足时不用空占位,字符串实际长度为准。 |
text | 文本 | 单纯的文本 |
date | 日期 | yyyy-MM-dd |
time | 时间 | HH:mm:ss |
datetime | 日期时间 | yyyy-MM-dd HH:mm:ss |
timestamp(14或8) | 毫秒 | 保存事件毫秒数 ,14表示 yyyyMMddHHmmss , 8表示yyyyMMdd |
约束
约束名 | 概念 | 关键字 |
---|---|---|
非空约束 | 是否允许字段为null | null表示可以为空,not null表示不能为空。 |
主键约束 | 主键(primary key ) , 保证每行数据不重复, 并且主键值不能是null.一般会在建表的时候,给表设计要给id字段 | primary key |
唯一约束 | 保证字段值不重复 | unique |
外键约束 | 在有这个主从关系的表中,给有管理关系的字段,设置为外键约束 ,这个字段值,只能参考主表中的某个字段的值。 | foreign key references |
默认值 | 可以设置某个字段的默认值,如果没有给这个字段设置数据值,就采用默认值 | default |
外键约束详解:
建表的规则(范式)
-
字段不可再分 , 比如手机号码和座机号码不应该放在同一个字段中。
-
每个表都有一个主键 , 以保证每条数据是唯一的。
-
每个字段都依赖主键 , 比如员工表,就不应该放部门信息
举例:
注:该可视化工具在表格中填写和勾选了相关数据之后,可以在SQL预览栏里查看SQL的语句书写,