day35 数据库介绍和初识sql
今日内容:
1. 代码: 简易版socketsever
2.数据库(mysql)简单介绍和分类介绍
3.mysql root修改密码
4.修改字符集编码
5.初识sql语句
1.简易版socketsever
import socket from threading import Thread class MySocket: def __init__(self,sever_addr): self.sever_addr=sever_addr self.socket=socket.socket() #可以在init方法中实例化socket对象 # 绑定ip地址和端口号,监听, #然后执行建立连接方法 def serve_forever(self): self.socket.bind(self.sever_addr) self.socket.listen() #建立连接 def build_connect(self): while 1: conn,addr=self.socket.accept() t=Thread(target=self.handle,args=(conn,)) t.start() #与客户端进行沟通 def handle(self,conn): while 1: from_client_msg=conn.recv(1024) print('来自客户端的消息>>>',from_client_msg.decode('utf-8')) to_sever_msg=input('服务端说:') conn.send(to_sever_msg.encode('utf-8')) if __name__=='__main__': ip_port=('127.0.0.1',8001) sever=MySocket(ip_port) sever.serve_forever()
import socket client = socket.socket() client.connect(('127.0.0.1',8001)) while 1: to_server_msg = input('客户端说:') client.send(to_server_msg.encode('utf-8')) from_server_msg = client.recv(1024) print('来自服务端:',from_server_msg.decode('utf-8'))
2.数据库(mysql)简单介绍和分类
数据库:(简单说数据库就是储存数据的地方)
数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。
所谓“数据库”系以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
数据库管理系统 : 英语(Database Management System,简称DBMS)
为管理数据库而设计的电脑软件系统,一般具有储存,截取,安全保障,备份等基础功能.数据库管理系统又可以分为,
关系型和非关系型
关系型:根据所支持的计算机类型作为分类,或依据所用查询语言来作为分类,或依据性能冲量重点来做为分类,亦或其他的分类方式.
常见的关系型数据库:oracle数据库,MySQL,MariaDB数据库,SQL Server数据库,Access数据库等 非关系型:指的是非关系型数据库,而不是“No SQL”的意思,因此,NoSQL的产生并不是要彻底地否定关系型数据库,而是作为传统关系型数据库的一个有效补充。NOSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。 NOSQL非关系型数据库小结: 1、NOSQL不是否定关系数据库,而是作为关系数据库的一个重要补充 2、NOSQL为了高性能、高并发而生,忽略影响高性能,高并发的功能 3、NOSQL典型产品memcached (纯内存),redis(持久化缓存),mongodb(文档的数据库)
3.mysql root修改密码
忘记密码:
cd转到mysql\bin目录。 输入mysqld --skip-grant-tables 跳过认证表来启动mysql服务端,这样再连接的时候就不需要输入密码了,直接输入一个mysql一回车就行了,然后到里面去修改密码
方法1:用mysqladmin (因为我们将bin已经添加到环境变量了,这个mysqladmin也在bin目录下,所以可以直接使用这个mysqladmin功能,使用它来修改密码)
关于mysqladmin的介绍:是一个执行管理操作的客户端程序。它可以用来检查服务器的配置和当前状态、创建和删除数据库、修改用户密码等等的功能,虽然mysqladmin的很多功能通过使用MySQL自带的mysql客户端可以搞定,但是有时候使用mysqladmin操作会比较简单。
格式:mysqladmin -u用户名 -p旧密码 password 新密码
例子:mysqladmin -uroot -p123456 password 123
只用mysqladmin的时候,会出现一个warning警告信息:Warning: Using a password on the command line interface can be insecure.,这个没关系,是提示你,你直接在cmd下使用明文设置密码的时候,是不安全的,因为别人可以通过翻看你输入指令的历史记录来查看到你设置的密码,所以提示你一下,不信你按上下键,可以看到自己之前输入的命令,或者输入下面这个指令也可以看到:
所以我们最好连接进入到mysql里面之后,在进行密码的修改和设置。
方法2: 用SET PASSWORD命令
首先登录MySQL,使用mysql自带的那个客户端连接上mysql。 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:mysql> set password for root@localhost = password('123');
方法3:用UPDATE直接编辑那个自动的mysql库中的user表
首先登录MySQL,连接上mysql服务端。
跳过密码验证 : mysqld --skip-grant-tables 跳过之后,在另开一个DOS窗口,mysql进入就行 mysql> use mysql; use mysql的意思是切换到mysql这个库,这个库是所有的用户表和权限相关的表都在这个库里面,我们进入到这个库才能修改这个库里面的表。 mysql> update user set password=password('123') where user='root' and host='localhost'; 其中password=password('123') 前面的password是变量,后面的password是mysql提供的给密码加密用的,我们最好不要明文的存密码,对吧,其中user是一个表,存着所有的mysql用户的信息。 mysql> flush privileges; 刷新权限,让其生效,否则不生效,修改不成功。
4.修改字符集编码
在我们创建表的时候,如果我们不指定字符集编码,mysql系统或默认给我们指定一个字符集编码 latin 1,拉丁文
show create database crm\G 查看数据库的字符集编码
解决方案:
1, set names latins; 设置name的语言为latin1 ,但是这里的代码不是永久生效的
2.在配置文件中修改客户端和服务端参数,可以实现set names latin1; 的效果,并且永久生效
如果命令输错了,可以通过\c来结束
5. 初识sql语句
sql语句主要针对的是数据库里面的三个角色进行操作, 库 表 行 ,操作包括: 增删改查.
1、库(data文件夹中的文件夹,每创建一个库,这个库的名称就是文件夹的名称,文件夹里面保存着一些这个库相关的初始信息)
增:create database db1 charset utf8; #创建一个库,可以指定字符集 查:show databases; #查看数据库中所有的库 show create database db1; #查看单独某个库db1的信息 改:alter database db1 charset latin1; #修改库的字符集,注意语句的格式(其他语句也是这么个格式),alter(修改) database(修改数据库) db1(哪个数据库) charset(字符集) latin1(改成哪个字符集) 删: drop database db1; #删除数据库
2、表(操作文件,表是上面库文件夹里面的文件)
先切换库:use db1; #要操作表文件,要先切换到对应的库下才能操作表 查看当前所在的是哪个库:select database(); 增:create table t1(id int,name char(10) ); #创建表的时候,和excel一样,需要有字段啊,每个字段还需要只能一下这个字段数据的格式,这里指定的是两个字段列,id和name列,id和name是列名(字段名),id 后面的int的意思说id这一列中的数据只能是int类型的,name后面的char的意思是,name这一列中的数据只能是char类型的(char表示定长字符串类型),char里面的10是说这个字段的长度最长为10个字符,如果不指定这个长度,默认长度是1,注意是字符而不是字节, 查:show tables; #查看当前库中所有的表 show create table t1; #查看单表的创建信息 #还可以通过下面两句来查看表信息,以表格的形式展示结果: desc t1; describe t1;#上下这两句是一样的结果 改:alter table t1 modify name char(3); #修改字段属性的,将name字段的char长度改为3,改完之后我们在用上面的show create table t1;desc t1;describe t1;来查看一下修改结果。 alter table t1 change name name1 char(2); 删:drop table t1; 3. 行(操作文件(表)中的内容/记录)(*****将来的重中之重) 增:insert into t1 values(1,'dsb1'),(2,'dsb2'),(3,'dsb3'); #往t1表中插入三行数据,注意你插入的每行内容都要和你创建表的时候的字段个数和字段属性对应好,注意每行数据以逗号分隔。 insert后面的into可以不用写。 查:select * from t1; #查看t1表中所有字段的数据,select 字段 from 表。 select id,name from t1;#查看t1表中的id和name列的数据,其他的不看,注意格式,每个字段逗号分隔,在cmd窗口下只是展示给我们看,将来我们通过程序获取查询数据的时候,就可以这么获取,查询字段的顺序也是可以颠倒的,name,id这样也是可以的。 注意还有一个问题:当你写sql语句的时候,可能会出现下面这种情况,由于少写了一个引号,导致怎么也结束不了 改:update t1 set name='sb' where id=2; #把id为2的行(记录)中的name字段的数据改为sb;id>1;id<=1;等等都可以。后面会细讲的~~~ update t1 set name='sb',id=88 where id>2; #对两个字段进行修改 update t1 set name='sb';#如果不指定where,那么会name字段的所有数据都改成sb。 删:delete from t1 where id=1; #删除id为1的行 清空表: delete from t1; #如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。 truncate table t1;数据量大,删除速度比上一条快,且直接从零开始, auto_increment 表示:自增 primary key 表示:约束(不能重复且不能为空);加速查找