MySQl中的基础

SQL 基础

SQL主要可以分为3个大类别, DDL、 DML、DCL。

  • DDL, 主要是用来控制各种对象,比如创建表、创建索引、定义列等等。
  • DML, 是用来控制数据,就是最常见的CURD,都是属与DML。
  • DCL, 主要是用来控制用户的访问权限和安全级别。
DDL
对库操作

创建库 create database dbname

查看库show databases

查看库后可以切换到对应的库usr dbname

查看库中全部的表 show tables

删除库 drop database dbname

对表操作
 创建表
 create table tablename (
  列名1 类型1 约束条件1,
  列名2 类型2 约束条件2,
  列名3 类型3 约束条件3,
 	...
 )

查看表结构desc tablename

删除表drop table tablename

对字段操作

修改表字段类型 alter table 表名 modify 列名 新类型

添加表字段类型 alter table 表名 add 新列名 新类型

删除表字段类型 alter table 表名 drop 列名

删除表字段类型 alter table 表名 drop 列名

修改表字段名字 alter table 表名 chang 原列名 新列名 [新类型]

修改表名字 alter table 原表名 rname 原列名

DML
插入记录

写好字段,对应着值进行插入
insert into 表名 (字段1, 字段2, 字段3)values (值1, 值2, 值3)

也可以不写字段名称,但是要按顺序输入
insert into 表名 values (值1, 值2, 值3)

还可以一次插入多行
insert into 表名 (字段1, 字段2, 字段3)values (值1, 值2, 值3), (值1, 值2, 值3), (值1, 值2, 值3);

更改记录

update 表名 set 字段1=新值1, 字段2=新值2 [where 更新条件]

删除记录

删除一个表 delete from 表名 [where 删除筛选条件]

删除多个表 delete from 表名1,表名2 [where 删除筛选条件]

查询记录

这一块是主要的一块, 也是较为复杂的一块

最简单的:

select  * 
from 表名

去除重复的记录

select distinct * 
from 表名

条件查询记录:

select distinct * 
from 表名
where 条件

排序查询记录:

select distinct * 
from 表名
order by 根据排序的字段 [desc 加上desc就是降序]
limit 偏移量,显示条数

汇总查询记录:

  1. 就是对数据进行分组,
  2. group by 根据字段分组 当这个字段的值一样时,就会分到同一个组,
  3. 当group by多个字段时,要这多个都相同时才会分为一个组
  4. where 在分组之前执行, having在分组后执行。 这两个都是筛选
select * 
from 表名
group by 要分类聚合的字段1,要分类聚合的字段2having 对聚合后的数据进行筛选

表连接案例

子查询:

子查询就是,判断判断用到了另外一个结果。

子查询案例

联合查询:
DCL

用来设置用户访问权限,一般的开发人员用的比较少,这里先不提,感兴趣的可以自己去搜一搜。

MySql 数据类型以及我们该选择什么数据类型

数值类型

在这里插入图片描述

  • 整数类型右:tinyint、 smallint、mediumint、int、bigint、 这5个, 这五个的访问如上图所示。可以根据自己的情况来选择,
  • 如果超过了返回就会报 “Out if range” 错误,
  • mysql还支持在后面的小括号里面指定范围,但是其实设置了并没有什么用。
    小数
  • 小数分为两种,浮点数和定点数
  • 浮点数为: float, double。
  • 定点数: DEC(M/D), DECIMAL(M,D)。
  • 浮点数和定点数都可以设置范围, M代表一共可以储存多少位,D代表保留的小数位数。
  • 浮点数如果不设置就会显示实际的位数, 而decimal不设置就默认位decimal(10,0)。 不保留小数位
  • 浮点数运算会出现误差,而定点数不会,当要求无误差时,建议实际定点数。
时间类型

在这里插入图片描述

每个类型都有其范围,如果超出这个范围,就会报错,并以零值进行存储。

DATETIME
 DATETIME 用于表示 年月日 时分秒,是 DATE 和 TIME 的组合,并且记录的年份(见上表)比较长久。如果实际应用中有这样的需求,就可以使用 DATETIME 类型。
TIMESTAMP
  • TIMESTAMP 用于表示 年月日 时分秒,但是记录的年份(见上表)比较短暂。
  • TIMESTAMP 和时区相关,更能反映当前时间。当插入日期时,会先转换为本地时区后再存放;当查询日期时,会将日期转换为本地时区后再显示。所以不同时区的人看到的同一时间是 不一样的。
  • 表中的第一个 TIMESTAMP 列自动设置为系统时间(CURRENT_TIMESTAMP)。当插入或更新一行,但没有明确给 TIMESTAMP 列赋值,也会自动设置为当前系统时间。如果表中有第二个 TIMESTAMP 列,则默认值设置为0000-00-00 00:00:00。
  • TIMESTAMP 的属性受 Mysql 版本和服务器 SQLMode 的影响较大。
  • 如果记录的日期需要让不同时区的人使用,最好使用 TIMESTAMP。
DATE
DATE 用于表示 年月日,如果实际应用值需要保存 年月日 就可以使用 DATE。
TIME
TIME 用于表示 时分秒,如果实际应用值需要保存 时分秒 就可以使用 TIME。
YEAR
YEAR 用于表示 年份,YEAR 有 2 位(最好使用4位)和 4 位格式的年。 默认是4位。如果实际应用只保存年份,那么用 1 bytes 保存 YEAR 类型完全可以。不但能够节约存储空间,还能提高表的操作效率。

字符串类型

在这里插入图片描述

CHAR和VARCHAR类型

都用于存储较短的字符串,二者主要的区别为存储方式不同,CHAR的长度固定,VARCHAR的长度可变,检索时,CHAR删除尾部的空格,VARCHAR则保留尾部的空格。

BINARY和VARBINARY类型

和char,varchar基本一致,不同的是以二进制保存字符串,

ENUM类型

枚举类型,它的值范围需要在创建表时通过枚举方式显式指定,对于1-255个成员的枚举需要1个字节存储,对于255-65535个成员,需要2个字节来存储。最多允许有65535个成员。ENUM类型忽略大小写,当插入值不在枚举的范围内时,不会报错,会将第一个值插入。

  • 枚举就是你只能在设定的几个值中选择一
SET类型
  • 也是一个字符串对象,里面可以包好64个成员,根据成员的不同,存储也不同
  • 1-8个成员,占1个字节,9-16个个成员的集合,占2个字节,17-24成员的集合,占3个字节,25-32成员的集合,占4个字节,33-64成员的集合,占8个字节
  • SET类型可以一个插入多个成员,ENUM类型一次只能插入一个成员。
  • SET类型可以从允许集合中选择1-多个元素进行组合。所以对于输入的值只要是允许范围内的,都可以正确注入到SET类型中,对于重复的成员,则只取一次。

运算符

这里我只写几个特别的

算数运算符:

/,DIV 除法,返回商
%,MOD 除法,返回余数

比较运算符

<> 或 != 不等于
<=> NULL的安全等于

这个与=类似,不同的在于即使操作的值为NULL也可以正确比较

BETWEEN 存在于指定范围

在范围内返回1,否则返回0

IN 存在于指定集合
IS NULL 为NULL
IS NOT NULL 不为NULL
LIKE 统配符匹配
REGEXP 或 RLIKE 正则表达式匹配

逻辑运算符

NOT或! 非
AND或&& 与
OR或|| 或
XOR 异或

当任意一个数为NULL时,返回值为NULL; 对于非NULL的操作数,如果两个向异返回1,否则返回0

位运算符

& 与
| 或
^ 异或
~ 取反
>> 右移
<< 左移

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值