数据库
# 数据库
## 下载地址
### https://downloads.mysql.com/archives/community/
## 安装方法
### 解压到一个盘中,盘和文件加全英文
### 把my-default文件拷贝到pycharm里面并改名位my.ini,然后打开,把下面文件拷贝进去,把文件里面的两个路径更改为mysql锁放的文件夹
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=E:\mysql-5.6.44-winx64
# 设置mysql数据库的数据的存放目录
datadir=E:\mysql-5.6.44-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
### 增加环境变量
- 把mysql所在的文件里面的bin文件夹路径添加到系统环境变量中
E:\mysql-5.6.44-winx64\bin;
### 以管理员的身份打开cmd,输入mysqld install 安装mysql服务器
### net start mysql 启动服务器
### 运行里面输入服务可以查看是否打开
### 启动client端连接到刚才安装的mysql服务器
- 以管理员的身份打开cmd,输入mysql -uroot -p(uroot是用户名,默认密码空,输入-p,如果有密码要输入密码)
### 启动client端连接到其它网络上的mysql服务器
- 以管理员的身份打开cmd,输入mysql -uroot -p123 -h192.168.14.12(对方的ip地址)
## 应用方法
### net start mysql
- 启动mysql服务器
### net stop mysql
- 关闭mysql服务器
### select user();
- 查看当前的用户
### set password = password('123');
- 设置密码为:123
### exit
- 退出数据库
### mysql -uroot -p
- 登录数据库,回车后输入123密码,必须以管理员身份才能登录
### create user 'guest'@'192.168.8.%' identified by '123';
- 创建一个用户名位guest的用户,后面的允许访问的IP地址,%是表示网段,123是密码
### 授权
- grant 权限类型 on ftp. * to 'guest'@'192.168.12.%';
- ftp是数据库,guest是给权限的用户,ip是授权的用户地址
- grant all
- 所有授权
- grant select
- 只能查看
- grant select,insert
- 查看和更改
- flush privileges;
- 刷新使授权立即生效
### 库(文件夹)
- 创建库
- create database 数据库名;
create database day25; #创建名字位day25的数据库,硬盘里是一个文件夹,文件夹里面有一个db.opt文件
- 查看数据库
- show databases;
- 切换到数据库
- use 数据库名
use day25 #切换到day25的数据库,就是一个文件夹
### 表(文件)
- 创建表
- create table 表名(字段名 数据类型(长度),字段名 数据类型(长度));
create table student(name int(10),age int(10));
- 指定引擎和编码方式创建表
- create table 表名(字段名 数据类型)ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table t7(
dt datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,#这里增加这个是当更新数据时datetime自动更新位当前时间
y year,
d date,
t time,
ts timestamp,
name char
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 查看表结构
- desc 表名
desc student;
- 查看表
- show tables;
- 删除表
- drop table 名表;
drop table student;
### 数据(表中的内容)
- 增加数据
- 一次插入一条数据‘
- insert into 表 values(值1,值2..);
insert into student values('林明均','10岁');
- 一次插入多条数据
- insert into 表 values(值1,值2..);
insert into student values('林明均','10岁');
- 指定字段插入数据
- insert into 表 (字段,字段2)values(值1,值2..);
insert into student (name) values('林明均3');
- 查看表内容
- 查看表所有内容信息
- select * from 表名;
select * from student;
- 根据字段查看
- select 字段名 from 表名;
select name from student;
- 根据where条件查看
- select * from 表名 where 条件;
select * from student where age=10;
- 修改
- update 表名 set 字段名=值 where 条件;
update student set age=20 where name="林明均";
- 删除
- delete from 表名 where 条件;
delete from student where name="林明刚";
## 存储引擎
### Innodb存储引擎
- 2个文件
- 数据和索引
- 表结构
- 数据和索引存储在一起
- 数据永久化存储,存储到硬盘
- 支持的操作
- 支持事务
- 为保证数据的完整性,将多个操作变成原子性操作(即把一段操作打包成一个操作执行),保证数据的安全性
假如银行转钱,转出的账号已经把钱减掉了,但是转入过程中数据库出现问题或者网络问题没写入,会造成错误数据。为了保证数据安全,可以在转出和转入之间增加事物,在开始前开启事务,完成后提交事务,这样就可以把转入和转出打包一起操作,避免出错
- 支持行级锁
- 修改行少的时候用
- 支持表级锁
- 批量修改多行的时候使用
- 支持外键
- 约束两张表中关联字段不能随意添加、删除,降低数据增删改出错率
### Myisam存储引擎
- 数据和索引不存储在一起
- 数据永久化,存储到硬盘
- 3个文件
- 数据
- 索引
- 表结构
- 支持操作
- 只支持表锁
### Memory存储引擎
- 数据存储在内存中
- 1个文件
- 表结构
- 数据断电消失
### 操作语法
- show variables like '%engin%';
- 查看当前存储引擎
- show create table 表名;
- 查看表的存储引擎,可以看到字段、类型、长度、编码、引擎、约束
show create table table1;
- 更改表的引擎
- alter table 表名 engine=Myisam;
alter table t7 engine=Myisam; #InnoDB / Myisam /Memory
- create table 表名(字段1,字段类型,字段2,字段类型)ENGINE=Myisam;
- 创建表时候指定搜索引擎
create table school1(name int(20),addr int(20)) engine=Memory;
#可以设为,Memory,InnoDB,Myisam
### show engines;
- 查看支持的存储引擎
## 数据类型
### 数字
- 默认是有符号的,如果要设成无符号在后面加int unsigned
- tinyint
- 1个字节
- int(10)
- 4个字节,10表示最长10位数
- bigint
- 8个字节
- float(5,2)
- 4个字节,5表示5位数,2表示小数点后保留2位数
create table t4(
name int(10) unsigned,
score float(5,2)
);
#这里的10表示的是最长10位,fload里面的5代表的是5位数表示,2表示两位小数
- double
- 8个字节
### 时间
- data
- 日期
- 20190512
- time
- 时间
- 121953
- datetime
- 日期时间
- 20190820110923
- year
- 年
- timestamp
- 时间戳
- 操作方法
- 创建时间表
create table t5(
dt datetime,
y year,
d date,
t time,
ts timestamp
);
- 插入时间
- 插入当前时间
insert into t5 values(now(),now(),now(),now(),now());
- 按格式插入时间
insert into t5 values(20190910080808,2019,20190910,080808,20190910080808);
- #按字符串格式,并且可以指定字段方式写入时间
insert into t5 (dt,t) values("2020-10-10 8:20:30",'8:10:30');
- 更新时间
update t5 set y=1990 where y=2200;
#更新的时候timestamp时间戳会自动更新位当前电脑时间
- 例程
create table t5(
dt datetime,
y year,
d date,
t time,
ts timestamp
);
desc t5; #查看信息
insert into t5 values(now(),now(),now(),now(),now());
### 字符串
- char(18)
- 最多表示255个字符,定长存储,浪费空间,节省时间,指定长度后,如果输入的字符串少于指定字符时后面自动加空格填满
char(6) 假如插入的字符“lin”,最后在数据库中存储是后面加了三个空格"lin "
- varchar(18)
- 最多表示65536个字符,变长存储,节省空间,存取速度慢,以为要计算长度后存储
’lin‘ 那么存储到数据库中是在字符串的后面加上字符串个数'lin3'
- 推荐使用场景
- char
- 身份证、手机号码、QQ、username、passaword、银行卡
- varchar
- 评论、朋友圈、微博
### 单选行为
- enum
### 多选行为
- set
### 不能重复
- unique
*XMind - Trial Version*
浙公网安备 33010602011771号