MySQL基础篇

基础篇我们需要学会什么知识呢

主要有以下几部分:MySQL概述,SQl,函数,约束,多表查询,事务。

我们要通过以上几个内容为切入点,由浅及深地了解认识并运用Mysql。

数据库相关概念

数据库(DataBase简称DB):存储数据的仓库,数据是有组织的进行存储。

数据库管理系统(DataBase Management System简称DBMS):操作和管理数据库的大型软件。

SQL(Structured Query Language):操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。

主流的关系型数据库管理系统

在了解MySQL之前我们先了解一下什么关系型数据库。

关系型数据库(RDBMS)

概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。

特点:

  1. 使用表存储数据,格式统一,便于维护。

2.使用SQL语言操作,标准统一,使用方便。

mysql概念:

mysql是一个关系型数据库管理系统关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库中,这样就增加了速度并提高了灵活性。

SQL部分

SQL通用语法:

  1. SQL语句可以单行或多行书写,以分号结尾。

  1. SQL语句可以使用空格/缩进来增强语句的可读性。

  1. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。

  1. 注释:

  1. 单行注释:--注释内容或#注释内容(MySQL特有)

  1. 多行注释:/*注释内容*/

SQL分类:

DDL-数据库操作:

查询:

查询所有数据库

show databases;

查询当前数据库

select database();

创建:

create database [if no exists] 数据库名 [defaul charset 字符集] [collate 排序规则];此处的字符集我们不推荐使用utf8,而是使用utf8mb4,因为数据库中有的数据可能是四个字节。

删除:

drop database [if exists] 数据库名;

使用:

use 数据库名;

DDL-表操作-查询:

查询当前数据库所有表

show tables;

查询表结构

desc 表名;

查询指定表的建表语句

show create table 表名;

DDL-表操作-创建:

create table 表名(

字段1 字段1类型[comment 字段1注释]

字段2 字段2类型[comment 字段2注释]

字段3 字段3类型[comment 字段3注释]

...

字段n 字段n类型[comment 字段n注释]

);[comment 表注释]

例子

DDL-表操作-修改:

添加字段

alter table 表名 add 字段名 类型(长度) [commen 注释] [约束];

修改字段的数据类型

alter table 表名 modify 字段名 新数据类型(长度);

修改字段名和字段类型

alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];

alter table emp change nickname username varchar(30) comment '用户名';

删除字段:

alter table 表名 drop 字段名;

alter table emp drop username;

修改表名:

alter table 表名 rename to 新表名;

alter table emp rename to employee;

DDL-表操作-删除:

删除表:

drop table [if exists] 表名;

删除指定表,并重建该表:

truncate table 表名;

注意 :在删除表的时候,表中所有数据都会被删除

DML:

DML是数据操作语言,用来对数据库表中的数据记录进行增删改操作。

添加数据(insert)

修改数据(updata)

删除数据(delete)

DML-添加数据

  1. 给指定字段添加数据:

insert into 表名 (字段名1,字段名2,...) values (值1,值2...);

  1. 给全部字段添加数据:

insert into 表名 values (值1,值2,...);

  1. 批量添加数据:

  1. insert into 表名 (字段名1,字段名2,....) values (值1,值2,...),(值1,值2,...),(值1,值2,...);

  1. insert into 表名 values (值1,值2,...),(值1,值2,...),(值1,值2,...);

DML-修改数据

updata 表名 set 字段名1=值1,字段名2=值2,....[where 条件];

DML-删除数据

delete from 表名 [where 条件];

DQL:

DQl是数据查询语言,用来查询数据库中表的记录。

查询关键字:select

DQL-基本查询:
  1. 查询多个字段:

select 字段1,字段2,字段3,... from 表名;

select * from 表名;

  1. 设置别名:

select 字段1[as 别名1],字段2 [as 别名2], ... from 表名。

  1. 去除重复记录:

select distinct 字段列表 from 表名。

DQL-条件查询:
  1. 语法

select 字段列表 from 表名 where 条件列表;

DQL-聚合函数:

1.介绍:

将一列数据当做一个整体,进行纵向运算。

2.常见的聚合函数

  1. 语法:

select 聚合函数(字段列表) from 表名;

注意所有的null值不参与聚合函数的运算

DQL-分组查询:
  1. 语法:

select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件];

where与having的区别:

执行时机不同,where是分组之前进行过滤,不满足where条件,不参与分组,而having是分组之后对结果进行过滤。

判断条件不同:where不能对聚合函数进行判断,而having可以。

注意:

执行顺序:where> 聚合函数 > having

分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

DQL-排序查询:

1语法

select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;

2排序方式:

asc : 升序(默认值)

desc: 降序

注意:如果是多字段排序,当第一个字段相同时,才会根据第二个字段进行排序。

DQL-分页查询:
  1. 语法;

select 字段列表 from 表名 limit 起始索引,查询记录数;

注意

起始索引从0开始,起始索引 = (查询页码 - 1)*每页显示记录数。

分页查询是数据库的方言(每个数据库系统略有不同),MySQL是limit。

如果查询的是第一页数据,起始索引可以省略,直接写limit 10;

DQL-执行顺序:

DCL:

DCL是用来管理数据库用户、控制数据库的访问权限。

DCL-管理用户:
  1. 查询用户:

use mysql;

select * from user;

  1. 创建用户:

create user '用户名@主机名' identified by '密码';

  1. 修改用户密码

alter user ‘用户名@主机名’ identified with mysql_native_password by '密码';

4,删除用户

drop user '用户名@主机名'

实例如下:

DCL-控制权限:
  1. 查询权限

show grants for '用户名@主机名';

  1. 授予权限

grant 权限列表 on 数据库名.表名 to '用户名@主机名 ';

  1. 撤销权限

revoke 权限列表 on 数据库名.表名 from '用户名@主机名';

函数

函数的定义:是指一段可以直接被另一段程序调用的程序或代码;

字符串函数:

SELECT 函数(参数);

小案例

数值函数:

小案例

日期函数:

求取两个日期的差数

datediff()求取两个日期时间差数时 是用第一个时间减去第二个时间

小案例:

流程函数:

小案例

小案例

约束:

概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。

目的:保证表中数据的正确性、有效性、完整性。

案例:

外键约束:

外键用来让两张表的数据建立连接,从而保证数据的一致性和完整性。

有外键的叫做子表,被连接的叫做父表。

多表查询概述:

1.一对多(多对一),例如员工和部门的关系,一个员工只能属于一个部门,一个部门可以有多个员工,则把部门表作为父表,员工表作为子表。员工表设置外键连接部门表的主键。

2.多对多,例如学生和课程的关系,一个学生可以选修多门课程,一个课程也可以被多名学生选修,此时我们需要建立一个中间表,中间表设置两个外键,分别对应学生表的主键和课程表的主键。用一张中间表把它们连接起来。

3.一对一,例如用户与用户的详细关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详细信息放在另一张表中,以提升操作效率。如何实现? 在任意一张表中加入外键,关联另一方的主键,并设置外键为唯一的(unique).

笛卡尔积:笛卡尔积是指在数学中,两个集合A集合和B集合的所有组合情况(多表查询时需要消除无效的笛卡尔积)。

多表查询分类:

连接查询——内连接

连接查询——外连接

语法:

连接查询——自连接:

语法:

联合查询——union,union all

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

unionall是直接将查询的结果合并,union会将查询的结果去重。

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

子查询:

概念:对于sql语句中嵌套select语句,称为嵌套查询,又称为子查询。

标量子查询:子查询返回的结果是单个值(数字,字符串,日期),最简单的形式,这种子查询称为标量子查询

常用的操作符号: =、 <> 、 > 、 >=、 < 、<=

列子查询:子查询返回的结果是一列(可以是多行),这种子查询称为列子查询

常用的操作符: in, not in, any, some, all.

行子查询:子查询返回的结果是一行(可以是多列),这种子查询称为行子查询

常用的操作符: =、<>、in 、 not in

(select salary , managerid from emp where name = '张无忌')这个叫做行子查询并非上面的全部语句,不能混淆了概念。 因为它返回的结果就是一行多列。

表子查询:子查询返回的结果是多行多列,这种子查询称为表子查询。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在MySQL数据库中存储圆形要素,需要使用空间数据类型和空间函数。 MySQL支持几种空间数据类型,包括POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON和GEOMETRYCOLLECTION。其中,圆形可以用POLYGON类型来表示。一个简单的圆形可以表示为一个由多边形组成的正多边形,多边形的边数越多,表示的圆形越接近圆形。 例如,以下代码创建了一个圆形的多边形: ``` SET @center = GeomFromText('POINT(116.397428 39.90923)'); SET @radius = 1000; SET @poly = CONCAT('POLYGON((', X(@center) + @radius * COS(RADIANS(45)),' ', Y(@center) + @radius * SIN(RADIANS(45)),',', X(@center) + @radius * COS(RADIANS(135)),' ', Y(@center) + @radius * SIN(RADIANS(135)),',', X(@center) + @radius * COS(RADIANS(225)),' ', Y(@center) + @radius * SIN(RADIANS(225)),',', X(@center) + @radius * COS(RADIANS(315)),' ', Y(@center) + @radius * SIN(RADIANS(315)),',', X(@center) + @radius * COS(RADIANS(45)),' ', Y(@center) + @radius * SIN(RADIANS(45)),'))'); ``` 在MySQL中,可以使用空间函数进行圆形的操作,例如计算两个圆形之间的距离、判断一个点是否在圆形内等。 以下是一个例子,计算一个点是否在圆形内: ``` SET @center = GeomFromText('POINT(116.397428 39.90923)'); SET @radius = 1000; SET @point = GeomFromText('POINT(116.383668 39.902188)'); SELECT Contains( GeomFromText(CONCAT('POLYGON((', X(@center) + @radius * COS(RADIANS(45)),' ', Y(@center) + @radius * SIN(RADIANS(45)),',', X(@center) + @radius * COS(RADIANS(135)),' ', Y(@center) + @radius * SIN(RADIANS(135)),',', X(@center) + @radius * COS(RADIANS(225)),' ', Y(@center) + @radius * SIN(RADIANS(225)),',', X(@center) + @radius * COS(RADIANS(315)),' ', Y(@center) + @radius * SIN(RADIANS(315)),',', X(@center) + @radius * COS(RADIANS(45)),' ', Y(@center) + @radius * SIN(RADIANS(45)),' ))'), @point ); ``` 如果返回值为1,则表示点在圆形内,否则不在。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值