数据库(一)数据库优点,常用数据库,创建数据库,设计创建数据表,数据类型,数据表操作,完整性约束(非空,主键,唯一,默认,外键)

数据库:就是存放数据的仓库,是按照数据结构来组织、存储和管理数据的仓库,是对数据持久化的工具

使用数据库的优点
存储大量数据
保持数据信息的完整、一致性
数据的共享和安全

常用数据库
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;
原文地址:https://www.cnblogs.com/gfl-1112/p/12694581.html