第一章 数据库

1.练习

自己实现单向链表

1.1 定义单向链表

public class MySinglyLinkedList<E> {
    /**
     * 定义单向链表中的节点对象
     */
    class Node<E> {
        private E item;
        private Node next;
        Node(E item,Node next){
            this.item = item;
            this.next = next;
        }
    }
    /**
     * 存放链表中的头节点
     */
    private Node head;
    /**
     * 记录元素个数
     */
    private int size;

}

1.2 向链表中添加元素

    public void add(E element) {
        Node<E> node = new Node<>(element,null);
        //找尾节点
        Node tail = getTail();
        //
        if(tail == null){
            this.head = node;
        }else {
            tail.next = node;
        }
        //记录元素个数
        size++;
    }

1.3 根据索引删除元素

    public E remove(int index) {
        //校验Index的合法性
        this.checkIndex(index);
        //根据位置找到该节点对象
        Node<E> node = this.getNode(index);
        //获取该节点对象中的元素
        E item = node.item;
        //将该节点对象从单向链表中移除
            //判断当前删除的节点是否为头节点
        if(this.head == node){
            this.head = node.next;
        }else {
            Node<E> temp = this.head;
            for (int i = 0; i < index-1; i++) {
                temp = temp.next;
            }
            temp.next = node.next;
        }
        node.next = null;
        //
        this.size--;
        return item;
    }

1.4 根据元素位置获取元素

    public E remove(int index) {
        //校验Index的合法性
        this.checkIndex(index);
        //根据位置找到该节点对象
        Node<E> node = this.getNode(index);
        //获取该节点对象中的元素
        E item = node.item;
        //将该节点对象从单向链表中移除
            //判断当前删除的节点是否为头节点
        if(this.head == node){
            this.head = node.next;
        }else {
            Node<E> temp = this.head;
            for (int i = 0; i < index-1; i++) {
                temp = temp.next;
            }
            temp.next = node.next;
        }
        node.next = null;
        //
        this.size--;
        return item;
    }

1.5 获取元素个数

    public int size() {
        return this.size;
    }

1.6 找尾节点

    private Node getTail(){
        //头节点是否存在
        if(this.head == null){
            return null;
        }
        //查找尾节点
        Node node = this.head;
        while(true){
            if(node.next==null){
                break;
            }
            //移动指针,指向下一个节点
            node = node.next;
        }
        return node;
    }

1.7 校验Index

    private void checkIndex(int index){
        if(!(index>=0 && index < this.size)){
            throw new IndexOutOfBoundsException("Index:"+index+"Size:"+this.size);
        }
    }

2. 数据库简介

2.1 数据库概述

 2.2 数据库分类

        早期比较流行的数据可模型有三种,分别为层次式数据库,网络式数据库、关系型数据库、非关系型数据库(前两者基本已经消失)。

        现在最常用的数据库模型主要是两种:关系型数据库非关系型数据库

 关系模型:

用二维表的形式表示实体和实体间的联系的模型,是现如今数据库领域中应用最广泛的数据模型,简单、清晰。

类:

由属性和方法,对应于一个具体的数据表。

对象:

根据类创建的一个实体,对应数据表中的一条记录。 

2.3 数据库与程序的关系

2.3.1 数据库基本概念

实体与属性(程序概念) 

实体是客观存在并可以相互区别的事物;

属性是事物本身固有的性质。

记录和字段(数据库中的概念) 

 数据表:二维表格的形式存储数据;

:记录,一条数据,对应实体对象;

:字段,属性

关系型数据库:关系型数据库以行和列的形式存储数据,列是固定的,行是可以动态添加,这种形式称之为关系;这一系列的行和列被称为表,一组表组成了数据库;数据库就是数据表、数据库关系和数据库关系对象的集合。        

        常见的关系型数据库:MySQL,Oracle,SqlServer(服务器),sql语言(structed query language 结构化查询语言)

非关系型数据库:非关系型数据库也被称为NoSQL数据库,大Map key:value 索引。NoSQL的本意是“Not Only SQL”,指的是非关系型数据库,而不是“No SQL”的意思(没有SQL语句?),因此,NoSQL的产生并不是要彻底否定关系型数据库,而是作为传统关系型数据库的一个有效补充;NoSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。常见非关系型数据库:Redis MongoDB hbase   redis 缓存

2.3.1 数据库术语

数据库管理系统:DBMS:DataBase Management System(数据库+管理数据库的软件):MySQL,Oracle,SqlServe

数据库系统:DBS;基于数据库进行读写的软件系统

数据库管理员:DBA:保证数据库系统的正常运行,安全,备份,恢复,日常问题的解决;数据库运维人员:测试,产品。

3. MySql使用

3.1 MySql简介

3.2 MySql优点

开源:MySQL源代码免费下载;

简单:体积小,便于安装;

性能优越:性能足够与商业数据库媲美。

3.3 MySql的访问

(MySql 8.0)

打开命令框(以管理员身份打开,不然会报错)

3.3.1 mysql服务 

①启动mysql:

        输入:net start mysql服务名(安装的时候没有修改就是默认的) 

②停止mysql:

        输入:net stop mysql服务名

 3.3.2 在cmd命令行中连接mysql服务器

cmd命令框中输入:

mysql -hlocalhost -u用户名 -p密码

如:

mysql -uroot -p****** 

3.3.3 基于客户端工具连接MySql 

Navicat 连接:

 3.3 创建用户和授权

3.3.1 创建用户

create user '用户名'@'主机地址' identified by '密码'
create user 'myuser'@'localhost' identified by '123456'

 3.3.2 授权

grant 权限种类 on 数据库名.表名 to '用户名'@'主机地址' with grant option;

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;

flush privileges;//修改后执行此句命令,刷新权限。

说明: 

GRANT:赋权命令

ALL PRIVILEGES:当前用户的所有权限

ON:介词

 . :当前用户对所有数据库和表的相应操作权限

TO:介词

‘root’@’%’:权限赋给root用户,所有ip都能连接

IDENTIFIED BY ‘123456’:连接时输入密码,密码为123456

WITH GRANT OPTION:允许级联赋权

 3.4 数据库的操作

常用操作:

show databases;显示当前连接下的所有数据库
use 数据库名; 使用数据库
show tables; 显示该数据库下的所有表
desc 表名; 显示表结构

#查看表结构
desc goods

#查询表信息
select * feom book;

#查看建表代码
show create TABLE goods

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值