MySQL学习笔记(1-1)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL学习笔记(1-1)

列的CRUD操作


列的类型

列的类型 分为如下:数字类型
整数:tinyint、smallint、mediumint、int、bigint
浮点数:float、double、real、decimal
日期和时间:date、time、datetime、timestamp、year
字符串类型
字符串:char、varchar
文本:tinytext、text、mediumtext、longtext
二进制(可用来存储图片、音乐等):tinyblob、blob、mediumblob、longblob
对比Java中的类型:列的类型
java                mysql
byte                 TinyIntshort                SMALLINT
intintfloatfloatdoubledoubleString              char(长度)/varchar(长度)char 和varchar:区别主要体现在存储字符时候,如果是char存储类型,不足的字符会以空格存储,varchar则不会
booleanbooleanDatedate: YYYY-MM-DD 年//time: hh:mm:ss 时::datetime:timestamp:最大取值是2038年.
text: 大文本类型
blob: 二进制大对象类型


列的约束


  • 主键约束: primary key,不能重复,不能为空 通常用在编号ID auto_increment(自增)
  • 唯一约束: unique,不能重复,但是可以为空
  • 非空约束: not null,不能为空
  • 默认约束:default,设置字段的默认值
  • 自增约束:auto_increment,约束字段的值为自动增长
  • 外键约束:foreign key,约束字段为表的外键


设置外键约束

--建表时createtable table_name(    列名 列的类型 列的约束,
    列名 列的类型 列的约束
    ......
    constraint 外键约束名 foreign key(属性名) references 表名(外表的属性))


添加列

altertable 表名 add 列名 列的类型 列的约束;--在表的所有字段第一个位置添加字段altertable 表名 add 列名 列的类型 列的约束 first;--在表的指定字段添加字段altertable 表名 add 列名 列的类型 列的约束 after 列名;


修改列

--修改列的类型altertable 表名 modify 列名 列的类型;--修改某个字段的顺序altertable 表名 modify 列名 列的类型 first|after 列名;--修改列名altertable 表名 change 旧列名 新列名 列的类型 列的约束;


删除列:

altertable 表名 drop 列名;


索引

由于数据存储在数据库表中,所以索引是建立在数据库表对象上的,由表中的一个字段或者多个字段生成的键组成。这些键存储在数据结构中,通过MySQL快速有效地查找键值相关联的字段。根据索引的存储类型,可以将索引分为B型数索引(BTREE)和哈希索引(HASH)。


注意:InnoDB和MyISAM存储引擎支持BTREE类型索引,MEMORY存储引擎支持HSAH类型索引。


MySQL支持六种索引:普通索引、唯一索引、全文索引、单列索引、多列索引和空间索引。


创建索引


普通索引

1.创建表时创建普通索引

createtable table_name(    列名 列的类型 [列的约束],    列名 列的类型 [列的约束],    index|key [索引名](属性名 [长度][asc|desc1]))


2.在已经存在的表上创建普通索引

create index 索引名 on 表名(属性名 [长度][asc|desc]);


3.通过SQL语句ALTER TABLE 创建普通索引

altertable table_name add index|key 索引名(属性名 [长度][asc|desc]);


唯一索引

1.创建表时创建唯一索引

createtable table_name(    列名 列的类型 列的约束,
    列名 列的类型 列的约束,
    unique index|key [索引名](属性名 [长度][asc|desc]))


2.在已经存在的表中创建唯一索引

create unique index 索引名 on 表名(属性名 [长度][asc|desc]);


3.通过SQL语句ALTER TABLE创建唯一索引

altertable table_name add  unique index|key 索引名(属性名 [长度][asc|desc]);


全文索引

1.创建表时创建全文索引

createtable table_name(    列名 列的类型 [列的约束],    列名 列的类型 [列的约束]    fulltext index|key [索引名](属性名 [长度][asc|desc]))


2.在已经存在的表上创建全文索引

create fulltext index 索引名 on 表名(属性名 [长度][asc|desc]);


3.通过SQL语句ALTER TABLE 创建全文索引

altertable table_name add fulltext index|key 索引名(属性名 [长度][asc|desc]);


多列索引

1.创建表时创建全文索引

createtable table_name(    列名 列的类型 [列的约束],    列名 列的类型 [列的约束],    .....
    index|key [索引名](属性名 [长度][asc|desc],                       属性名 [长度][asc|desc]))


2.在已经存在的表上创建全文索引

createtable table_name on 表名(属性名 [长度][asc|desc],                                属性名 [长度][asc|desc]);


3.通过SQL语句ALTER TABLE 创建全文索引

altertable table_name add index|key 索引名(属性名 [长度][asc|desc], 属性名 [长度][asc|desc]);


删除索引

drop index index_name on table_name;


视图


未来提高复杂SQL语句的复用性和表操作的安全性,MySQL数据库管理系统提供了视图特性。所谓视图,本质上是一种虚拟表,其内容与真实的表相似,包含一些列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值形式存在。行和列数据来自定义视图的查询所引用的基本表,并且再具体引用视图时动态生成。


create view view_name as 查询语句;


查看视图

show table status语句查看视图详细信息

show table status [form db_name][like'pattern'];或者
show table status form db_name \G


查看视图定义信息

show create view view_name;或者
show create view view_name \G


DESCRIBE|DESC查看视图设计信息

describe |desc view_name;


删除视图

删除一个或者多个视图

drop view view_name1 [,view_name2]....


修改视图

alter view view_name as 查询语句;


触发器的操作


触发器(TRIGGER)是MySQL的数据库对象之一,该对象与编程语言中的很函数类似,都需要声明、执行等,触发器是由时间出发激活的从而实现执行的。


创建触发器

create trigger trigger_name 
    before | after trigger_event
on table_name for each row trigger_stmt;


  • trigger_event参数表示触发器事件,即触发器执行条件,包含delete、insert和update语句
  • table_name参数表示触发事件操作表的名字
  • for each row参数表示任何一条记录上的操作都满足触发器事件都会触发该触发器
  • trigger_stmt参数表示激活触发器后被执行的语句


创建包含多条执行语句的触发器

create trigger trigger_name
    before | after trigger_event
on table_name for each row 
begin                trigger_stmt1;                trigger_stmt2;            end
            $$
            delimiter;


查看触发器

show triggers \G


执行SQL语句SELECT,查看系统表triggers中的所有记录

select*from triggers \G


插叙指定触发器的详细信息

select*from triggers where trigger_name='触发器的名称' \G


删除触发器

drop trigger trigger_name;


数据的操作


插入数据记录


插入单条数据

insertinto table_name(field1,field2...)values(value1,value2...);


插入多条数据

insertinto table_name(field1,field2...)values(value1,value2...),(value1,value2...),(value1,value2...);


插入查询结果

insertinto table_name1(field1,field2...)select(field1,field2...)from table_name2
where ...;


更新数据

更新特定数据

update table_name
set field1=value2,        field1=value2
where condition;


  • condition参数指定更新满足条件的特定数据


更新所有数据

update table_name
set field1=value2,        field1=value2;


删除数据记录

删除特定数据记录

deletefrom table_name where condition;


删除所有数据

deletefrom table_name;


数据查询


简单查询

select*from table_name;


别名查询

select field1 as 列别名,field2 as 列别名
fromtable table_name as 表别名;或者
select field1  列别名,field2  列别名
fromtable table_name  表别名;


去重查询

selectdistinct*from table_name;


运算查询


四则运算:

+-*/或者div、%或者mod


关系运算:

><=!=或者<>>=<=


逻辑运算符:

and或者&&、or或者||,or、not或者!

其他运算符

between...and...
notbetween...and...
isnullisnotnullin(value1,value2,value3...)notin(value1,value2,value3...)

模糊查询——like、not like

  • %匹配0到多个字符
  • _匹配单个字符


排序查询——order by

单个字段排序

select*from table_name orderby field desc;


多个字段排序

select*from table_name orderby field1 desc                               field2 asc;


  • 首先按照第一个字段进行排序,如果遇到值相同的字段则会按照第二个字段进行排序


限制数据记录查询数量——limit a,b

select*from table_name where condition 
limit offset_start,row_count;


  • offset_start参数不指定数据,则默认为0,显示row_count条数据
  • offset_start参数指定数据,表示offset_start+1开始,显示row_count条数据


聚合函数查询


  • count():查询表中数据记录的条数
  • avg():计算字段值的平均值
  • sum():求计算字段的总和
  • max():求计算字段的最大值
  • min():求计算字段的最小值


注意:如果所操作的表没有任何数据记录,则count()函数返回数据为0,其他则返回null。


分组查询——group by


实现多个字段分组查询

select*from group_concat(field),function(field)from table_name
where condition
groupby field1,field2...;


分组数据查询——实现HAVING子句限定分组查询

select function(field)from table_name
where condition
groupby field1,field2...
having condition;


SQL编写顺序

select ... from ... where ... groupby ... having ... orderby;


  • 先from去查询表
  • 根据where的条件过滤
  • group by分组
  • having是对分组后的数据过滤
  • select查询
  • 最后order by排序


多表数据记录查询


交叉查询

select*from table_name1 cross join table_name2;或者
select*from table_name1,table_name2;


内连接查询


显示内连接

select*from table_name1 inner join table_name2 on table_name1.field=table_name2.fieldwhere condition;


隐式内连接

select*from table_name1,table_name2 where condition;


外连接查询

左外连接

select*from table_name1 left outer join table_name2 on table_name.field1=table.name2.field2where 条件;


右外连接

select*from table_name1 right outer join table_name2 on table_name.field1=table.name2.field2where 条件;


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
存储 关系型数据库 MySQL
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
Linux C/C++ 开发(学习笔记八):Mysql数据库图片存储
136 0
|
5月前
|
关系型数据库 MySQL 数据库
Linux C/C++ 开发(学习笔记七):Mysql数据库C/C++编程实现 插入/读取/删除
Linux C/C++ 开发(学习笔记七):Mysql数据库C/C++编程实现 插入/读取/删除
110 0
|
4月前
|
SQL Oracle 关系型数据库
MySQL学习笔记
MySQL学习笔记
29 0
|
2月前
|
SQL druid Java
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
49 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(下)
|
2月前
|
SQL Java 关系型数据库
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)
67 3
Java数据库部分(MySQL+JDBC)(二、JDBC超详细学习笔记)(上)
|
2月前
|
SQL 关系型数据库 MySQL
MySQL学习笔记
这篇文章是一份关于MySQL数据库操作的学习笔记,涵盖了数据库的终端操作、数据类型、建表约束、事务处理以及SQL的连接查询等基础知识点。
|
2月前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(下)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
31 6
|
2月前
|
存储 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(上)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
33 4
|
2月前
|
SQL 关系型数据库 MySQL
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)(中)
Java数据库部分(MySQL+JDBC)(一、MySQL超详细学习笔记)
25 3
|
5月前
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(1)——表中数据的整删改查
简简单单 My SQL 学习笔记(1)——表中数据的整删改查
下一篇
无影云桌面