MySQL8.0基础

SQL语句

1、DDL语句 -- 操作数据库以及表的create,drop,alter等

2、DML语句 -- 对表数据进行insert,delete,update

3、DQL语句 -- 对表数据进行各种维度select查询(简单查询、条件查询、模糊查询、分组查询)

4、DCL语句 -- 关于数据库权限设置,这里不介绍

MySQL数据库约束 -- 保证数据的正确性、有效性和完整性

主键约束,唯一约束,非空约束

数据库的安装与使用

  • 数据库的卸载

1、打开电脑服务窗口,关闭MySQL服务器并且卸载一切与MySQL相关的服务

window+r -> 输入services.msc -> 找到并停止MySQL相关服务

2、卸载MySQL所有功能模块

3、查找MySQL安装目录(一般在C盘Program File 或x86两个文件夹),删除可能的残余文件夹。C盘的隐藏文件中有一个ProgramData文件夹,里面MySQL的相关文件也需卸载

  • 数据库的安装

到官网下载安装包 ,开始点击安装,在之前未安装或完全卸载的情况下一直下一步(注意用户名、密码就行),可在cmd窗口输入mysql -V检测安装是否成功

  • 数据库服务的启动

方法一,在服务器窗口找到MySQL80停止或启动

方法二,以管理员身份运行cmd,输入net start mysql80启动服务,

MySQL语句(注意结尾的分号)

DDL语句(关键词:create,drop,alter) 

在cmd下演示  ->进入MySQL数据库 -- mysql -u用户名 -p密码

创建数据库

  • 直接创建数据库 -- CREATE DATABASE 数据库名;
  • 判断是否存在并创建数据库 -- CREATE DATABASE IF NOT EXISTS 数据库名;
  • 创建数据库并指定字符集(编码表,例如gdk,utf8) -- CREATE DATABASE 数据库名 CHARACTER SET 字符集;

查找数据库

  • 查看所有MySQL数据库 -- SHOW DATABATES;
  • 查看某个数据库的定义信息  -- SHOW CREATE DATABASE 数据库名;

修改数据库

  • 修改数据库字符集格式 -- ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;

删除数据库

  •  删除数据库 -- DROP DATABASE 数据库名;

使用数据库

  •  查看正在使用的数据库 -- SELECT DATABASE();
  •  使用/切换数据库 -- USE 数据库名;

DDL操作表 --前提先使用某个数据库

创建表

  •  创建表 -- CREATE TABLE 表名 (字段名1 字段类型1, 字段名2 字段类型2…);
  •  快速创建一个表结构相同的表 -- CREATE TABLE 新表名 LIKE 旧表名;

MySQL中的我们常使用的数据类型如下:

类型

描述

int

整型

double

浮点型

varchar

字符串型

data

日期类型:yyyy-MM-dd

 查看表

  • 查看某个数据库中的所有表 -- SHOW TABLES;
  • 查看表结构 -- DESC 表名;
  • 查看创建表的SQL语句 -- SHOW CREATE TABLE 表名; 

 删除表

  • 直接删除表 -- DROP TABLE 表名;
  • 判断表是否存在并删除表 -- DROP TABLE IF EXISTS 表名;

修改表结构 

  • 添加表列 -- ALTER TABLE 表名 ADD 列名 类型;
  • 修改列类型 -- ALTER TABLE 表名 MODIFY列名 新的类型;
  • 修改列名 -- ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
  • 删除列 -- ALTER TABLE 表名 DROP 列名; 
  • 修改表名 -- RENAME TABLE 表名 TO 新表名;
  • 修改字符集 -- ALTER TABLE 表名 character set 字符集;

DML语句 -- 用来对数据库中表的数据进行增删改。关键字:insert, delete, update

 关键字说明 

  • INSERT INTO 表名表示往哪张表中添加数据
  • (字段名1, 字段名2, …)  --  要给哪些字段设置值
  • VALUES (1, 2, …); -- 设置具体的值

注意

  • 值与字段必须对应,个数相同,类型相同
  • 值的数据大小必须在字段的长度范围内
  • 除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
  • 如果要插入空值,可以不写字段,或者插入null

插入全部字段

  • 所有的字段名都写出来 --  INSERT INTO 表名 (字段名1, 字段名2, 字段名3…) VALUES (1, 2, 3);
  • 不写字段名 -- INSERT INTO 表名 VALUES (1, 2, 3…);

插入部分数据

  • 没有添加数据的字段会使用NULL -- INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (1, 2, ...);

 蠕虫复制

  • 什么是蠕虫复制:在已有的数据基础之上,将原来的数据进行复制,插入到对应的表中
  • 语法格式:INSERT INTO 表名1 SELECT * FROM 表名2;
  • 作用:将表名2中的数据复制到表名1

 更新表记录

  • 不带条件修改数据 -- UPDATE 表名 SET 字段名=;
  • 带条件修改数据 -- UPDATE 表名 SET 字段名= WHERE 字段名=;

关键字说明

  • UPDATE: 修改数据
  • SET: 修改哪些字段
  • WHERE: 指定条件

删除表记录

  • 不带条件删除数据 -- DELETE FROM 表名;
  • 带条件删除数据 -- DELETE FROM 表名 WHERE 字段名=;

DQL语句

  • 用来查询数据库中表的记录(数据)。关键字:select, where
  • >注意:查询不会对数据库中的数据进行修改.只是一种显示数据的方式

查询表所有数据

  • 使用*表示所有列 -- SELECT * FROM 表名;
  • 写出查询每列的名称 -- SELECT 字段名1, 字段名2, 字段名3, ... FROM 表名;

查询指定列

  • 查询指定列的数据,多个列之间以逗号分隔 -- SELECT 字段名1, 字段名2... FROM 表名;

别名查询 -- 使用别名的好处是方便观看和处理查询到的数据

  • 查询时给列、表指定别名需要使用AS关键字(AS可以省略不写) -- SELECT 字段名1 AS 别名, 字段名2 AS 别名... FROM 表名;

清除重复值

  • 查询指定列并且结果不出现重复数据 -- SELECT DISTINCT 字段名 FROM 表名;

查询结果参与运算

  • 某列数据和固定值运算 -- SELECT 列名1 + 固定值 FROM 表名;
  • 某列数据和其他列数据参与运算 -- SELECT 列名1 + 列名2 FROM 表名;

条件查询

比较运算符

>大于(转义运算符 >)-- SELECT * FROM 表名 WHERE 字段>数值;
<小于(转义运算符 <)-- SELECT * FROM 表名 WHERE 字段<数值;
<=小于等于
>=大于等于
=等于
<>!=不等于

逻辑运算符

and 与,or 或 ,not

in关键字

语法格式:SELECT 字段名 FROM 表名 WHERE 字段 in (数据1, 数据2...);

in里面的每个数据都会作为一次条件,只要满足条件的就会显示

 范围

BETWEEN 1 AND 2 表示从值1到值2范围,包头又包尾
比如:age BETWEEN 35 AND 70
相当于: age>=35 && age<=70

模糊查询 -- LIKE

SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';
满足通配符字符串规则的数据就会显示出来

MySQL通配符有两个:
%: 表示0个或多个字符(任意个字符)
_: 表示一个字符

例如

  •  查询表中(name字段)姓王的 -- SELECT * FROM 表名 name LIKE '王%';
  •  查询表中(name字段)名字有‘王’字的 -- SELECT * FROM 表名 name LIKE '%王%';
  •  查询表中(name字段)姓王且为三个字的 -- SELECT * FROM 表名 name LIKE '王__'; 

排序 

通过ORDER BY子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)

语法:SELECT 字段名 FROM 表名 WHERE 字段= ORDER BY 字段名 [ASC|DESC];
ASC: 升序, 默认是升序
DESC: 降序

单列排序

  • 查询年龄(age字段)小于等于35岁的,按照年龄升序排列

SELECT * FROM 表名 WHERE age<=35 ORDER BY age ASC;

组合排序 

组合排序就是先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序,依次类推。

  •  查询年龄小于等于35岁的,按照年龄升序排列,如果年龄相同按照生命的降序

SELECT * FROM 表名 WHERE age<=35 ORDER BY age ASC,life desc;

 聚合函数

之前我们做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用聚合函数查询是纵向查询,它是对一列的值进行计算,然后返回一个结果值。另外聚合函数会忽略空值 

五个聚合函数
count 统计指定列记录数,记录为NULL的不统计
sum 计算指定列的数值和,如果不是数值类型,那么计算结果为0
max 计算指定列的最大值
min 计算指定列的最小值
avg 计算指定列的平均值,如果不是数值类型,那么计算结果为0

聚合函数的使用:写在 SQL语句SELECT 字段名的地方
SELECT 字段名... FROM 表名;
SELECT COUNT(age) FROM 表名;

 

分组查询 

分组查询是指使用 GROUP BY语句对查询信息进行分组,相同数据作为一组
SELECT 字段1,字段2... FROM 表名 GROUP BY 分组字段 [HAVING 条件];

例如:

SELECT * FROM 表名 GROUP BY sex;

这句话会将sex相同的数据作为一组,但是会返回每组的第一条,没有任何意义

分组的目的就是为了统计,一般分组会跟聚合函数一起使用。

分组后聚合函数的作用?不是操作所有数据,而是操作一组数据。

注意事项:当我们使用某个字段分组,在查询的时候也需要将这个字段查询出来,否则看不到数据属于哪组的

例如:SELECT SUM(life) , sex FROM hero GROUP BY sex
效果如下:

 MySQL8.0基础_第1张图片

 

 

having与where的区别

  •  having是在分组后对数据进行过滤.
  • where是在分组前对数据进行过滤
  • having后面可以使用聚合函数
  • where后面不可以使用聚合函数 

 limit语句

 LIMIT限制的意思,所以LIMIT的作用就是限制查询记录的条数。
SELECT *|字段列表 [as 别名] FROM 表名 [WHERE子句] [GROUP BY子句][HAVING子句][ORDER BY子句][LIMIT子句];

LIMIT语法格式:
LIMIT offset,length; 或者limit length;
offset是指偏移量,可以认为是跳过的记录数量,默认为0(如果是0,可以省略)
length是指需要显示的总记录数

 查询hero表中数据,从第三条开始显示,显示6条

我们可以认为跳过前面2条,取6条数据

SELECT * FROM student3 LIMIT 2,6;
 

数据库约束 

对表中的数据进行进一步的限制,保证数据的正确性、有效性和完整性。

约束种类:

  • PRIMARY KEY: 主键
  • UNIQUE: 唯一
  • NOT NULL: 非空
  • DEFAULT: 默认
  • FOREIGN KEY: 外键

 

主键约束

用来唯一标识一条记录,每个表都应该有一个主键,并且每个表只能有一个主键。

哪个字段应该作为表的主键?
通常不用业务字段作为主键,单独给每张表设计一个id的字段,把id作为主键。主键是给数据库和程序使用的,不是给最终的客户使用的。所以主键有没有含义没有关系,只要不重复,非空就行。

在创建表的时候给字段添加主键
字段名 字段类型 PRIMARY KEY

删除主键
ALTER TABLE 表名 DROP PRIMARY KEY

键自增:主键如果让我们自己添加很有可能重复,我们通常希望在每次插入新记录时,数据库自动生成主键字段的值
AUTO_INCREMENT 表示自动增长(字段类型必须是整数类型)

扩展
默认地AUTO_INCREMENT 的开始值是1,如果希望修改起始值,请使用下列SQL语法
ALTER TABLE 表名 AUTO_INCREMENT=起始值;
 

DELETETRUNCATE的区别

  • DELETE 删除表中的数据,但不重置AUTO_INCREMENT的值。
  • TRUNCATE 摧毁表,重建表,AUTO_INCREMENT重置为1

唯一约束

唯一约束的基本格式 -- 字段名 字段类型 UNIQUE

 

非空约束

非空约束的基本语法格式 -- 字段名 字段类型 NOT NULL

默认值

默认值格式 -- 字段名 字段类型 DEFAULT 默认值

 

你可能感兴趣的:(sql,mysql)