• Javaweb入门 数据库第一天


    数据库概述

      本菜鸟使用的数据库软件为Mariadb,以下内容都是以Mariadb数据库软件来写的学习总结。

    数据库

      所谓的数据库就是用于存储、管理数据的仓库,数据库根据底层存储数据结构的不同可以分为很多类,但现在流行的是关系型数据库和非关系型数据库。

    关系型数据库

      关系型数据库底层是以二维表的形式保存数据的数据库。(模型就是我们常使用的表格)

      常用的关系型数据库有SQL server 、Oracle、Mysql、Mariadb 以及DB2。

    非关系型数据库

      非关系型数据库底层是key-value结构。

    数据库名词解释

    数据库服务器

      安装的mysql服务器软件,将数据库服务器软件安装在电脑上才可以对外提供服务。

    数据库

      一个数据库服务器可以有很多个数据库,但是一般情况下一个网站的所有数据会存放在一个数据库当中。

    表(数据表)

      一个数据库中可以有多个表,一般情况下,一类型的数据会存放在一张表中,比如跟用户相关的数据可以存放在用户表中。

      在Java中一个类封装一类型信息,因此就像Java中一个类对应一张表。

    表记录

      一张表中可以有多个记录(可以将一行称为一条记录信息)。

      在Java中一个类可以创建多个实例,就像Java中的一个实例对应一条表记录。

    数据库中的数据类型

    数值类型

      数据库中的数值类型跟Java中整型数据类型一一对应,而这提到的数据库常用数值类型有:int和double,名字不一定一样,但数据库中的int 和double类型跟Java中一样。

      int占用4个字节

      double 占用8个字节

    字符串类型

      mysql中包含的字符串类型并不是Java中的String,而是char和varchar两种。

    char和varchar的区别

      char(n) 为定义字符串长度,数据的长度可以小于等于n个字符,但是当数据的字符数小于定义的字符串长度时,char会在数据后面补齐数据长度,也就是说不管你存储的数据是否达到了定义长度,最后的字符串长度始终为定义的长度。

      varchar(n)也为定义字符串长度,数据长度同样可以小于等于n个字符,与char不同的是当你存储的数据不足定义的长度时,varchar会把多出来的空间让出来,数据字符个数是多少,字符串长度就是多少。

      说了区别再说一下优缺点:char存储数据的速度会比varchar快,但是可能会有空间浪费;varchar存储数据比char慢,但是不会有空间浪费。

    大文本类型

      Text 0-65535个字节长度

      bigtext 4GB字节长度

    日期类型

    date

      date类型格式为:年月日

    time

      time类型格式为:时分秒

    datetime

      datetime类型格式为:年月日 时分秒

    timestamp

      时间戳(存的是1970-1-1到指定日期的毫秒值,但是看着还是日期时间格式

    timestamp类型的类可以设置自动更新为当前时间,而datetime不行。

    Mariadb内的数据库里表的增删查改操作语法

    在操作语句中只有少部分语句可以结尾不加分号,为了便捷操作,将所有语句结束都加上分号

    通过cmd连接mysql

      在cmd命令中输入:mysql -uroot -proot(根据安装时的设置来连接)

    查看mysql服务器中的数据库

      show databases;

    进去某一数据库(进入数据库后才能操作库中的表和表记录)

      use 数据库名;

      查看进入的数据库名:select database();

    查看当前数据库中的所有表

      show tables;

    删除某一数据库

      drop database 库名;

      判断是否存在这个库,若不存在什么都不做
      drop database if exists 库名;

    创建数据库,指定编码为utf8

      create database 库名 charset utf8;

    查看建库时的语句(并验证数据库使用的编码)

      show create database 库名;

    删除数据库中的表

      drop table 表名;

    数据库中创建表

      create table 表名(

        列名 数据类型,

        列名 数据类型,

        ......

      );

    查看表结构

      desc 表名;

      查询建表语句
       show create table 表名;

    在表中插入数据

      insert into 表名(列1,列2,列3...) values(值1,值2,值3...);列跟值要一一对应

    查询表中所有信息

      select * from 表名;

      查询指定列

      select 列名,列名 from 表名;

    修改表中的数据

      update 表名 set 列=值;

    删除表中所有表记录

      delete from 表名;

      将表摧毁再重新创建
      truncate table stu;

    有一张表,表中的id列为整值类型,email列,gender列

    思考1如果id是编号,编号应该是唯一的且不能为空,如何保证这一点?

    1.主键约束

    如果为一个列添加了主键约束,该列就是这张表的主键,主键要求唯一且不能为空。添加主键约束的语法是:

    create table stu(

        id int primary key,

        ...

    );

    2.唯一约束

    如果为一个列添加了唯一约束,该列的值就不能重复(但是可以为null), 添加唯一约束的语法是:

    create table user(

        email varchar(50) unique,

        ...

    );

    3.非空约束

    如果为一个列添加了非空约束,该列的值就不能为空(但是可以重复), 添加非空约束的语法是:

    create table stu(

        gender varchar(2) not null,

        ...

    );

    思考2在插入数据时,如何保证插入的id不会因为重复而报错?

    如果id(主键)是数值类型, 可以设置主键自增机制, 让数据库帮我们维护id的值, 即我们在插入记录时, 可以不用给id赋值, 只需要给一个null, 数据库会通过自身保存的变量给id赋值!

    create table stu(

        id int primary key auto_increment,

        ...

    );

    思考3如果id主键设置了自增后,在插入数据时,是否可以设置id的值?

    即使id设置了自增, 也可以在插入数据时为id赋值。

    如果赋的id的值比自增变量的值要大,结果是将赋的id值加1后赋值给自增变量

  • 相关阅读:
    Django简介和安装
    CVE-2011-0104:Microsoft Office Excel 中的栈溢出漏洞调试分析
    Struts2漏洞
    JSONP跨域资源共享的安全问题
    如何以最简单的方式安装 KALI 渗透测试框架系统
    CVE-2010-3333:Microsoft RTF 栈溢出漏洞调试分析
    CVE-2010-2883:基于样本分析 PDF SING表字符溢出漏洞
    针对缓冲区保护技术(ASLR)的一次初探
    利用 ROP 技术绕过 DEP 保护的一次简单尝试
    缓冲区溢出之栈溢出利用(手动编写无 payload 的 Exploit)
  • 原文地址:https://www.cnblogs.com/kjs-1998/p/11246960.html
Copyright © 2020-2023  润新知