Python 数据库

一 数据库

1.什么是数据库:数据库指的是存储数据的仓库,本质上是一套CS结构的TCP程序。

二 数据库分类

1.关系型数据库

   #1.数据库可以为数据与数据之间建立关联关系,人是一条数据,他可能关联着一个工作岗位数据。双方可以通过自身找到对方。

   #2.有约束,基于硬盘存储

 mysql :免费开源 支持中大型企业
    为了防止mysql被闭源 以及 担心oracle的优化能力
    创始人Widenius 另起灶炉  开发了mariaDB  mariaDB 完全兼容mysql 使用起来        一模一样     
    mysql的一生 坎坎坷坷 先后被 sun   - oracle 收购
    
oracle: 收费闭源 功能强大 分布式数据库   
SQLServer:微软生态圈 仅支持 windows系统  太局限  
DB2: IBM 开发的数据库软件 收费闭源  经常与IMB的机器绑定销售  打折啥的

2.非关系型数据库

 #1.通常key value存储数据各个数据之间没有关系 不是通用性数据库 有局限性

 #2.没有约束,基于内存存储

MongoDB
redis
memcache

三 数据库与文件系统的对应关系

数据库       文件夹

一张表       一个文件夹

一条记录    文件中的一行数据

四 安装mysql

下载地址:https://dev.mysql.com/downloads/mysql/

下载的时候提供了带界面的和不带界面的 用哪个呢?

服务器通常是不带界面的linux系统,并且熟练掌握SQL语句通常是面试官的基本要求

此处安装解压版的,下载对应的32/64位压缩包,解压到指定位置即可。

五 mysql目录解析

"""
bin             执行文件
mysqld            服务器主程序
mysql            无界面的客户端
data            数据文件
my-default.ini    配置文件模板
View Code

六 运行mysql

1.不推荐:

注意:5.7后的版本需要先初始化 执行:mysqld --initialize-insecure
启动服务器
    1.运行CMD,通过cd 进入bin目录    
    2.执行mysqld就可以启动服务器,如果报错的话使用管理员权限来运行CMD
    这是一个socket服务器程序 这时候相当于做了一下事情:
    启动服务器socket 并监听端口 默认绑定当前ip 端口默认3306
    
启动客户端
    运行mysql 注意他是一个socket程序 要连接服务器需要ip 和 端口
    mysql  -h ip -P port -uroot -p  密码默认为空
看到欢迎界面则说明socket链接成功了

执行过程分析:
    这个命令提示符本质是什么?
    就是一个input
    接受一条指令然后发送给服务器 
    服务器接收到之后呢解析指令 
    取出你要的数据在send给客户端
那问题来了 指令肯定不能随便写,不然服务器不认识,大家必须得有套规范
    就是sql 语句
    sql全称为 结构化查询语言,是所有非关系型数据库都支持的语言,学习数据库很大一部分时间是在学习sql语句。
    
登录成功后可以执行一下命令来查看所有存在的数据库
show databases;
对比data文件夹来看
View Code

2.推荐使用

1.添加环境变量

找到安装目录,将bin路径复制填入系统设置的path中即可

2.注册系统服务

将mysql注册到系统服务中  mysqld --install  

启动服务 net start mysql

停止服务 net stop mysql

删除服务 sc delete mysql 如果需要重装的话...

#关闭服务器
tasklist | findstr mysqld
taskkill  /F /PID  8372

需要注意的是 默认注册的服务名称叫做mysql 这与bin下的mysql是两码子事,一个系统服务一个是客户端执行文件

七 数据库基本操作

1.客服端登录连接服务端

本质是TCP程序,必须指定ip和端口 ,如果服务器就运行在本机上 可以省略ip  如果端口没改过 也可以省略端口  
mysql -hip -P端口 -u用户名  -p密码  
实例: mysql -uroot -p
    
mysql 5.6 默认是没有密码的 
View Code

2.修改管理员密码

1.如果知道原始密码  可以使用mysqladmin 这个工具
mysqladmin -u用户名 -p旧密码 password 新密码
实例: mysqladmin -uroot -p  password 123

2.忘记密码
1.停止服务
2.启动服务器并添加参数
mysqld --skip-grant-tables
3.使用客户端登录服务器 执行修改命令 此时不需要输入密码
update mysql.user set password = password("123123") where user="root" and host="localhost"
4.刷新权限
flush privileges
5.命令行中重启服务器验证新密码
View Code

3.编码设置

新建一个my.ini文件

# 服务器配置部分
[mysqld]
character-set-server = utf8
# 客户端mysql配置部分
[mysql]
default-character-set = utf8
# 其余客户端配置部分
[client]
default-character-set = utf8
注意:修改了mysqld配置需要重启服务器
View Code

八 数据库的增删改查

一 数据库
增:create database 数据库名称 charset 字符编码;

例:

  create database db1 charset utf8;
注:charset utf8(字符编码省略,使用默认的)

删:drop database 数据库名称;

例:drop database db1;

改:alter database db1 charset 字符编码;
      alter database db1 charset gbk;

只能修改数据库的字符编码
查:查看所有库的库名
       show databases;
      单独查看某一个库的信息
     show create database 数据库名;
     show create database db1;

一 表

首先切换文件夹:
    use 数据库名;
    use db1;
    select database(); #查看当前所在的文件夹

 

   最终的格式:

 

最终的格式:
#                 create table 表名 (
#                    列1 列属性 [是否为null 默认值],
#                    列2 列属性 [是否为null 默认值],
#                    .....
#                    列n 列属性 [是否为null 默认值]
#                 )engine = 存储引擎  charset = 字符集
#
#              最终的例子:
#                 create table t4 (
#                    id  int auto_increment primary key,
#                    name char(32)  not null  default '',
#                    pwd  char(32)  not null  default ''
#                 )engine=Innodb charset=utf8;

 

 

 

auto_increment : 自增
#                 primary key : 主键索引 (作用: 加快查找的速度)
#                 not null : 不能为空
#                 default : 默认值
#
#                 注意: 后面一列写完之后, 不能加逗号  (*********),engine=Innodb charset=utf8;如果不写为默认的根据实际情况。

 
删:drop table 表名;

 

实例:
drop table t1;
注:连带着将数据表中的所有数据都会删掉

改:

#               create table t4 (
#                 id  int auto_increment primary key,
#                 name char(32)  not null  default '',
#                 pwd  char(32)  not null  default ''
#              )engine=Innodb charset=utf8;
#
#              替换字段:
#                 alter table 表名(t3) change 原列名(name) 新列名(username varchar(32) not null default '');
                修改
                   alter table userinfo modify name char(32);
#
#              新增字段:
#                 alter table 表名(t3)  add  新列(pwd char(32)  not null  default '');
#
#              删除字段:
#                 alter  table 表名(t3) drop 列名(pwd);

查:

查看当前库下所有的表名
show tables;
查看t1表的详细信息
show create table t1;
查看表结构
desc t1;


数据行
增:

insert into userinfo values(1,'jason',123);  插入单条数据
insert into userinfo values(1,'jason',123),(2,'egon',123),(3,'tank',123);  插入多条数据

删:

#              delete from 表名(t3); 将表中的所有的 数据删除掉, 再次添加的时候, 继续
会延续上一个 ID
                delete from userinfo where id =1;  指定删符合条件的数据
#
#              truncate 表名(t3);    将表中的所有的 数据删除掉, 再次添加的时候, ID 会重新开始
#
#              truncate 速度快
#
#              ps: 工作中, 线上数据库, 这个命令根本不会让你用到
#
#              delete from 表名(t3) where name = 'xxxxx';

delete from db1.t1 where name = "SB" ;

改:

               update t3 set username='zekai';
#
#              update t3 set username='xxxx'  where  id=3;
#
#              update t3 set username='xxxx', pwd='xxxxx'  where  id=3;

查:select * from t3; : 将表中的 所有的列全部列出
       select 列名, 列名, 列名 from t3 : 将某一列的值查出
View Code
原文地址:https://www.cnblogs.com/tfzz/p/11364475.html