Python 数据库
分类
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
下载地址:https://dev.mysql.com/downloads/mysql/
下载的时候提供了带界面的和不带界面的 用哪个呢?
服务器通常是不带界面的linux系统,并且熟练掌握SQL语句通常是面试官的基本要求
此处安装解压版的,下载对应的32/64位压缩包,解压到指定位置即可。
""" bin 执行文件 mysqld 服务器主程序 mysql 无界面的客户端 data 数据文件 my-default.ini 配置文件模板
注意: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文件夹来看
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是两码子事,一个系统服务一个是客户端执行文件
本质是TCP程序,必须指定ip和端口 ,如果服务器就运行在本机上 可以省略ip 如果端口没改过 也可以省略端口 mysql -hip -P端口 -u用户名 -p密码 实例: mysql -uroot -p mysql 5.6 默认是没有密码的
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.命令行中重启服务器验证新密码
3.编码设置
新建一个my.ini文件 # 服务器配置部分 [mysqld] character-set-server = utf8 # 客户端mysql配置部分 [mysql] default-character-set = utf8 # 其余客户端配置部分 [client] default-character-set = utf8 注意:修改了mysqld配置需要重启服务器
一 数据库 增: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 : 将某一列的值查出