4.16学习总结

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方法@Overridepublic void run() {ServerSocket serverSocket=null;try {//创建对象并绑定端口serverSocket=new ServerSocket(9000);System.out.println("正在监听客户端连接");//循环接收客户端的请求while(true){Socket socket=serverSocket.accept();//将接受到后加入到socketListsocketlist.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;}@Overridepublic 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;}@Overridepublic 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.hqwc.cn/news/624228.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Docker构建CI/CD工具链(七)使用Jmeter进行自动化压测

上一篇文章中&#xff0c;我们详细介绍了构建 Apifox Cli 的 Docker 镜像的步骤&#xff0c;并通过简单的示例演示了如何利用 GitLab 的 CI/CD 功能&#xff0c;将构建好的镜像利用在自动化测试作业中。在今天的文章中&#xff0c;我们将重点讨论如何构建 JMeter 的 Docker 镜像…

cesium 解决带高度的polygon 材质不能透明的问题

问题描述&#xff1a;创建一个带高度的polygon&#xff0c;用一个带透明度的图片做材质&#xff0c;画出来的多边形没有透明效果&#xff0c;图片的透明通道没有用上。 一、创建不带高度polygon 不带高度的polygon&#xff0c;使用带透明度的图片是有效果的&#xff0c;但是不…

VMware 虚拟机中的 Ubuntu 16.04 设置 USB 连接

VMware 虚拟机中的 Ubuntu 16.04 设置 USB 连接 1. VMware USB Arbitration Service2. 可移动设备 USB 口连接主机3. 虚拟机 -> 可移动设备 -> 连接 (断开与主机的连接)4. 状态栏 -> 断开连接 (连接主机)References 1. VMware USB Arbitration Service 计算机 -> …

【K8s】:在 Kubernetes 集群中部署 MySQL8.0 高可用集群(1主2从)

【K8s】&#xff1a;在 Kubernetes 集群中部署 MySQL8.0 高可用集群&#xff08;1主2从&#xff09; 一、准备工作二、搭建nfs服务器2.1 安装 NFS 服务器软件包&#xff08;所有节点执行&#xff09;2.2 设置共享目录2.3 启动 NFS 服务器2.4 设置防火墙规则&#xff08;可选&am…

android不同版本(支持>10)获取当前连接的wifi名称

1、AndroidManifest.xml 配置权限 <uses-permission android:name"android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name"android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name&q…

代码随想录-算法训练营day14【二叉树01:理论基础、递归遍历、迭代遍历、统一迭代】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第六章 二叉树part01今日内容&#xff1a; ● 理论基础 ● 递归遍历 ● 迭代遍历 ● 统一迭代详细布置 理论基础 需要了解 二叉树的种类&#xff0c;存储方式&#xff0c;遍历方式 以及二叉树的定义 文章讲解&#x…

java(网络编程)

什么是网络编程? 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行的数据传输。 应用场景&#xff1a;即时通信、网游对战、金融证券、国际贸易、邮件、等等 不管是什么场景&#xff0c;都是计算机跟计算机之间通过网络进行数据传输 Java中可以使用ja…

uniapp h5项目上传图片到oss(纯前端)

需求&#xff1a;后端给前端一个oss上传地址&#xff0c;前端需要根据getCkOSSToken获取stsToken,使用client.put方法将图片上传成功&#xff0c;并且使用canvas压缩图片 效果图 废话不多说&#xff0c;直接上代码&#xff0c;代码可直接复制&#xff0c;运行 准备工作 cnpm…

【C++11】智能指针

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;理解在C11中智能指针&#xff0c;自己能模拟实现 4 种智能指针 > 毒鸡汤&#xff1a;白日莫闲过&#xff0c;青春不再来。 > 专栏选自&#xff1…

箭头函数有哪些不适用场景

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

leaflet知识点:地图窗格panes的应用

一&#xff0c;需求背景 地图中存在无人机&#xff0c;停机坪&#xff0c;航线三个图层&#xff0c;需要实现无人机图层显示在最上面&#xff0c;停机坪图层显示在最下面&#xff0c;航线图层显示在中间。 二&#xff0c;遇到问题 由下图可知航线图层所在overlayPane窗格的z-…

【教程】ubuntu20.04 下配置 Charm-crypto 0.5 实验环境

目录 前言先决条件基本依赖安装准备好 gcc&#xff0c;make 和 perl准备好 m4&#xff0c;flex&#xff0c;bison 和 libssl-dev安装 Python3.x&#xff0c;pip3 和 pyparsing 安装 OpenSSL安装 GMP5.x安装 PBC安装 Charm-crypto5.0安装开发环境检验 Charm-crypto5.0 安装成功参…