掌握MySQL 2

七、库相关操作

  7.1、系统数据库

    information_schema:虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等。

    performance_schema:mysql 5.5 开始新增的一个数据库。主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象。  

    mysql:授权库,主要储存用户的权限信息。

    test:MySQL 数据库系统自动创建的测试数据库。

  7.2、数据库命名规则

    可以由字母、数字、下划线、@、#、$ 等组成

    区分大小写

    名字唯一

    不能使用关键字,如 create、select

    不能单独使用数字

    最长128位

  7.3、数据库相关操作

    1、查看数据库

show databases;    # 查看所有数据库
show create database db1;    # 查看指定数据库
select database();    # 查看当前所在数据库

    2、选择数据库

use db1;

    3、修改数据库

alter database db1 charset utf8;

   4、删除数据库

drop database db1;

八、表相关操作

  8.1、储存引擎

    1、什么是存储引擎

      又称作表类型,根据表的不同类型,对应 MySQL 不同的存取机制。

      MySQL 数据库提供了多种储存引擎,用户可以根据不同需求为数据表选择不同储存引擎,也可自己编写一个存储引擎。

  8.2、MySQL的几个重要的存储引擎

    1、Innodb 存储引擎

      支持事务,行锁和外键。其设计目标主要面向联机事务处理(OLTP)的应用。并支持类似 Oracle 的非锁定

      读,即默认读取操作不会产生锁。是目前默认的存储引擎。

      

      建表的时候 innodb 会产生两个文件

        一个是表结构文件

        一个是存储数据文件

    2、myisam 存储引擎

      不支持事务、表锁设计,支持全文索引。它的缓冲池只缓存索引文件,而不缓存数据文件,这与大多数数据库都不相同。查询

      速度较 Innodb 快,但安全性不及 Innodb。

        

      建表的时候 innodb 会产生三个文件

        一个是表结构文件

        一个是索引文件

        一个是存储数据文件

    3、memory 存储引擎

      数据存放在内存中,数据库重启或崩溃,表中的数据都会消失。

      建表的时候仅仅生成一个表结构文件

    4、blackhole 存储引擎

      存入的数据都会消失

      建表的时候仅仅生成一个表结构文件

  8.3、使用存储引擎

create table t1(id int) engine=innodb;
create table t2(id int) engine=myisam;
create table t3(id int) engine=memory;
create table t4(id int) engine=blackhole;

九、表介绍

  表相当于文件,表中的一条记录相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段。

  9.1、创建表

    1、语法     

create table t1(
    字段名1 类型[(宽度) 约束条件],
    字段名2 类型[(宽度) 约束条件],
    字段名3 类型[(宽度) 约束条件]
    );

    2、注意

      在同一张表中,字段名不能相同

      宽度和约束条件可选

      字段名和类型必须写

十、数据类型

  10.1、常用数据类型概览

    1、数字

      整型:tinyint  int  bigint

      小数:

        float:在位数比较短的情况下不精准

        double:在位数比较长的情况下不精准

        decimal:精准,内部原理是以字符串形式去存,推荐使用

    2、字符类型

      char(10):简单粗暴,浪费空间,存取速度快  # 将 root 存成 root000000

      varchar:精准,节省空间,存取速度慢

      sql 优化:创建表时,定长的类型往前放(不如性别),变长的往后放(比如地址)  

    3、时间类型

      datatime

    4、枚举类型和集合类型

  10.2、数值类型

    1七、库相关操作

  7.1、系统数据库

    information_schema:虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等。

    performance_schema:mysql 5.5 开始新增的一个数据库。主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象。  

    mysql:授权库,主要储存用户的权限信息。

    test:MySQL 数据库系统自动创建的测试数据库。

  7.2、数据库命名规则

    可以由字母、数字、下划线、@、#、$ 等组成

    区分大小写

    名字唯一

    不能使用关键字,如 create、select

    不能单独使用数字

    最长128位

  7.3、数据库相关操作

    1、查看数据库    

show databases; # 查看所有数据库

show create database db1; # 查看指定数据库

select database(); # 查看当前所在数据库

    2、选择数据库   

 use db1;

    3、修改数据库

alter database db1 charset utf8;

   4、删除数据库

drop database db1;

八、表相关操作

  8.1、储存引擎

    1、什么是存储引擎

      又称作表类型,根据表的不同类型,对应 MySQL 不同的存取机制。

      MySQL 数据库提供了多种储存引擎,用户可以根据不同需求为数据表选择不同储存引擎,也可自己编写一个存储引擎。

  8.2、MySQL的几个重要的存储引擎

    1、Innodb 存储引擎

      支持事务,其设计目标主要面向联机事务处理(OLTP)的应用。其特点是行锁设计、支持外键,并支持类似 Oracle 的非锁定

      读,即默认读取操作不会产生锁。是目前默认的存储引擎。

    2、myisam 存储引擎

      不支持事务、表锁设计、支持全文索引。它的缓冲池只缓存索引文件,而不缓存数据文件,这与大多数数据库都不相同。查询

      速度较 Innodb 快,但安全性不及 Innodb。

    3、memory 存储引擎

      数据存放在内存中,数据库重启或崩溃,表中的数据都会消失。

    4、blackhole 存储引擎

      存入的数据都会消失

  8.3、使用存储引擎

create table t1(id int) engine=innodb;

create table t2(id int) engine=myisam;

create table t3(id int) engine=memory;

create table t4(id int) engine=blackhole;

九、表介绍

   表相当于文件,表中的一条记录相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段。

  9.1、创建表

     1、语法     

create table t1(

    字段名1 类型[(宽度) 约束条件].

    字段名2 类型[(宽度) 约束条件].

    字段名1 类型[(宽度) 约束条件].

    );

    2、注意

      在同一张表中,字段名不能相同

      宽度和约束条件可选

      字段名和类型必须写

十、数据类型

  10.1、常用数据类型概览

    1、数字

      整型:tinyint  int  bigint

      小数:

        float:在位数比较短的情况下不精准

        double:在位数比较长的情况下不精准

        decimal:精准,内部原理是以字符串形式去存,推荐使用

    2、字符串

      char(10):简单粗暴,浪费空间,存取速度快 # 将 root 存成 root000000

      varchar:精准,节省空间,存取速度慢

      sql 优化ti:创建表时,定长的类型往前放(不如性别),变长的往后放(比如地址)  

    3、时间类型

      datatime

    4、枚举类型和集合类型

  10.2、整型

      整数类型默认有符号,可设置为无符号

create table t1 (x int unsigned);

      对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制,因此在创建表时,如果是整型类型,无需指定显示宽度。

      zerofill  用 0 填充不足的位数。

    10.3、浮点型

      字段限制特点 

        float(5,3)  前一位表示所有的位数,后一位表示小数个数

      float(单精度浮点数):

        m 最大为255,d 最大为30

      double(双精度浮点数):

        m 最大为255,d 最大为30

      decimal

        m 最大为65,d 最大为30

     10.4、字符串类型

      char(4)  定长:最大存储四个字符,超出报错,不足默认用空格占位

      varchar(4)  变长:最大存储四个字符,超出报错,不足有几位存几位

      char:

        存取速度快,浪费硬盘空间

      varchar:

        存取速度慢,节省硬盘空间

        

    10.5、时间类型

      分类:        

        date:2019-05-01

        time:11:11:11

        datetime:2019-01-02 11:11:11

        year:2019

    

    10.6、枚举与集合类型

      枚举:enum,多选一

      集合:set,多选多

create table t1(
  id int,
  name char(16),
  gender enum('male','female','others')
);
insert into user values(1,'a','xxx')  # 报错
insert into user values(2,'b','female')  # 正确!


create table t2(
  id int,
  name char(16),
  gender enum('male','female','others'),
  hobby set('read','sleep','eat','dbj')
);
insert into t2 values(1,'a','male','read,sleep,dbj')  # 集合也可以只存一个

十一、表完整性约束

  11.1、介绍 

    primary key(PK)  标识该字段为该表的主键,可以唯一的标识记录

    foreign key(FK)   标识该字段为该表的外键

    not null      标识该字段不能为空

    unique key(UK)   标识该字段的值时唯一的

    auto_increment   标识该字段的值自动增长(整数类型,且为主键)

    default       设置默认值

    unsigned      无符号

    zerofill        使用 0 填充

  

  11.2、not null + default 

create table user(
    id int,
  name char(16)
);
insert into user values(1,null)  # 可以修改

alter table user modify name char(16) not null;
insert into user(name,id) values(null,2);  # 报错 插入数据可以在表名后面指定插入数据对应的字段

create table student(
    id int,
  name char(16) not null,
  gender enum('male','female','others') default 'male'
)
insert into student(id,name) values(1,'n')  # 成功

  

  11.3、unique

    单列唯一,限制某一个字段是唯一的

create table user1(
id int unique,
name char(16)
);
insert into user1 values(1,'a'),(1,'b') # 报错
insert into user1 values(1,'a'),(2,'b') # 成功


    联合唯一,在语句的最后,用括号的形式,表示那几个字段组合的结果是唯一的
   
create table server(
    id int,
  ip char(16),
  port int,
  unique(ip,port)
)
insert into server values(1,'127.0.0.1',8080);
insert into server values(2,'127.0.0.1',8080);  # 报错
insert into server values(1,'127.0.0.1',8081);

  

  11.4、primary key + auto_increment

    1、单从约束角度来说 primary key 等价于 not null unique

create table t11(id int primary key);
desc t11;
insert into t11 values(1),(1);  # 报错
insert into t11 values(1),(2);

    2、primary keys 也是 innodb 引擎查询必备的索引    

      2.1、innodb 引擎在创建表的时候,必须要有一个主键,如果没有设置主键

        1、那么会从上到下搜索直到遇到一个非空且唯一的字段,自动升级成主键

        2、当你的表中没有任何的约束条件,innodb 会采用自己的内部默认的一个主键字段,将其设置为主键。

          该主键字段在查询时无法使用。因此查询速度变慢。  

create table t1(
    id int,
    name char(16),
    age int not null unique,
    addr char(16) not null unique
    )engine=innodb;
desc t1;

    3、联合主键:多个字段联合起来作为表的一个主键,本质还是一个主键。      

create table t1(
    ip char(16),
    port int,
    primary key(ip,port)
    );
desc t1;

    4、 主键字段应该具备自动递增的特点,每次添加数据,不需要用户手动输入

# auto_increment    自动递增,只能加载在设置成key的字段上。
create table t1(
id int primary key auto_increment,
name varchar(16));

desc t1;

      delete from  仅仅是删除数据,不会重置主键

      truncate     初始化表,会重置主键

      

      

    

    

    

原文地址:https://www.cnblogs.com/binyuanxiang/p/11386648.html