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

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

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

    常用数据库
    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;
  • 相关阅读:
    UML基本关系
    C++关键字简述
    Install opencv on Centos
    C++编程规范
    YCbCr to RGB and RGB toYCbCr
    Linux目录结构(二)
    Dubbo工作流程
    spring bean的作用域和生命周期
    spring aop原理和实现
    静态代理、jdk动态代理、cglib动态代理
  • 原文地址:https://www.cnblogs.com/gfl-1112/p/12694581.html
Copyright © 2011-2022 走看看