数据库

# 数据库

## 下载地址

### 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*

posted @ 2021-04-13 22:44  傻老头  阅读(113)  评论(0)    收藏  举报