数据库学习01 Mysql数据库的基本操作

数据库的基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
输入 mysql -uroot -p -P3306 -h127.0.0.1

退出的三种方法

mysql > exit;
mysql > quit;
mysql > \q;
增:create database db1;
删:drop database db1;
改:alter database db1 charset utf8
查:show databases;#查看所有的数据库
show create database db1;查看指定的数据库
show status; -- 显示一些系统特定资源的信息,例如,正在运行的线程数量。
desc tabl_name; 显示表结构,字段类型,主键,是否为空等属性,但不显示外键。
show databases 查看这个mysql里面有多少个库
show tables 查看当前库里面所有的表
mysql> select password from user where user='root';
查看当前数据库 里面的表user 用户为root的密码


数据库学习02 Mysql数据库数据表的操作

1、查看表结构

1
2
3
desc table

DESCRIBE 表名;

2、查看表的内容

1
select * from table_name

3、建立表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE TABLE 表名 (
属性名 数据类型 [完整约束条件],
属性名 数据类型 [完整约束条件],
...
...
属性名 数据类型 [完整约束条件]
);
字段名就是属性名
完整的建立表的语句
create table users(
id int(7) AUTO_INCREMENT,
username varchar(100) not null,
password varchar(100) not null,
PRIMARY KEY(id)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;
一般都加上数据库引擎:ENGINE=InnoDB DEFAULT CHARSET=utf8;
InnoDB myisam 在做大数据查询的时候使用

4、约束条件

    PRIMARY KEY 标识该属性为该表的主键,可以唯一的标识对应的元组

    FOREIGN KEY 标识该属性为该表的外键,是与之联系某表的主键

    NOT NULL    标识该属性不能为空

    UNIQUE 标识该属性的值是唯一的

    AUTO_INCREMENT    标识该属性的值是自动增加,这是MySQL的SQL语句的特色

    DEFAULT     为该属性设置默认值

5、修改表的操作

1
修改表格式:ALTER TABLE 旧表名 RENAME 新表名;
1
2
修改字段的数据类型:
ALTER TABLE 表名 MODIFY 属性名 数据类型;
1
2
3
4
5
6
7
8
修改字段名:
ALTER TABLE 表名 CHANGE 旧属性名 新属性名 新数据类型;
增加字段名
ALTER TABLE 表名 ADD 属性名1 数据类型 [完整性约束条件] [FIRST | AFTER 属性名2];
删除字段
ALTER TABLE 表名 DROP 属性名;
更改表的存储引擎
格式:ALTER TABLE 表名 ENGINE = 存储引擎名;

数据库学习03 Mysql数据库数据的增删改查

数据的增删改查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
语法:INSERT INTO 表名 VALUES(值11,值2,…);

mysql> insert into users values(null,'test','123456');

语法:INSERT INTO 表名(字段1,字段2,…)VALUES(值1,值2,…)

语法:INSERT INTO 表名 SET 字段名1=1[,字段名2=2,…]
举例:INSERT INTO student SET id=4,name='zhaoliu',grade=72;

同时添加多条数据
语法:INSERT INTO 表名[(字段名1,字段名2,…)]VALUES (值1,值2,…),(值1,值2,…),

mysql> insert into users (id,username,password)values(null,'moon','123456'),(null,'alex','123456');

INSERT INTO 表名[(字段名1,字段名2,…)]VALUES (值1,值2,…),(值1,值2,…),(值1,值2,…)

mysql> insert into users values(null,'moon1','123456'),(null,'alex1','123456');

1
2
3
4
5
6
7
8
9
10
11
DELETE FROM 表名 [WHERE 条件表达式

delete from users where id=1;

删除全部数据

DELETE 语句中没有使用WHERE语句,则会将表中所有记录都删除。

DELETE FROM 表名

删除全部数据的另一种方法——TRUNCATE

更新

1
2
3
4
5
6
7
8
语法:UPDATE 表名 SET 字段名1=1,[ ,字段名2=2,…][ WHERE 条件表达式 ]

update users set password='aaaa' where id=1;


update users set password='123456',username='moon' where id=1

update users set password=456789;

1
2
3
4
5
6
7
8
9
10
11
12
13
select * from users;

星号代表所有的字段

查询指定的字段

select username,password from users;

按条件调节查询

按关系来查询

语法:SELECT 字段名1,字段名2,…FROM 表名WHERE 条件表达式

数据库学习04 Mysql数据库数据的查询语句

in 查询

1
SELECT * FROM student2 WHERE id IN1,2,3);

带 BETWEEN AND 关键字的查询

1
select * from users where id not between 1 and 10;

带 DISTINCT 关键字的查询

1
2
3
4
5
6
7
8
9
10
select distinct username from users

like查询 一般都会给跟着%

select * from users where username like "%m%" ;


下划线 _ 匹配一个字符

select* from users where username like "moo_"

and查询

1
2
满足多个条件
select * from users where id=1 and username='moon'

;

or查询

1
2
3
4
5
6
7
8
9
 满足任意一个条件
select * from users where id=1 or username='moon';

ORAND 一起使用的情况
ORAND 一起使用的时候,AND 的优先级高于 OR,因此二者一起使用时,会先运算 AND
边的表达式,再运算 OR 两边的表达式。


mysql> select * from users where id >5 and password='123456c' or username='moon1';

聚合查询

1
2
3
4
5
6
7
8
9
10
11
count 返回行数

select count(*) from users;

select count(id) from users;

COUNT() 返回某列的行数
SUM() 返回某列值的和
AVG() 返回某列的平均值
MAX() 返回某列的最大值
MIN() 返回某列的最小值

分组查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
GROUP BY

mysql> SELECT * FROM users GROUP BY password;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
| 3 | moon1 | 123456 |
| 1 | moon | 456789 |
+----+----------+----------+
2 rows in set (0.01 sec)

mysql> SELECT * FROM users GROUP BY username;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
| 2 | alex1 | 456789 |
| 1 | moon | 456789 |
| 3 | moon1 | 123456 |
+----+----------+----------+
3 rows in set (0.01 sec)


使用 LIMIT 限制查询结果的数量

select * from users limit 2,10;

select * from users as u where u.id=1;

为表和字段取别名

select username as myname from users;

数据库学习05 Mysql数据库子查询

where型子查询

1
2
 (把内层查询结果当作外层查询的比较条件)	
select * from users where id in (select id from users where id>10);



from型子查询

1
2
3
4
5
(把内层的查询结果供外层再次查询)					
select * from (select username,age from users) as agev_a where age>20
select * from (select * from users where id>=10) as age_10;
(select * from users where id>=10)查询出来的是一个集合 别名为age_10
select * from age_10

exists型子查询

1
2
(把外层查询结果拿到内层,看内层的查询是否成立)
select * from users where EXISTS (select * from users where id>1)

联合查询(两个表的查询)

注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行

SQL UNION ALL 语法

union的用法及注意事项: 两次查询的列数必须一致

1
select * from users union select *,1 from news;

详解http协议

http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。

image-20210705130403629

1、 支持客户/服务器模式 基于请求与响应的

2、 无连接:限制每次连接只处理一一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间

3、 无状态:指协议对事务处理没有记忆能力,缺少状态一位着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一个方面 ,在服务器不需要先前的信息时它的应答就比较快。

http请求

三个部分组成,分别是:请求行 、消息报头、请求正文

GET / HTTP/1.1 请求行

image-20210705132922184

Upgrade-Insecure-Requests: 1

客户端向服务器端发送信号表示它支持 upgrade-insecure-requests 的升级机制

max-age=0表示不管response怎么设置,在重新获取资源之前,先检验ETag/Last-Modified

image-20210705133007497

*GET 请求获取Request-URI所标识的资源*

*POST 在Request-URI所标识的资源后附加新的数据* 比GET方法多一个请求正文

HEAD 请求获取由Request-URI所标识的资源的响应消息报头

PUT 请求服务器存储一个资源,并用Request-URI作为其标识

DELETE 请求服务器删除Request-URI所标识的资源

TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT 保留将来使用

OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

http响应

image-20210705133140880

image-20210705133148408

常见的状态代码 状态描述 说明

200 OK // 客户端请求成功

302 Redirection //请求重定向 (A 找 B 借钱,B 通知 A 找C 借钱 , A找C 借钱) A 客户端 B、C服务器

304 //服务器端资源没有改动,通知客户端查找本地缓存

400 Bad Request //客户端请求有语法错误,不能被服务器所理解

401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403 Forbidden //服务器收到请求,但是拒接提供服务

404 Not Found //客户端访问资源不存在

500 Internal Server Error //服务器发生不可预期的错误

503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

端口协议

端口的类型

TCP端口和UDP端口。由于TCP和UDP两个协议是独立的,因此各自的端口号也相互独立,比如TCP有235端口,UDP也 可以有235端口,两者并不冲突。

(1)TCP端口

  TCP端口,即传输控制协议端口,需要在客户端和服务器之间建立连接,这样可以提供****可靠的数据传输****。常见的包括FTP服务的21端口,Telnet服务的23端口,SMTP服务的25端口,以及HTTP服务的80端口等等。

(2)UDP端口

  UDP端口,即用户数据包协议端口,无需在客户端和服务器之间建立连接,安全性得不到保障。常见的有DNS服务的53端口,SNMP(简单网络管理协议)服务的161端口,QQ使用的8000和400

常见的端口

a.服务端用的端口号

a.服务端使用的端口号

  • 预留端口号

取值范围0-1023,这些端口我们编程的时候不能使用,是那些vip应用程序使用的,只有超级用户特权的应用才允许被分配一个预留端口号

  • 登记端口号

取值范围1024-49151,就是我们平时编写服务器使用的端口号范围

b.客户端使用的端口号

取值范围49152-65535,这部分是客户端进程运行时动态选择的范围,又叫临时端口号

TCP协议三次握手

1255ad5asd

如何查看端口被占用?

NETSTAT [-a] [-b] [-e] [-f] [-n] [-o] [-p proto] [-r] [-s] [-t] [interval]

-a 显示所有连接和侦听端口。

-b 显示在创建每个连接或侦听端口时涉及的可执行程序。

​ 在某些情况下,已知可执行程序承载多个独立的

​ 组件,这些情况下,显示创建连接或侦听端口时涉

​ 及的组件序列。此情况下,可执行程序的名称

​ 位于底部[]中,它调用的组件位于顶部,直至达

​ 到 TCP/IP。注意,此选项可能很耗时,并且在您没有

​ 足够权限时可能失败。

-e 显示以太网统计。此选项可以与 -s 选项结合使用。

-f 显示外部地址的完全限定域名(FQDN)。

-n 以数字形式显示地址和端口号。

-o 显示拥有的与每个连接关联的进程 ID。

-p proto 显示 proto 指定的协议的连接;proto 可以是下列任

​ 何一个: TCP、UDP、TCPv6 或 UDPv6。如果与 -s 选

​ 项一起用来显示每个协议的统计,proto 可以是下列任

​ 何一个: IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP

​ 或 UDPv6。

-r 显示路由表。

-s 显示每个协议的统计。默认情况下,显示

​ IP、IPv6、ICMP、ICMPv6、TCP、TCPv6、UDP 和 UDPv6

​ 的统计;-p 选项可用于指定默认的子网。

-t 显示当前连接卸载状态。

interval 重新显示选定的统计,各个显示间暂停的间隔秒数。

​ 按 CTRL+C 停止重新显示统计。如果省略,则 netstat

​ 将打印当前的配置信息一次。

TCP状态转移要点

TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不会被释放。网络服务器程序要同时管理大量连接,所以很有必要保证无用连接完全断开,否则大量僵死的连接会浪费许多服务器资源。在众多TCP状态中,最值得注意的状态有两个:CLOSE_WAIT和TIME_WAIT。

1、LISTENING状态
  FTP服务启动后首先处于侦听(LISTENING)状态。

2、ESTABLISHED状态
  ESTABLISHED的意思是建立连接。表示两台机器正在通信。

3、CLOSE_WAIT

对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()来使得连接正确关闭

4、TIME_WAIT

我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。****处于TIME_WAIT状态的连接占用的资源不会被内核释放****,所以作为服务器,在可能的情况下,尽量不要主动断开连接,以减少TIME_WAIT状态造成的资源浪费。