mysql

MySQL

数据库介绍2434274

H2数据库:是一个开源的关系型数据库。H2是一个采用java语言编写的嵌入式数据库引擎,只是一个类库(即只有一个.jar文件),可以直接嵌入到应用项目中,不受平台的限制
Oracle:是甲骨文公司的一款关系型数据库管理系统,是目前世界上流行的关系型数据库之一
MySQL:是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,属于Oracle旗下产品
Redis:是一个开源的,高性能的key-value系统,可以用来缓存或存储数据。

1.什么是SQL

SQL(Structured Query Language) 是“结构化查询语言”,它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQL、Oracle、SQL Server等。
SQL标准(ANSI/ISO)有:
  • SQL-92:1992年发布的SQL语言标准。
  • SQL-1999:1999年发布的SQL语言标签。
  • SQL-2003:2003奶奶发布的SQL语言标签。

2.语法要求

  • SQL语句可以单行或多行书写,以分号结尾;
  • 可以用空格和缩进来增强语句的可读性
  • 关键字不区分大小写,建议使用大写

SQL分类

  • DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;

    创建数据库:CREATE DATABASE [IF NOT EXISTS] mydb1;
    
    IF NOT EXIST 选项 :如果这个数据库不存在时创建该库
    
    删除数据库:DROP DATABASE [IF NOT EXIST] mydb1;
    
    修改数据库编码:ALTER DATABASE mydb1 CHARACTER SET utf8;
    
  • DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);

    插入数据
    INSERT INTO 表名(列名,列名,....);
    INSERT INTO 表名(列名,列名,....)VALUES(,,....); 列名与值一一对应
    修改数据
    UPDATE 表名 SET  列名 =, 列名=,.....[WHERE 条件];
    删除数据
    DELETE FROM 表名 [WHERE 条件];  
    假如十条记录 用delect 删除完后 再添加记录的话  会在原来的记录号的基础上 增加
    TRUNCATE TABLE 表名;
    truncate 则不会  truncate是先清空表 再添加表结构
    
  • DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;

    3创建用户
    CREATE USER '用户名'@地址 IDENTIFIED BY '密码';
    CREATE USER '用户名'@localhost IDENTIFIED BY '密码';
    CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
    给用户授权
    GRANT 权限1,.....,权限n ON 数据库.* TO '用户名'@地址;
    撤销授权
    REVOKE 权限1,......,权限n ON 数据库.* TO '用户名'@地址;
    查看用户权限
    SHOW GRANTS FOR '用户名'@地址;
    删除用户
    DROP USER '用户名'@地址;
    修改用户密码
    USE MYSQL;
    ALTER USER '用户名'@地址 IDENTIFIED BY '新密码';
    
  • DQL(Data Query Language):数据查询语言,用来查询记录(数据)

  • select 列名[distinct] from 表名 where 条件  [group by
                                分组字段 [having 分组后的行条件]]
                                [order by 排序字段]
                                [limit 起始行,行数(结果限定)];
    基础查询
    select * from 表名;
    select 列名,.......from 表名;
    条件查询
    = ,!=<> , < , <= , > , >=
    between .... and
    in (字符集)
    is null
    not/and/or
    模糊查询
    select 字段 from 表名 where 某字段 like 条件
    1.%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个(%)表示。
    2._:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句。
    聚合函数(不可与group by 连用)
    count():统计指定列不为null的记录行数
    max():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算。
    min():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算。
    sum():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0avg():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0
    多表连接查询
    表分为内连接和外连接

    最主要的区别:内连接仅选出两张表中互相匹配的记录,外连接会选出其他不匹配的记录

    外连接分为左连接和右连接

    左连接:包含左边表中所有的记录,右边表中没有匹配的记录显示为null。

    右连接:包含右边表中所有的记录,左边表中没有匹配的记录显示为null

数据类型

常用类型:

  • 整数类型
    bigint:占8个字节,相当于C#中long
    int:占4个字节,相当于C#中的int
    smallint:占2个字节,相当于C#中的short
    tinyint:占1个字节,相当于C#中的byte
  1. 精确数字类型
    decimal:固定精确度 -1038–1038-1
    numeric:功能等同于decimal
    写法:decimal(整数,小数),numeric(整数,小数)
    默认:整数18位,小数0位
  2. 近似数字(浮点)类型
    float[(n)]:表示范围:1.79乘以10的308次幂
    n:表示精度,有效值1-53之间
    real:知道即可
  3. 文本类型,在SQL中文本类型赋值必须使用单引号
    char:固定长度的非unicode字符数据,最大长度是8000个字符
    varchar:可变长度的非unicode字符数据,最大长度是8000个字符
    text:存储长文本信息,最大长度为2^32-1个字符
    nchar:固定长度的unicode字符数据,最大长度是4000个字符
    nvarchar:可变长度的unicode字符数据,最大长度是4000个字符
    ntext:存储可变的长文本信息,最大长度为2^30-1个字符
    固定:当声明数据类型设置了固定长度,那么这个数据类型赋值的字符长度绝对不能超过这个规定,如果赋值的数据长度不足规定的长度,使用空格字符填充
    可变:如果赋值数据长度不足,则自动缩短为实际赋值数据长度,内存空间按照指定大小,如果超过指定长度则依然按照实际赋值数据长度,内存空间跟着改变
    类型长度最终影响的是内存空间
  4. 日期时间类型
    datetime:允许范围1753-1-1至9999-1-1
    smalldatetime:允许范围1900-1-1至2079-1-1
    时间精度不同:datetime精确到3/100秒;smalldatetime精确到1分钟
    赋值格式:以字符串格式填写
    分隔符数字方式:2020-02-18或2020/02/18或02/18/2020
    纯数字格式:02182020 月日年
    英文数字方式:Feb 18,2020
    不管哪种方式给日期时间类型赋值必须用单引号(’ ')
    一月 Jan.。二月 Feb.。三月 Mar.。四月 Apr.。五月 May.。六月 Jun.。七月 Jul.。八月 Aug.。九月 Sept.。十月 Oct.。十一月 Nov.。十二月 Dec.。
  5. 位类型
    bit:表示“是/否”类型数据。(0/1,true/false)
  6. 货币类型
    money:货币数-263-263-1之间,精确到货币单位的千分之一
    smallmoney:货币数介于-214748.3648 – 214748.3648之间,精确到货币单位的百分之一
  7. 二进制类型
    binary:固定长度的二进制数据,最大长度为8000个字节
    vbinary:可变长度的二进制数据,最大长度为8000个字节
    image:可变长度的二进制数据,最大长度2^31个字节,应用场合:可用来存储图片类型

操作表

//创建表
CREATE TABLE 表名(
列名 列类型,
列名 列类型,
.....);

//查看表结构
DESC 表名;

//删除表
DROP TABLE 表名;

//修改表
//添加列
ALTER TABLE 表名 ADD (列名 列类型,.....);
//修改列的数据类型
ALTER TABLE 表名 MODIFY 列名 列类型;
//修改列名
ALTER TABLE 表名 CHANGE 列名 修改后的列名 列类型;
//删除列
ALTER TABLE 表名 DROP 列名
//修改表名称
ALTER TABLE 表名 RENAME TO 新表名

连接查询-内连接

隐式内连接

SELECT 字段列表 FROM1,表2 WHERE 条件...;

显示内连接

SELECT 字段列表 FROM1 [INNER] JOIN2 ON 连接条件...;

内连接查询的是两张表交集的部分

连接查询-外连接

左外连接

SELECT 字段列表 FROM1 LEFT[OUTER] JOIN2 ON 条件...

右外连接

SELECT 字段列表 FROM1  RIGHT[OUTER] JOIN2 ON 条件...;

相当于查询表2(右表)的所有数据包含 表1 和表2交集部分的数据。

连接查询-自连接

SELECT 字段列表 FROM 表A 别名 JOIN 表A 别名 ON  条件...;

联合查询-UNION, UNION ALL

对于union 查询,就是把多次查询的结果合并起来,形成一个新的查询结果集

SELECT 字段列表 FROM...
UNION [ALL]
SELECT 字段列表 FROM...;

union all 是将两次查询的结果直接合并 union是将两次查询的结果合并之后去重复

对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。

多表查询-子查询

概念:SQL语句中嵌套SELECE语句,称为嵌套查询,又称子查询

子查询外部的语句可以是 INSERT / UPDATE /DELETE/SELECT的任何一个

根据子查询结果不同,分为:

  • 标量子查询(子查询结果为单个值) 子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。常用的操作符:= <> > >= < <=

  • 列子查询(子查询结果为一列)子查询返回的结果是一列(可以是多行)这种子查询称为列子查询。常用的操作符:IN,NOT IN,ANY,SOME,ALL

  • 在这里插入图片描述

  • 行子查询(子查询结果为一行)子查询返回的结果是一行(可以是多列),这种子查询称为行子查询 常用的操作符:= , <> , IN , NOT IN

  • 表子查询(子查询结果为多行查询)子查询返回的结果是多行多列,这种子查询称为表子查询 常用的操作符:IN

根据子查询位置,分为:WHERE之后,FROM之后,SELECT之后。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值