4.16学习总结

news2024/11/24 7:57:14

MySQL数据库学习(一)

一.MySQL数据库的基本知识

(一).数据库

概念:数据仓库,软件,安装在操作系统之上

作用:存储数据,管理数据

(二).数据库的分类

关系型数据库:SQL(Structured Query Language)

  • MySQL、Oracle、Sql Server、DB2、SQLlite
  • 通过表和表之间,行和列之间的关系进行数据的存储
  • 通过外键关联来建立表与表之间的关系

非关系型数据库:NoSQL(Not Only SQL)

  • Redis、MongoDB
  • 指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定

(三).数据库三层结构

1.所有安装Mysql数据库,就是在主机安装一个数据库管理系统(DBMS),这个管理程序可以管理多个数据库。DBMS(database manage system)

2.一个数据库中可以创建多个表,以保存数据(信息)。

3.数据库管理系统(DBMS)、数据库、表三者之间的关系。

二.SQL语句

(一).SQL语句概述

Structure Query Language(结构化查询语言)简称SQL,它被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。数据库管理系统可以通过SQL管理数据库;定义和操作数据,维护数据的完整性和安全性.    原文链接:https://blog.csdn.net/weixin_45851945/article/details/114287877

(二).SQL语句的分类

1、DDL(Data Definition Language) 数据定义语言,用来操作数据库、表、列等; 常用语句:CREATE、 ALTER、DROP
2、DML(Data Manipulation Language) 数据操作语言,用来操作数据库中表里的数据;常用语句:INSERT、 UPDATE、 DELETE
3、DCL(Data Control Language) 数据控制语言,用来操作访问权限和安全级别; 常用语句:GRANT、DENY
4、DQL(Data Query Language) 数据查询语言,用来查询数据 常用语句:SELECT

(三).SQL语句的优点

1、简单易学,具有很强的操作性
2、绝大多数重要的数据库管理系统均支持SQL
3、高度非过程化;用SQL操作数据库时大部分的工作由DBMS自动完成

 三.数据库操作

1.数据库操作

 表操作

 2.数据库的字段属性

1.UnSigned

  • 无符号的
  • 声明了该列不能为负数

2.ZEROFILL

  • 0填充的
  • 不足位数的用0来填充 , 如int(3),5则为005

3.Auto_InCrement

  • 通常理解为自增,自动在上一条记录的基础上默认+1

  • 通常用来设计唯一的主键,必须是整数类型

  • 可定义起始值和步长

4.NULL 和 NOT NULL

  • 默认为NULL , 即没有插入该列的数值
  • 如果设置为NOT NULL , 则该列必须有值

5.DEFAULT

  • 默认的
  • 用于设置默认值
  • 例如,性别字段,默认为"男" , 否则为 “女” ; 若无指定该列的值 , 则默认值为"男"的值

 3.数据库列类型

1.数值类型

2.字符串类型

 3.时间类型

二.网络编程练习

一.要求:

要求在两个项目中实现一个简单的服务端及客户端要求服务端能够同时连接多个客户端且客户端与服务端之间能够持续多次通信

二.设计思路:

分别为客户端和服务端创建多个线程,客户端主线程用来连接服务端,副线程用来对服务端的信息进行监听,服务端,主线程用来监听客户端,保持客户端连接,副线程用于接受发消息.同时,创建多个客户端时,我们应将多个客户端的socket对象放入集合中.

三.代码实现

服务端:

public class Server {
    public static void main(String[] args) {
        List<Socket> socketList=new ArrayList<>();
        //开启线程接收客户端连接
        new Thread(new AcceptSocket(socketList)).start();
        //向所有用户发送消息
        while(true) {
            Scanner scanner=new Scanner(System.in);
            String sendinfo=scanner.nextLine();
            //遍历集合向每一个客户端发送消息
            socketList.forEach(socket -> {
                try {
                    PrintWriter printWriter = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));
                    printWriter.println(sendinfo);
                    printWriter.flush();
                } catch (SocketException e) {
                    System.out.println(1);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
        }
    }
}

//等待客户端连接,主线程
class AcceptSocket implements Runnable{

    List<Socket> socketlist;

    //构造函数
    public AcceptSocket(List<Socket> socketList){
        this.socketlist=socketList;
    }

    //重写run方法
    @Override
    public void run() {
        ServerSocket serverSocket=null;
        try {
            //创建对象并绑定端口
            serverSocket=new ServerSocket(9000);
            System.out.println("正在监听客户端连接");
            //循环接收客户端的请求
            while(true)
            {
                Socket socket=serverSocket.accept();
                //将接受到后加入到socketList
                socketlist.add(socket);
                //开启处理客户端线程,开启分线程处理客户端消息
                new Thread(new getSocket(socket,socketlist)).start();
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            //释放资源
            if(null!=serverSocket){
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}

//出来客户端的信息,分线程
class getSocket implements Runnable {

    Socket socket=null;
    List<Socket> socketList;

    //构造函数
    public getSocket(Socket socket,List<Socket> socketList){
        this.socket=socket;
        this.socketList=socketList;
    }

    @Override
    public void run() {
        BufferedReader bufferedReader=null;
        try {
            //缓冲流,接收信息
            bufferedReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            System.out.println("已连接,准备读取客户端:"+socket.getLocalAddress().toString()+":"+socket.getPort());
            while(true)
            {
                String clientinfo=bufferedReader.readLine();
                //打印信息
                System.out.println(socket.getLocalAddress().toString().substring(1) + ":" + socket.getPort() + "发送的消息是:" + clientinfo);
            }

        } catch (SocketException e) {
            System.out.println(socket.getLocalAddress().toString().substring(1) + ":" + socket.getPort() + "断开连接");
            socketList.remove(socket);
        } catch (IOException e){
            e.printStackTrace();
        } finally {
            try {
                if (null!=bufferedReader){
                    bufferedReader.close();
                }
                if(null!=socket){
                    socket.close();
                }
            }  catch (IOException e){
                e.printStackTrace();
            }
        }
    }
}

客户端:

//客户端,连接服务器
public class Client {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Socket socket = null;
        PrintWriter printWriter = null;
        try {
            socket = new Socket("localhost", 9000);
            printWriter = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()));

            //开启线程接收服务端的消息
            new Thread(new AcceptServer(socket)).start();
            System.out.println("可以给服务器端发送数据了");
            while (true) {
                // 给服务端发送消息
                String sendInfo = scanner.nextLine();
                printWriter.println(sendInfo);
                printWriter.flush();
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭连接
            try {
                if (null != socket) {
                    socket.close();
                }
                if (null != printWriter) {
                    printWriter.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}

//接收服务器的信息,分线程
class AcceptServer implements Runnable {

    Socket socket;

    public AcceptServer(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        BufferedReader bufferedReader = null;
        try {
            bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            while (true) {
                String serverInfo = bufferedReader.readLine();
                System.out.println("服务器的消息为:" + serverInfo);
            }
        } catch (SocketException e) {
            System.out.println("服务器异常关闭");
            // 退出
            System.exit(0);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭连接
            try {
                if (null != bufferedReader) {
                    bufferedReader.close();
                }
                if (null != socket) {
                    socket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1600859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Rust面试宝典第4题:打家劫舍

题目 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统。如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房屋存放金额的非负整…

简单3步,OpenHarmony上跑起ArkUI分布式小游戏

标准系统新增支持了方舟开发框架&#xff08;ArkUI&#xff09;、分布式组网和 FA 跨设备迁移能力等新特性&#xff0c;因此我们结合了这三种特性使用 ets 开发了一款如下动图所示传炸弹应用。 打开应用在通过邀请用户进行设备认证后&#xff0c;用户须根据提示完成相应操作&am…

回归预测 | Matlab实现GWO-GPR灰狼算法优化高斯过程回归多变量回归预测

回归预测 | Matlab实现GWO-GPR灰狼算法优化高斯过程回归多变量回归预测 目录 回归预测 | Matlab实现GWO-GPR灰狼算法优化高斯过程回归多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现GWO-GPR灰狼算法优化高斯过程回归多变量回归预测 1.Matlab实现…

上海计算机学会 2023年10月月赛 乙组T3 树的连通子图(树、树形dp)

第三题&#xff1a;T3树的连通子图 标签&#xff1a;树、树形 d p dp dp题意&#xff1a;给定一棵 n n n个结点的树&#xff0c; 1 1 1号点为这棵树的根。计算这棵树连通子图的个数&#xff0c;答案对 1 , 000 , 000 , 007 1,000,000,007 1,000,000,007取余数。题解&#xff1…

笔记本电脑上的聊天机器人: 在英特尔 Meteor Lake 上运行 Phi-2

对应于其强大的能力&#xff0c;大语言模型 (LLM) 需要强大的算力支撑&#xff0c;而个人计算机上很难满足这一需求。因此&#xff0c;我们别无选择&#xff0c;只能将它们部署至由本地或云端托管的性能强大的定制 AI 服务器上。 为何需要将 LLM 推理本地化 如果我们可以在典配…

Java之二维数组

使用二维数组&#xff1a; 引用二维数组元素需要指明行下标和列下标。二维数组有两个指标&#xff0c;行数使用“数组名.length",每行的列数使用“数组名[i].length”。遍历是二维数组的基本算法&#xff0c;使用双重循环遍历二维数组。外层循环控制行&#xff0c;内存循环…

Kubernetes对象的定义和操作

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系列、spring教程等&#xff0c;大家有兴趣的可以看一看 &#x1f4d9;Jav…

HTML内联框架

前言&#xff1a; 我们有时候打开网页时会有广告窗的出现&#xff0c;而这些窗口并不是来自于本站的&#xff0c;而是来自于外部网页&#xff0c;只是被引用到了自己网页中而已。这一种技术可以通过内联来实现。 标签介绍&#xff1a; HTML 内联框架元素 (<iframe>) 表示…

DNS服务器配置与管理(3)——综合案例

DNS服务器配置与管理 前言 在之前&#xff0c;曾详细介绍了DNS服务器原理和使用BIND部署DNS服务器&#xff0c;本文主要以一个案例为驱动&#xff0c;在网络中部署主DNS服务器、辅助DNS服务器以及子域委派的配置。 案例需求 某公司申请了域名example.com&#xff0c;公司服…

linux C -- 消息队列

linux C -- 消息队列 前言一、System V(IPC)消息队列接口调用主要涉及到 msgget、msgsnd、msgrcv 和 msgctl 四个接口&#xff1a; 1、创建消息队列 msgget2、发送消息到队列3、从队列接收信息4、控制消息队列 msgctl5、删除消息队列 二、代码编写1、发送部分的代码2、代码完成…

牛客-环形链表的约瑟夫问题

目录 题目 描述 示例1 示例2 图解 代码(解析在注释中) 题目 描述 编号为 1 到 n 的 n 个人围成一圈。从编号为 1 的人开始报数&#xff0c;报到 m 的人离开。 下一个人继续从 1 开始报数。 n-1 轮结束以后&#xff0c;只剩下一个人&#xff0c;问最后留下的这个人编号…

大数据平台搭建2024(一)

一&#xff1a;基础配置 创建虚拟机并查出ip地址进行连接 ip a1.配置node01静态ip地址与主机名 vi /etc/sysconfig/network-scripts/ifcfg-ens33修改或添加如下内容&#xff1a; BOOTPROTO"static" ONBOOTyes #根据虚拟机网卡信息配置 IPADDR192.168.200.141 NET…

SQL-Post注入

Post注入 在登录过程中&#xff0c;输入用户名和密码&#xff0c;用户名和密码以表单的形式提交&#xff0c; 提交到服务器后服务器再进行验证。这就是一次post的过程的。 在输入正确的用户名和密码后显示 尝试会不会回显报错信息&#xff0c;输入admin--,回显报错了。 尝试…

一个文生视频MoneyPrinterTurbo项目解析

最近抖音剪映发布了图文生成视频功能,同时百家号也有这个功能,这个可以看做是一个开源的实现,一起看看它的原理吧~ 一句话提示词 大模型生成文案 百家号生成视频效果 MoneyPrinterTurbo生成视频效果 天空为什么是蓝色的? 天空之所以呈现蓝色,是因为大气中的分子和小粒子会…

Cisco ACI使用Postman配置交换机-未完待续

先看下不使用脚本的情况下是怎么配置交换机端口的&#xff1f; 例&#xff1a; 有10个交换机接口要开trunk&#xff0c;透传50个vlan&#xff0c; 使用GUI的操作方式为 1 进入EPG -->Static port 2 右键&#xff0c;绑定接口 3 选中node -->指定接口—>指定vlan —>…

Python赋能AI数据分析开启人工智能新时代

文章目录 一、Python是办公自动化的重要工具二、Python是提升职场竞争力的利器三、Python是企业数字化的重要平台四、Python是AI发展的重要通道之一《编程菜鸟学Python数据分析》编辑推荐内容简介作者简介目录前言为什么要写这本书读者对象如何阅读本书 随着我国企业数字化和信…

每日一题(PTAL2-006):树的遍历--树的构建,队列

因为要层序遍历&#xff0c;所以我们可以考虑构建一颗二叉树。构建完只有利用队列就可以就行层序遍历。 #include <bits/stdc.h> using namespace std; int p1[35]; int p2[35]; typedef struct Tree {int val;struct Tree* left;struct Tree* right; }TT; typedef TT* …

基于逐笔数据合成高频订单簿:DolphinDB 订单簿引擎

订单簿是交易市场上买卖双方正在报价的不同价格的列表。订单簿快照反应了特定时刻市场上的交易意图&#xff0c;比如交易活跃的证券标的往往有着密集的订单簿。订单簿快照对量化金融的交易策略、风险管理和市场分析等方面都具有重要意义。 通常交易所可以提供实时和历史的行情…

【ROS2笔记六】ROS2中自定义接口

6.ROS2中自定义接口 文章目录 6.ROS2中自定义接口6.1接口常用的CLI6.2标准的接口形式6.3接口的数据类型6.4自定义接口Reference 在ROS2中接口interface是一种定义消息、服务或动作的规范&#xff0c;用于描述数据结构、字段和数据类型。ROS2中的接口可以分为以下的几种消息类型…

鸿蒙南向开发:【编译和烧录】指导

编译 #进入源码目录 #rm -rf ohos_config.json #hb set #. #如下图所示,按↑↓键&#xff0c;选择需要编译的工程名&#xff0c;然后回车 #hb build -f #然后回车&#xff0c;等待屏幕出现&#xff1a;BUILD SUCCESS字样&#xff0c;说明编译成功。如下图 #编译生成的固件在…