2021-07-26~2021-07-30总结(MySQL-基本语句)

工作总结

工作内容

本周的工作内容是与客户配合联调,完成项目最后的交付工作。那么就接着上次谈的MySQL内容继续进行MySQL基本操作的回顾。

技术探索

1.数据库基本操作
1.1 mysql数据库基本操作
1.1.1 创建数据库

模板:CREATE DATABASE 数据库名

CREATE DATABASE localTest;
1.1.2 查询已创建的数据库基本信息

模板:SHOW CREATE DATABASE 数据库名

SHOW CREATE DATABASE localTest;
1.1.3 查询所在连接的所有数据库

模板:SHOW DATABASES

SHOW DATABASES;
1.1.4 修改数据库的字符集

模板:ALTER DATABASE 数据库名 CHARACTER SET 字符集

ALTER DATABASE localTest CHARACTER set gbk;
1.1.5 切换当前使用的数据库

模板:USE 数据库名

USE localTest;
总结
#创建数据库  CREATE DATABASE 数据库名
CREATE DATABASE localTest;
#查询该数据库的基本信息  SHOW CREATE DATABASE 数据库名
SHOW CREATE DATABASE localTest;
#查询所在连接的所有数据库
SHOW DATABASES;
#修改数据库的字符集
ALTER DATABASE localTest CHARACTER set gbk;
#切换所使用数据库
USE localTest;
#查看当前数据库使用情况
SELECT DATABASE();
1.2 mysql数据库表基本操作
1.2.1 创建数据库表

模板:
create table 表名(
字段1 字段类型,
字段2 字段类型,

字段n 字段类型
);

CREATE DATABASE localTest;
1.2.2 修改数据库表
  1. 修改数据库表名
    模板:alter table 原表名 rename to 现表名;
alter table student rename to stu;
  1. 修改字段名
    模板:alter table 表名 change 需修改字段 修改后字段 类型大小;
alter table student change name sname varchar(10);
  1. 修改字段类型
    模板:alter table 表名 modify 字段名 类型
alter table student modify sname int;

3.添加字段
模板:alter table 表名 add 字段名 类型

alter table student add address varchar(50);

4.删除字段
模板:alter table 表名 drop 字段名

alter table student drop address
1.2.3 删除数据库表

模板:drop table 表名

drop table student ;
总结
#创建数据库表
CREATE TABLE student(
id INT,
`name` VARCHAR(32),
age INT
);
#展示数据库中的表
show tables;
#查询所查询表的基本信息
show create table student;
#查看表字段信息
DESC student;
#修改数据库表的表名
alter table student rename to stu;
#修改数据库表字段
alter table student change name sname varchar(10);
#修改字段类型
ALTER TABLE student MODIFY name VARCHAR(20);
#添加字段
alter table student add address varchar(50);
#删除字段
alter table student drop address;
#删除表
drop table student;
1.3 mysql数据库表约束

为防止错误的数据被插入到数据表,MySQL中定义了一些维护数据库完整性的规则;这些规则常称为表的约束

约束条件说明
PRIMARY KEY主键约束用于唯一标识对应的记录
FOREIGN KEY外键约束
NOT NULL非空约束
DEFAULT默认值约束,用于设置字段的默认值
UNIQUE唯一性约束
1.3.1主键约束

主键约束(PRIMARY KEY)是指同一表中的该字段数据应该具有唯一性,被标记主键的字段在表中唯一且不为空。
模板1:字段名 数据类型 PRIMARY KEY
模板2:
create table 表名(
字段名 类型

primary key(主键字段名)
);

1.3.2外键约束

外键约束(FOREIGN KEY)用于多张表之间的关联。
新建模板:CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段)
修改模板:ALTER TABLE 从表名 ADD CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段)
删除模板:alter table 从表名 drop foreign key 外键名

1.3.3非空约束

非空约束(NOT NULL)是指该字段不为空。
模板:字段名 数据类型 NOT NULL

1.3.4默认值约束

默认值约束(DEFAULT)是指在插入该字段所在表数据的时候,如果该字段未设置数据则将默认值约束的数据对字段进行赋值。
模板:字段名 数据类型 DEFAULT 默认值

1.3.5唯一性约束

唯一性约束(UNIQUE)是指该字段所属的数据表中,该值应该是唯一的。
模板:字段名 数据类型 UNIQUE

总结代码
#从表
CREATE TABLE student(
id INT PRIMARY KEY,
`name` VARCHAR(32) NOT NULL,
TELEPHONE VARCHAR(11) UNIQUE,
CLASS_ID INT,
age INT,
IS_LIVE VARCHAR(10) DEFAULT '0'
);
#主表
CREATE TABLE class(
id INT,
`name` VARCHAR(32) NOT NULL,
PRIMARY KEY (id)
);
#添加外键
alter table student add constraint fk_cs foreign key(CLASS_ID) references class(ID);
1.4 增删改查
1.4.1数据插入数据表

单条数据插入模板:INSERT INTO 表名(字段名1,字段名2,…) VALUES (值 1,值 2,…);
多条数据插入模板:INSERT INTO 表名(字段名1,字段名2,…) VALUES (值 1,值 2,…),(值 1,值 2,…),…;
代码:

INSERT INTO student (id,name,telephone,class_id,age) VALUES(1,'测试','13799255046',1,13);
INSERT INTO student (id,name,telephone,class_id,age) VALUES(2,'测试1','13799255047',1,14),(3,'测试2','13799255048',1,15);

结果:
在这里插入图片描述

1.4.2数据删除

模板:DELETE FROM 表名 [WHERE 条件表达式];

#根据条件删除
DELETE from student WHERE id=1;
#删除表所有数据
DELETE FROM student;

TRUNCATE与DETELE区别(TRUNCATE不支持回滚,速度更快):
1、DELETE语句后可跟WHERE子句,可通过指定WHERE子句中的条件表达式只删除满足条件的部分记录;但是,TRUNCATE语句只能用于删除表中的所有记录。
2、使用TRUNCATE语句删除表中的数据后,再次向表中添加记录时自动增加字段的默认初始值重新由1开始;使用DELETE语句删除表中所有记录后,再次向表中添加记录时自动增加字段的值为删除时该字段的最大值加1
3、DELETE语句是DML语句,TRUNCATE语句通常被认为是DDL语句

1.4.2数据更新

模板:UPDATE 表名 SET 字段名1=值1[,字段名2 =值2,…] [WHERE 条件表达式];

#更新多个数据
UPDATE student SET age=20,class_id=2 WHERE id=1;
#将表的所有这个字段更新
UPDATE student SET class_id=1;
1.4.3数据查询

查询模板1:select * from 表名;
查询模板2:select 字段1,字段2 from 表名;
查询模板2:select distinct 字段1,字段2 from 表名;

SELECT DISTINCT id,name,'1111' from student;
1.4.3.1聚合函数

MySQL中提供了聚合函数来实现这些功能。所谓聚合,就是将多行汇总成一行;其实,所有的聚合函数均如此——输入多行,输出一行。聚合函数具有自动滤空的功能,若某一个值为NULL,那么会自动将其过滤使其不参与运算。

#count():统计表中有多少条数据
SELECT COUNT(1) FROM student;
#max(字段):对指定列取最大值
SELECT max(age) FROM student;
#min(字段):对指定列取最小值
SELECT min(age) FROM student;
#sum(字段):对指定列取合计
SELECT sum(age) FROM student;
#avg(字段):对指定列取平均
SELECT avg(age) FROM student;
1.4.3.2时间函数
SELECT NOW();
SELECT DAY (NOW());
SELECT DATE (NOW());
SELECT TIME (NOW());
SELECT YEAR (NOW());
SELECT MONTH (NOW());
SELECT CURRENT_DATE();
SELECT CURRENT_TIME();
SELECT CURRENT_TIMESTAMP();
#增加日期
SELECT DATE_ADD(NOW(),INTERVAL 1 DAY);
SELECT DATE_ADD(NOW(),INTERVAL 1 MONTH);
SELECT DATE_SUB(NOW(),INTERVAL 1 DAY);
SELECT DATE_SUB(NOW(),INTERVAL 1 MONTH);
#算时间差
SELECT DATEDIFF('2019-08-08','2019-05-05');
#增加时间
SELECT ADDTIME('14:23:12','01:02:01');
#当天开始时间 
SELECT str_to_date(DATE_FORMAT(NOW(),'%Y-%m-%d'),'%Y-%m-%d %H:%i:%s');
#当天结束时间
select DATE_ADD(DATE_ADD(str_to_date(DATE_FORMAT(NOW(),'%Y-%m-%d'),'%Y-%m-%d %H:%i:%s'),INTERVAL 1 DAY),INTERVAL -1 SECOND);

1.4.3.3字符函数
#连接函数
SELECT CONCAT ('111','222','3333')
#统计长度
SELECT LENGTH('123');
1.4.3.4数字函数
#绝对值
SELECT ABS(-136);
#向下取整
SELECT FLOOR(3.14);
#向上取整
SELECT CEILING(3.14);
1.4.3.5条件查询

1.关系运算符

关系运算符说明
=等于
<>不等于
!=不等于
<小于
<=小于等于
>大于
>=大于等于

代码:

SELECT *  from student WHERE age!=15;

在这里插入图片描述

2.IN关键字查询
IN关键字用于判断某个字段的值是否在指定集合中。如果字段的值恰好在指定的集合中,则将字段所在的记录将査询出来。(NOT IN 反之)
代码:

SELECT *  from student WHERE age in (15,14);

在这里插入图片描述

3.BETWEEN AND关键字查询
BETWEEN AND用于判断某个字段的值是否在指定的范围之内。如果字段的值在指定范围内,则将所在的记录将查询出来
代码:

SELECT *  from student WHERE age BETWEEN 14 and 40;

在这里插入图片描述

4.空值查询
在条件后面加 IS NULL / IS NOT NULL用来过滤条件字段是否为空
代码:

SELECT *  from student WHERE age is NULL;

在这里插入图片描述

5.AND 关键字
在条件中可以用来关联多个条件 相当于 与 运算,多个同时符合为真
代码:

SELECT *  from student WHERE age=15 AND name='测试2';

在这里插入图片描述

6.OR 关键字
在条件中可以用来关联多个条件 相当于 或 运算,多个中有一个为真就是真
代码:

SELECT *  from student WHERE age=15 or name='测试1';

在这里插入图片描述

7.LIKE 关键字
用来判断两个字符串是否完全匹配,(%通配符用于配置任何长度的字符串,_通配符用于匹配单个字符,两个_就可以匹配两个字符)
代码:

SELECT *  from student WHERE name like '_试%';

在这里插入图片描述

8.LIMIT关键字
限制查询结果的数量
代码:

SELECT *  from student LIMIT 2;

在这里插入图片描述

9.GROUP BY 关键字
进行数据的分组查询,可以理解为:通过GROUP BY将原来的表拆分为几张小表。
HAVING 用来与 GROUP BY 一起使用,用于对分组的数据进行条件过滤。
代码:

SELECT max(age),class_id  from student GROUP BY class_id HAVING class_id in (1,2) ;

在这里插入图片描述

10.ORDER BY
用于对查询的结果进行排序(参数 ASC表示按照升序排序,DESC表示按照降序排序,默认ASC)
代码:

SELECT *  from student ORDER BY age desc;

在这里插入图片描述

1.4.3.6表关系

1.一对一
一般来说一对一关系的表关联并不多见,能够达到一对一关系的表我们一般都在同一张表内完成。
2.一对多
例如:一个班级里有很多的学生,那么班级对学生的关系就是一对多,反之称为多对一。
3.多对多
例如:学生对老师的关系,一个老师对应多个学生,一个学生也有多个老师。一般这种情况下需要新增一张关联表对于关联学生与老师之间的关系。

1.4.3.7连接查询

1.内连接查询
内连接(Inner Join)又称简单连接或自然连接,是一种非常常见的连接查询。内连接使用比较运算符对两个表中的数据进行比较并列出与连接条件匹配的数据行,组合成新的 记录。也就是说在内连接查询中只有满足条件的记录才能出现在查询结果中。其语法格式如下:

SELECT 查询字段1,查询字段2, ... FROM1 [INNER] JOIN2 ON1.关系字段=2.关系字段
SELECT T.*,T1.NAME from student T JOIN class T1 ON T.CLASS_ID=T1.ID;

在这里插入图片描述

2.外连接查询
左连接:左(外)连接的结果包括LEFT JOIN子句中指定的左表的所有记录,以及所有满足连接条件的记录。如果左表的某条记录在右表中不存在则在右表中显示为空。

SELECT 查询字段1,查询字段2, ... FROM1 LEFT JOIN2 ON1.关系字段=2.关系字段 WHERE 条件
SELECT T.*,T1.NAME from student T LEFT JOIN class T1 ON T.CLASS_ID=T1.ID;

在这里插入图片描述

右连接:右(外)连接的结果包括RIGHT JOIN子句中指定的右表的所有记录,以及所有满足连接条件的记录。如果右表的某条记录在左表中没有匹配,则左表将返回空值。

SELECT 查询字段1,查询字段2, ... FROM1 RIGHT JOIN2 ON1.关系字段=2.关系字段 WHERE 条件
SELECT T.*,T1.NAME from student T RIGHT JOIN class T1 ON T.CLASS_ID=T1.ID;

在这里插入图片描述

1.4.3.8子查询

子查询是指一个查询语句嵌套在另一个查询语句内部的查询;该查询语句可以嵌套在一个 SELECT、SELECT…INTO、INSERT…INTO等语句中。在执行查询时,首先会执行子查询中的语句,再将返回的结果作为外层查询的过滤条件。在子査询中通常可以使用比较运算符和IN、EXISTS、ANY、ALL等关键字。
EXISTS键字后面的参数可以是任意一个子查询,后面有内容则返回true没有则返回fasle

SELECT 查询字段1,查询字段2, ... FROMWHERE EXISTS (子查询)

原文链接:引用文章

总结

1、本文是对mysql基本语句编写的一些总结
2、之后要探究的是对于数据优化的总结

安安稳稳,快快乐乐--zwx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值