数据库(一)数据库优点,常用数据库,创建数据库,设计创建数据表,数据类型,数据表操作,完整性约束(非空,主键,唯一,默认,外键)
数据库:就是存放数据的仓库,是按照数据结构来组织、存储和管理数据的仓库,是对数据持久化的工具
使用数据库的优点
存储大量数据
保持数据信息的完整、一致性
数据的共享和安全
常用数据库
ORACLE
甲骨文公司的产品
第一个支持SQL的数据库,在高端数据应用中分布最广
SQLServer
微软公司的产品
将关系型数据库应用推向普及化,在小型机中很好的适用性
DB2
IBM公司的产品
基于UNIX系统,主要应用在商务大型平台
MySQL
瑞典MySQLAB公司产品,ORACLE旗下产品
主要应用在中小型网站,速度快体积小,成本低,开源
什么是DBMS
(DataBase Management System)数据库管理系统,负责对数据库进行统一的管理和操作,确保数据操作的安全性和完整性。用户通过DBMS访问数据库中的数据
数据库中的信息是如何记录的?
MySQL以库为单位存储数据,具体的数据内容存储在数据表中
什么是DBMS
(DataBase Management System)数据库管理系统,负责对数据库进行统一的管理和操作,确保数据操作的安全性和完整性。用户通过DBMS访问数据库中的数据
数据库中使用SQL语句访问
Java语言智能被JVM识别运行,在数据库中无法识别。开发人员需要和数据库交互就需要使用数据库所能识别的语言
SQL:(Structured Query Language)结构化的查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统
SQL语言包含4个部分
1.DDL (Data Definition Language ) 数据定义语言 如数据表的建立修改删除等
2.DML (Data Manipulation Language) 数据操作语言 如对数据的增删改
3.DQL (Data Query Language ) 数据查询语言 如对数据的查询
4.DCL (Data Control Language) 数据控制语言 如事务的提交回滚,权限控制等
不同的数据库虽然都通用SQL语言,但是还是会存在一定的差异性,主要体现在以下几个方面:
1.SQL中的关键字,如SQLServer中有top关键字,mysql中有limit关键字
2.函数,每个数据库有着独立的函数库,函数可以在SQL中直接调用
3.SQL编程扩展:定义变量、条件结构、循环结构
数据库的高级应用主要体现在SQL编程上:触发器、存储过程、函数、游标
SQL的注意项:
1.SQL语句不区分大小写
2.每行SQL语句使用分号结束(不写分号也可以,但是多条语句同时执行的时候必须要有分号,所以最好平时都写分号)
SQL中的注释:
单行注释使用 --
多行注释使用 /* */
创建数据库:(在Navicat点击新建查询,然后在弹出的界面中进行编写)
CREATE DATABASE 数据库名 [CHARACTER SET 字符集](中括号中的可写可不写,只要安装时指定了UTF-8字符集就可以不写)
创建以后查找创建的文档实在C——Users——Administrator——文档——Navicat——MySQL——Servers——localhost_3306——找到指定的数据名称
-- 创建数据库 create database geekhome;
删除和创建可以在同一个界面,因为可以单独运行一句代码,即使写了删除语句,但是没有运行,也是删除不了的
-- 删除数据库 drop database geekhome;
选择使用的数据库:选择的是哪个库,新建的数据就会保存在哪个库
-- 选择使用的数据库 use geekhome;
创建数据表
-- 创建数据表 create table test_table( test_name varchar(20); )
创建表之前要先进行设计
数据表设计:
良好的数据库设计
节省数据存储空间
保证数据的完整性
方便进行数据库应用程序的开发
糟糕的数据库设计:
数据冗余,空间浪费
数据修改或插入造成异常
数据表设计步骤:
分析需求,实现数据建模
满足数据表的三范式
创建数据表
实施数据表的完整性约束
数据库三范式:完成数据分析建模后,数据表要需要进行三范式设计
第一范式
确保列的原子性,每个数据列都是不可分割的单元
第二范式
每行数据都应根据一个依赖列被唯一区分
第三范式
行中的每列都应直接关联主键,即不能存在其他表主键以外的字段
特殊情况:
编号和字段进行与表格间的关联是,编号占存更少,字段字符串产生的冗余更多
但是如果对一个字段有着非常高度的查询,则可以牺牲内存产生冗余使用字段进行表格间的关联
所有结构相同的数据,都应存储在一个表格中,不同点用一个属性进行区分
创建数据表:
create table 表名(
字段名 数据类型(长度),
字段名 数据类型(长度)
)
char是定长字符 如果声明文本类型为char(10),实际的值为’tom’,在磁盘中分配的字节空间还是要占据10个字节
varchar 是变长字符 如果声明文本类型为varchar(10),实际的值为’tom’,在磁盘中分配的字节空间还是要占据3个字节
数据表操作
删除数据表:
drop table 表名
添加列:
alter table 表名 add 列名 数据类型
修改列类型:表中没有数据的时候才能修改
alter table 表名 modify 列名 新数据类型
修改列名:
alter table 表名 change 原列名 新列名 类型
删除列:
alter table 表名 drop column 列名
查看数据表:
select * from 表名
完整性约束
创建数据表后需要添加表的约束条件,确保表数据的完整性
完整性=数据+可靠+准确
完整性约束
输入的类型是否正确?
年龄必须是数值
输入的格式是否正确
身份证号码为18位
是否在允许的范围内
性别只能为男女
是否存在重复输入
同一个学生档案录入了两次
域完整性:对列提出要求
实体整型:对行提出要求
引用完整性:关联的值不能随便写
实体完整性约束:主键约束和唯一约束
主键约束:
一张表中只能拥有一个主键
主键应具备唯一性和稳定性
主键值不能为空
主键约束的使用
方法一:
create table `user`(
userId int primary key,
)
方法二:
create table `user`(
userId int,
constraint 约束名 primary key(主键列名称)
)
方法三:
alter table 表名 add constraint 约束名 primary key(主键列名称)
删除主键:
alter table 表名 drop primary key
唯一约束:防止重复数据的产生
表中可以拥有多个唯一约束
唯一约束的使用:
alter table 表名 add constraint 约束名 unique(列名称)
域完整性约束:
1.非空约束:数据列是否必填
在列名后面添加 not null
CREATE TABLE `user`( userId int primary key, userName varchar(20) not null )
2.默认约束:数据列是否具备默认值
在列名设置后面添加 default ‘ 默认值内容’
CREATE TABLE `user`( userId int primary key, userName varchar(20) default ‘默认值’ )
3.检查约束(MySQL中无效):数据列是否有效
如果部门表的经理编号引用自员工表的员工编号,需要通过外键约束限制经理编号只能写入员工表的员工编号
在该过程中,部门表引用员工表,部门表称为外表,员工表称为主表
外表中的经理编号又称为外键,外键只能引用主表的主键或者是唯一键
引用完整性约束:
外键约束:
alter table 外表表名[引用表] add constraint 约束名 foreign key(外键列) reference 主表名名[被引用表](主表中的主键)
alter table score add constraint fk_uid foreign key(uid) references user(userId)
删除主键约束
alter table 表名 drop primary key
删除唯一约束
alter table 表名 drop index 约束名
删除外键约束
alter table 表名 drop foreign key 外键名
实例一:
-- 创建数据库 create database geekhome; -- 删除数据库 drop database geekhome; -- 选择使用的数据库 use geekhome; -- 创建数据表 create table users ( userid int, userName varchar(20), birthday datetime, email varchar(50), detail text ); -- 创建表的时候添加主键约束方式一 -- 每张表中只能具备一个主键 create table users ( userid int primary key, userName varchar(20), birthday datetime, email varchar(50), detail text ); -- 创建表的时候添加主键约束方式二 create table users ( userid int, userName varchar(20), birthday datetime, email varchar(50), detail text, constraint pk_userid primary key(userid) ); -- 在创建表之后单独添加主键 alter table//修改表 users add constraint pk_userid primary key(userid); -- 添加唯一约束 alter table users add constraint uq_username unique(username); -- 删除主键 alter table users drop primary key -- 建表时添加非空约束 -- 默认约束 create table users ( userid int, userName varchar(20) not null, -- 非空约束 birthday datetime, email varchar(50) default 'xxx@geekhome.com', -- 默认约束 detail text, constraint pk_userid primary key(userid) ); -- 创建部门表 create table department ( depId int primary key, depName varchar(50) not null, managerId int -- 部门经理的编号来自于users表的编号 ) -- 为部门表中的经理编号添加外键约束 alter table department add constraint fk_managerId foreign key(managerId) references users(userid) -- 删除数据表 drop table users; drop table department; -- 添加新的数据列 alter table users add age int; -- 修改列的数据类型 alter table users modify email tinytext; -- 修改列的名称 alter table users change email address varchar(100); -- 删除列 alter table users drop column detail; -- 查看数据表 select * from users; select * from department;
实例二:
-- 创建数据库 数据库名称不能重复 create database geekhome; -- 使用数据库 use geekhome; -- 删除数据库 drop database geekhome; -- 创建数据表 create table `user`( -- 添加主键 userId int primary key, username varchar(50), birthday date, registDate timestamp, remoke text ) create table `user`( -- 添加主键 userId int, username varchar(50), birthday date, registDate timestamp, remoke text, -- 添加主键 constraint pk_userId primary key(userId) ) create table `user`( -- 添加主键 userId int, username varchar(50), birthday date, registDate timestamp, remoke text ) create table `user`( -- 添加主键 userId int primary key, username varchar(50) not null,-- username非空 email varchar(50) default 'xxx@igeekhome.com', birthday date, registDate timestamp, remoke text ) -- 创建成绩表 create table score( uid int, courseName varchar(20) not null, score DECIMAL(4,1) ) -- 新建数据表后添加主键 alter table user add constraint pk_userid primary key(userId); -- 添加唯一约束,表中可以有多个唯一键 alter table user add constraint uq_username unique(username); -- 添加外键约束,被引用的表称为主表,引用主表的表称为外表; -- 外表中引用主表的列称为外键列,主表中被引用的列必须是主键或者唯一键 alter table score add constraint fk_uid foreign key(uid) references user(userId) -- 删除主键约束 alter table `user` drop primary key; -- 删除唯一约束 alter table user drop index uq_username -- 删除外键 alter table score drop foreign key fk_uid -- 添加表列 alter table user add sex varchar(1) -- 删除列 alter table user drop column sex -- 修改列的数据类型 alter table user modify username varchar(50) -- 修改列的名称 alter table user change username uname varchar(50) -- 删除数据表 drop table user; drop table score; -- 查看数据 select * from user;