暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL8.0 入门(一)

yzq的扎心日常 2022-02-15
506


在 Ubuntu 20.04安装 MySQL



sudo apt update

sudo apt install mysql-server


安装完成后,MySQL 服务将会自动启动。

想要验证 MySQL 服务器正在运行,输入:


sudo systemctl status mysql


输出应该显示服务已经被启用,并且正在运行。



本地登录数据库


在MySQL 8.0上,root 用户默认通过auth_socket插件授权,auth_socket插件通过 Unix socket 文件来验证所有连接到localhost的用户。

这意味着你不需要提供密码即可以root登录到数据库。

命令为:


sudo mysql


设置root用户密码:

在 mysql 8.0 中新增了三个变量,用于对密码的管理

password_history 修改密码不允许与最近几次使用或的密码重复,默认是0,即不限制

password_reuse_interval 修改密码不允许与最近多少天的使用过的密码重复,默认是0,即不限制

password_require_current 修改密码是否需要提供当前的登录密码,默认是OFF,即不需要;如果需要,则设置成ON


设置密码的命令:


ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';


注意新修改的密码要符合安全规范,否则密码不会更改。



使用Navicate远程连接数据库


由于在阿里云服务器中运行数据库,因此使用ssh先连接云服务器,再连接数据库。

其实重要的是要理解,ssh通道的目的是连接到服务器的,而常规则是要连接到服务器端数据库

1.ssh通道的目的是连接到服务器的。需要服务器的账号密码!服务器的账号密码!

2.常规则是要连接到数据库。需要数据库的账号密码,数据库的账号密码



SQL语句概述


SQL语句分为DDL 语句,DML 语句,DQL 语句,DCL 语句


DDL 数据定义语言

操作数据库以及表的 create, drop, alter,定义数据库对象:数据库,表,列。关键字:create, drop, alter


DML 语句 数据操作语言

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


DQL 语句 数据查询语言

用来查询数据库中表的记录(数据)。关键字:select, where


DCL 语句 数据控制语言

用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE


通用语法

SQL语句可以单行或多行,以分号结尾,可以使用空格和缩进来增强语句的可读性,SQL语句不区分大小写,关键字建议使用大写



DDL 语句


创建数据库

--  直接创建数据库


    CREATE DATABASE 数据库名;


--  判断是否存在并创建数据库


    CREATE DATABASE IF NOT EXISTS 数据库名;


--  创建数据库并指定字符集(编码类型)


    CREATE DATABASE 数据库名 CHARACTER SET 字符集;


--  查看某个数据库定义信息


    SHOW CREATE DATABASE 数据库名;


修改数据库

--  修改数据库字符集格式

 

    ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;


删除数据库

--  删除数据库


DROP DATABASE 数据库名;


使用数据库

--  查看正在使用的数据库


    SELECT DATABASE();


--  切换数据库


    USE 数据库名;


创建表


CREATE TABLE 表名 (字段名1,字段类型1,字段名2,字段类型2......);


--  建议写成如下格式


CREATE TABLE 表名 (

    字段名1,字段类型1,

    字段名2,字段类型2,

    ......

);


mysql 数据库常用数据类型





int 整型

double 浮点型

varchar 字符串型

data 日期类型:yyyy-mm-dd



详细的数据类型




整数

tinylnt 很小的整数

smallint 小的整数

mediumint中等大小的整数

int(integer) 普通大小的整数

小数类型 float 单精度浮点数

double 双精度浮点数

decimal (m,d) 压缩严格的定点数


日期类型

year YYYY 1901-2155

time HH:MM:SS

data YYYY-MM-DD

datatime YYYY-MM-DD HH:MM:SS

timestamp


文本,二进制类型

CHAR(M) M 为 0~255 之间的整数

VARCHAR(M) M 为 0~65535 之间的整数

TINYBLOB 允许长度 0~255 字节

BLOB 允许长度 0~65535 字节

MEDIUMBLOB 允许长度 0~167772150 字节

LONGBLOB 允许长度 0~4294967295 字节

TINYTEXT 允许长度 0~255 字节

TEXT 允许长度 0~65535 字节

MEDIUMTEXT 允许长度 0~167772150 字节

LONGTEXT 允许长度 0~4294967295 字节

VARBINAPY(M) 允许长度 0~M 个字节的变长字节字符串

BINARY(M) 允许长度 0~M 个字节的变长字节字符串



查看表

--  查看某个数据库中的所有表


    SHOW TABLES;


--  查看表结构


    DESC 表名;


--  查看创建表的sql语句


    SHOW CREATE TABLE 表名;


快速创建一个表结构相同的表


CREATE TABLE 新表名 LIKE 旧表名;


删除表

--  直接删除表


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 INTO 表名 - 表示往那张表添加数据

(字段名1, 字段名2, ...);    -- 要给哪些字段设置值

VALUES (值1, 值2, ...);  -- 设置的具体的值

值与字段必须对应,个数相同,类型相同


数据值大小必须在字段的长度范围之内


除了数组类型外,其他字段类型的值必须使用引号引起。(建议使用单引号)


如果要插入空值,可以不写字段,或者插入 null


插入全部字段

--  所有的字段名都写出来


    INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);


--  不写字段名


    INSERT INTO 表名 VALUES (值1, 值2, ...);



插入部分数据

--  没有添加数据的字段会使用null


    INSERT INTO 表名 (字段名1, 字段名3, ...) VALUES (值1, 值3, ...);


复制表

在已有的数据基础上,将原来的数据进行复制,插入到对应的表中


--  语法格式


INSERT INTO 表名1 SELECT * FROM 表名2;

(*可替换为某些选定的属性,实现只复制一部分数据)


更新表记录

--  不带条件修改数据    全部修改


UPDATE 表名 SET 字段名=值;


--  带条件修改数据      指定范围修改


UPDATE 表名 SET 字段名=值 WHERE 字段名=值;


--  关键字 

    UPDATE: 修改数据 

    SET: 修改哪些字段  

    WHERE: 指定条件


删除表记录

--  不带条件删除数据


DELETE FROM 表名;


--  带条件删除数据


DELETE FROM 表名 WHERE 字段名=值;


truncate 删除表记录

delete 是将表中的数据一条一条删除,truncate 是将整个表摧毁,重新创建一个新的表,新的表结构和原来的表结构一模一样


TRUNCATE TABLE 表名;



DQL 语句


简单查询


查询表所有数据,*表示所有列


SELECT * FROM 表名;


查询指定列


SELECT 字段名1,字段名2,字段名3,... FROM 表名;


别名查询

--  查询时给列、表指定别名需要使用as关键字

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


SELECT 字段名1 AS 别名, 字段名2 AS 别名,... FROM 表名;

(AS可以省略)


清除重复值


--  查询指定列 并且结果不出现重复数据


SELECT DISTINCT 字段名 FROM 表名;


查询结果参与运算


参与运算的必须是数值类型,查询显示新列,不会改动原数据


--  某列数据和固定值运算


SELECT 列名1 + 固定值 FROM 表名;


--  某列数据和其他列数据参与运算


SELECT 列名1 + 列名2 FROM 表名;


条件查询

--  语法格式


SELECT 字段名 FROM 表名 WHERE 条件;


比较运算符

--  > 大于 < 小于 <= 小于等于  >= 大于等于  <>  !=  不等于


SELECT 字段名 FROM 表名 where 条件(字段 运算符 筛选条件);


逻辑运算符

--  and 多个条件同时满足

--  or 多个条件其中一个满足

--  not 不满足


in 关键字

in里面的每个数据都会作为一次条件


范围

--  BETWEEN 值1 AND 值2  表示从值1到值2的范围,包头包尾


like 模糊查询

--  LIKE 表示模糊查询


SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';


--  MySQL 通配符有两个 

    %: 表示0个或多个字符  

    _: 表示一个字符


排序

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


SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名 [ASC|DESC];


--  ASC 升序,默认的 DESC 降序

--  单列排序 使用一个字段进行排序

--  组合排序 先使用第一个字段进行排序 如果第一个字段相同,才使用第二个字段进行排序。以此类推


SELECT 字段名 FROM FROM 表名 WHERE字段=值 ORDER BY 字段名1 [ASC|DESC], 字段名2 [ASC|DESC];


聚合函数


查询是横向查询,根据条件一行一行进行判断,而聚合函数是纵向查询,对一列的值进行计算,返回结果值。聚合函数会忽略空值


count:  统计指定列的记录数(行数),值为NULL的不统计


sum:  计算指定列的数值和,如果不是数值,计算结果为0


max:  计算指定列的最大值


min:  计算指定列的最小值


avg:  计算指定列的平均值,如果不是数值,计算结果为0


--  聚合函数写在SQL语句SELECT后字段名的地方


SELECT 字段名... FROM 表名;

SELECT COUNT(age) FROM 表名;


分组查询


--  分组查询是使用 GROUP BY语句对查询信息进行分组  [HAVING 条件] 分组后的筛选


SELECT 字段1,字段2... FROM 表名 GROUP BY 分组字段 [HAVING 条件];


SELECT * FROM hero FROUP BY sex;

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


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

--  分组后聚合函数不操作所有数据,而是操作一组数据


limit语句 分页


limit语句是限制的意思,限制查询记录的条数。limit语句要放在最后面


--  LIMIT语法格式


LIMIT offset,length;  LIMIT length;


--  offset是指偏移量,调过的记录数量,默认为0  length是指需要显示的总记录数


--  查询表,从第三条开始显示,显示6条

SELECT * FROM 表 LIMIT 2,6;


查询应用举例


--  查询年龄小于30的,按性别进行分组,统计每组的人数

-- 1.先过滤年龄小于30的 2.分组 3.最后统计人数


SELECT sex,COUNT(*) FROM hero WHERE age<30 GROUP BY sex;


--  查询年龄大于25的 按性别分组,统计每组人数, 并只显示性别人数大于2的数据

--  错误


SELECT sex,conut(*) ROM hero WHERE age<30 GROUP BY sex WHERE COUNT(*)>2;


--  正确


SELECT sex,conut(*) FROM hero WHERE age<30 GROUP BY sex HAVING COUNT(*)>2;



文章转载自yzq的扎心日常,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论