[MySQL]基础知识笔记(数据库与表操作)

内存与硬盘的区别:

  • 内存:容量小,速度快,造价高,断电后数据丢失
  • 硬盘:容量大,速度慢,造价低,断电后数据不丢失

常见的关系型数据库:

  • 1.ACCESS-微软出的在OFFICE里集成的一个小型数据库;SQLITE-常用在手机APP里,桌面程序
  • 2.SQL Server-微软真正意义上的大型数据库
  • 3.MySQL-用的最多的数据-开源的,免费
  • 4.PostgreSql-具说效率比MySQL要高些,有一部分公司在用
  • 5.Oracle-业内最强的数据库,收费

非关系型数据库:
不规定基于SQL实现,现在更多的是指NoSQL数据库

  • 1.基于键值对:memcached,redis
  • 2.基于文档型:mongodb
  • 3.基于列族:hbase
  • 4.基于图型:neo4j

连接数据库:mysql -u root -p
端口号:3306
主机IP:127.0.0.1

注释:单行:- -  或  #
           多行:/*   */

数据库操作:


    显示当前服务器有哪些真实数据库:

show databases;


information_schema, mysql, performance_schema, sys数据库是mysql自带的存放着MYSQL本身的配置信息;

sakila, worid数据库是MYSQL提供的实例库
    创建数据库:

create database [if not exists] db_name [create_specification[,create_specification]…];


create_specification:

  •  character set charset_name  当前创建库的编码集  utf8mb4
  •  collate collation_name  排序规则

MYSQL中允许用户使用关键字做为数据库名,但是需要用反引号``把关键字引起来


    查看数据库字符集:

show variables like ‘%character%’;


    选择数据库

use 数据库名;


    查看当前使用的是哪个数据库:

select database();


    删除数据库:

drop database [if exists] db_name;


    查警告信息:

show warnings;


    查看当前数据库有哪些表:

show tables;

常用数据类型:


    数值类型:

  • TINYINT                    1字节              对应Byte
  • INT                             4字节             对应Integer
  • BIGINT                       8字节             对应Long
  • DECIMAL(M,D)     M/D最大值+2     对应BigDecimal

    字符串类型:

  • VARCHAR(SIZE)     对应String      可变长度字符串
  • TEXT                        对应String      长文本数据
  • MEDIUMTEXT         对应String      中等长度文本数据
  • BLOB                       对应byte[]    二进制形式的长文本数据

  补充:字节的多少和编码格式有关

  • GBK:编码使用两个节点表示一个汉字
  • UTF-8:编码使用三个或四个字节表示一个字符

    日期类型:

  • DATATIME  8字节  对应java.util.Date,java.sqlTimestamp

表的操作:


    创建表:

create table tabe_name(
  字段名1  数据类型,
  字段名2  数据类型,
  …
);


    查看表结构:

desc 表名;


    删除表:

drop table [if exists] tbl_name [,tbl_name]…;

CRUD:增加(Create),查询(Retrieve),更新(Update),删除(Delete)


    新增(Create):

insert into table_name [字段名,字段名…] values (值1,值2…);


    查询(Retrieve):

select [去重distinct]  字段名1  as 别名,字段名2…  from table_name [where …] [order by 字段名 [ASC|DESC]…] [LIMIT …];


        排序:order by …;    

  • ASC为升序
  • DESC为降序(默认为ASC)

  补充:NULL在MYSQL中比任何值都小,与任何值比较都返回false,与任何值运算都会返回NULL


条件查询(where):


比较运算符:

逻辑运算符:and,or,not。
分页查询:LIMIT

select … from table_name [where …] [order by …] LIMIT num;从0开始,筛选n条结果
select … from table_name [where …] [order by …] LIMIT start,num;从start开始,筛选n条结果
select … from table_name [where …] [order by …] LIMIT num OFFSET start;


    修改(Update):

update table_name set 字段名=修改值… [where…] [order by…] [limit …];


    删除(Delete):

dalete from table_name [where…] [order by…] [limit…];

数据库约束:


自动增长:AUTO_INCREMENT
FOREIGN KEY(外键约束):foreign key (字段名) references 主表(列)
CHECK(检查约束):check(字段名 = ‘ ’ or 字段名 = ‘ ’)

聚合查询:


        聚合函数:

count统计个数;sum总和;avg平均值;max最大值;min最小值。
    group by字句:

select 字段名… from table_name [where…] group by 要分组的字段名 [having 分组后的条件];


SQL的执行过程是:from->where->select->group by->order by->limit

联合查询:


    内连接:

select 字段名 from 表名 as 别名 where 连接条件 and 其他条件;


    外连接:
左外连接,左边表数据都会显示,没有以null填充

select 字段名 from 表名1 left join 表名2 on 连接条件;


有外连接,右边表数据都会显示,没有以null填充;

select 字段名 from 表明1 right join 表名2 on 连接条件;


    自连接:
连接的表是同一张表,主要作用是把列转为行,从而实现数据之间的运算;

select * from 表名 as 别名1,表名 as 别名2;


    子查询:
一个查询的条件依赖于另一个查询的结果;
        单行子查询:

select * from 表名 where 字段名=(select * from 表名…);


        多行子查询:

select * from 表名 where 字段名 in (select * from 表名…);


    合并查询:把两个不同表中的数据合并到一个结果集中,查询的列一定要相同;

  • union:合并并去重;
  • union all:显示所有数据,不去重。

猜你喜欢

转载自blog.csdn.net/m0_59952648/article/details/130394624