文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MySQL - mysql服务基本操作以及基本SQL语句与函数

2023-10-23 05:51

关注

文章目录

操作mysql

下载mysql我就不写文章了,怎么卸载倒是有一篇(在我的博客中)

下载完成mysql之后我们可以通过管理员的身份来运行cmd命令窗口,我们可以通过以下两条命令来启动 mysql 或者停止 mysql 服务

# net stop mysql80       它的作用是停止 mysql 服务# net start mysql80       它的作用是开启 mysql 服务

mysql启动停止图片
现在我们只是启动了 mysql ,他现在还没有和我们的客户端进行一个连接,我们现在需要让 mysql 连接到我们的客户端,有三种连接方式,新手推荐都练习一下,有益于理解mysql 与客户端之间的一些联系

  1. 首先我们可以通过 MySQL 8.0 Command Line Client 这个软件来进行连接
  2. 我们可以通过命令行来跑 mysql连接服务 或者说连接 mysql ,如果是命令行就需要配置一下环境变量了,否则 window 无法寻找到 连接 mysql 的程序。

配置地址为:
mysql配置地址
然后我们可以执行该命令来让客户端连接 mysql 服务:mysql [-h 127.0.1.1] [-p 3306] -u root -p
mysql连接
3. 我们还可以使用可视化管理工具进行连接,这个比较简单,就不进行截图演示了。

客户端与 mysql 服务之间的小九九

首先客户端会向 mysql 服务器发送 sql 语句,表面上是让 mysql 去执行语句做出操作,其实mysql内部是很奇妙的,首先 mysql 接受到客户端传来的 sql 语句会直接给到内部的 DBMS 数据库管理系统,它是会去操作以及维护数据库的,它可操作以及维护多个数据库 ,每个数据库可包含多个表,每个表可包含多个字段。

了解 mysql

mysql 数据库是一种关系型数据库,所谓关系型数据库也就是通过表结构来存储数据的数据库,反之则为非关系型数据库,例如 mongodb 就是一种非关系型数据库(NoSQL)

官方的解释是:关系型数据库是建立在关系模型基础上,有多张互相连接的二维表组成的数据库。

关系型数据库格式统一,方便维护;同时 SQL语言标准统一,使用方便。这便是它的优点。

基本 SQL 语句

语法书写规范

  1. 首先 mysql 语句单行多行书写都可以,但是该语句结束时必须使用分号结尾 ;
  2. 可使用空格或缩进来增强可读性
  3. 不区分大小写,只是关键字建议大写,这是比较规范的
  4. 单行注释 -- 注释内容# 注释内容
  5. 多行注释

SQL分类

DDL

  1. 查询
  1. 创建
  1. 删除
  1. 使用某数据库

  1. 查询当前数据库所有表
  1. 查询表结构
  1. 查询指定表的建表语句
CREATE TABLE 表名称(字段1 数据类型[ COMMENT 字段1注释],字段1 数据类型[ COMMENT 字段1注释],字段1 数据类型[ COMMENT 字段1注释],字段1 数据类型[ COMMENT 字段1注释]) [COMMENT 表注释];

最后一个字段后面不加逗号

mysql数据类型

数值类型

有符号标识:SIGNED;无符号标识:UNSIGNED

当我们对分数或者年龄等做记录的时候就不需要用到有符号的负数了,我们可以这样写: age TINYINT UNSIGNED

对于浮点数我们可以这样限定它的范围:score double(限制位数,小数位数)

字符类型

字符类型有很多,我就列出一下,不会全部介绍,因为常用到的也就是 char、以及 varchar

定长意思就是已经开辟了这么大的空间,无论在实际操作中是存多少字符,它也是这么长的,有一点浪费空间的意思
而变长则是需要判断实际字符长度在分配空间

各有各的长处,变长性能比较差,但却不浪费空间,char浪费空间却性能胜与 varchar。

日期类型

示例

mysql> show databases;+--------------------+| Database           |+--------------------+| carbon             || examination_pro    || information_schema || mysql              || performance_schema || sys                || testdb             |+--------------------+7 rows in set (0.00 sec)mysql> use testdb;Database changedmysql> select database();+------------+| database() |+------------+| testdb     |+------------+1 row in set (0.00 sec)mysql> show tables;+------------------+| Tables_in_testdb |+------------------+| user             |+------------------+1 row in set (0.02 sec)mysql> desc user;+-----------+-------------+------+-----+---------+-------+| Field     | Type        | Null | Key | Default | Extra |+-----------+-------------+------+-----+---------+-------+| name      | varchar(10) | YES  |     | NULL    |       || workno    | varchar(10) | YES  |     | NULL    |       || id        | int         | YES  |     | NULL    |       || gender    | char(1)     | YES  |     | NULL    |       || idcard    | char(18)    | YES  |     | NULL    |       || entrydate | date        | YES  |     | NULL    |       |+-----------+-------------+------+-----+---------+-------+6 rows in set (0.01 sec)mysql> show create table user;+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Table | Create Table          |+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| user  | CREATE TABLE `user` (  `name` varchar(10) DEFAULT NULL COMMENT '用户名称',  `workno` varchar(10) DEFAULT NULL COMMENT '工号',  `id` int DEFAULT NULL COMMENT '编号',  `gender` char(1) DEFAULT NULL COMMENT '性别',  `idcard` char(18) DEFAULT NULL COMMENT '身份证号',  `entrydate` date DEFAULT NULL COMMENT '入职时间') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='员工表' |+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.01 sec)mysql>

修改(表操作)

  1. 修改数据类型
    ALTER TABLE 表名 MODIFY 字段名 新的数据类型(长度);
  2. 修改字段名称和字段类型
    ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];

ALTER TABLE 表名 DROP 字段名;

ALTER TABLE 表名 RENAME TO 新表名;

  1. 删除表
    DROP TABLE [ IF EXISTS ] 表名;
  2. 删除指定表,并且重新创建该表
    TRUNCATE TABLE 表名;

DML

添加数据

删除数据

DELETE FROM 表名 [WHERE 条件] ;

修改数据

UPDATE 表名 SET 字段名1 = '修改之后的值1',字段名2 = '修改之后的值2,... [WHERE 条件];'


DQL

查询多个字段

SELECT DISTINCT 字段列表 FROM 表名;

条件查询

SELECT 字段列表 FROM 表名 WHERE 条件列表;

聚合函数

SELECT 聚合函数(字段列表) FROM 表名;

聚合函数:

分组查询

SELECT 字段列表 FROM 表名 [ WHERE 条件] GROUP BY 分组字段名 [ HAVING 分组后过滤条件 ];

都是过滤条件 where 和 having 的区别在哪里呢?

排序查询

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;

排序方式包含:

  1. ASC (升序)
  2. DESC (降序)

分页查询

SELECT 字段列表 FROM 表名 LIMIT 起始索引,每页查询条数;

DQL语句的执行顺序

  1. SELECT
  2. FROM
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. ORDER BY
  7. LIMIT

DCL

用户权限

  1. 查询用户
USE mysql;SELECT * FROM user;
  1. 创建用户
    CREATE USER '用户名'@'主机名' IDENTIFIEN BY '密码';
  2. 修改用户密码
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
  1. 删除用户
    DROP USER'用户名'@'主机名';

主机名如果为local host 那么该数据库只能在当前主机访问,也就是当前操作电脑上可以访问;如果主机名命名为 % 那么表示该数据库可以在任意主机上访问

权限控制分配

当我们有了多个用户权限,自然要给不同的用户分配不同的权限,而所分配的权限也就是该用户可执行的操作,例如查询、插入、修改、删除(库 / 表),简称CRUD。

如果要给予所有权限,那么可使用 ALL 或者 ALL PRIVILEGES

  1. 查询权限
    SHOW GRANTS FOR '用户名'@'主机名';
  2. 授予权限
    CRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
  3. 撤销权限
    REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

如果要操作该数据库的所有表的权限,那么我们可以将表名写做:*来表示通配该数据库所有表

同样的所有数据库也可以表示为 *


函数

常用字符串函数

  1. 字符串的拼接,将多个字符串拼接为一个字符串
CONCAT(STR1,STR2,STR3...)
  1. 字符串全部转小写
LOWER(str)
  1. 字符串全部转大写
UPPER(str)
  1. 左填充,用字符串pad对str左边进行填充,达到n个字符长度
LPAD(str,n,pad)
  1. 右填充,用字符串pad对str右边进行填充,达到n个字符长度
RPAD(str,n,pad)
  1. 去掉字符串左右两边的空格
TRIM(str)
  1. 返回字符串 str 从 start 位置起的 len 个长度的字符串
SUBSTRING(str,start,len)
练习
SELECT CONCAT('Hello ',' MySQL') AS '字符串拼接';SELECT LOWER(CONCAT('Hello',' MySQL')) AS '字符串转小写';SELECT UPPER(CONCAT('Hello',' MySQL')) AS '字符串转大写';SELECT LPAD(UPPER(CONCAT('Hello',' MySQL')),18,'_') AS '左填充字符串';SELECT RPAD(UPPER(CONCAT('Hello',' MySQL')),18,'_') AS '右填充字符串';SELECT TRIM(CONCAT('  Hello ',' MySQL  ')) AS '字符串去除两边空格';SELECT SUBSTRING(RPAD(UPPER(CONCAT('Hello',' MySQL')),18,'_'),5,3) AS '字符串截取';# 这里需要注意索引值从1开始

常见数值函数

  1. 向上取整
CEIL(x)
  1. 向下取整
FLOOR(x)
  1. 返回 x / y 的模
MOD(x,y)
  1. 返回 0~1内的随机数
RAND()
  1. 求参数 x 的四舍五入的值,保留 y 位小数
ROUND(x,y)
练习
SELECT CEIL(200.1) AS '向上取整';SELECT FLOOR(200.9) AS '向下取整';SELECT MOD(12,7) AS '求模';SELECT RAND() AS '随机数';SELECT ROUND(RAND() * 200,3) AS '四舍五入';

常见日期函数

  1. 返回当前日期
CURDATE()
  1. 返回当前时间
CURTIME()
  1. 返回当前日期和时间
NOW()
  1. 获取指定的date年份
YEAR(date)
  1. 获取指定的date月份
MONTH(date)
  1. 获取指定的date日期
DAY(data)
  1. 返回一个日期/时间值加上一个时间间隔expr后的时间值
DATE_ADD(date,INTERVAL expr type)
  1. 返回起始时间date1和结束时间date2之间的天数
DATEDIFF(date1,date2)
练习
SELECT CURDATE() AS '当前日期';SELECT CURTIME() AS '当前时间';SELECT NOW() AS '当前日期和时间';SELECT YEAR('1999-01-06') AS '指定日期年份';SELECT MONTH('1999-01-06') AS '指定日期月份';SELECT DAY('1999-01-06') AS '指定日期';SELECT DATE_ADD('1989-01-01',INTERVAL 70 MONTH) AS '时间推进';SELECT DATE_ADD('1989-01-01',INTERVAL -70 DAY) AS '时间推进';SELECT DATEDIFF('2023-10-2','2001-10-19') AS '间隔天数';

流程函数

  1. 如果 value 为 true,返回第一个值,否则返回第二个值
IF(value,x,y)
  1. 如果 value 不为空,返回第一个值,否则返回第二个值
IFNULL(value1,value2)
  1. 如果 value1 为 true,返回res1,否则返回default默认值
CASE WHEN [value1] THEN [res1] ...ELSE[default] END
  1. 如果 value1 的值等于 val1,返回res1,否则返回default默认值
CASE [value1] WHEN [val] THEN [res1] ...ELSE[default] END
练习
SELECT IF((CEIL(RAND() * 10)  + 1 = 8),1,0) AS '判断';SELECT IFNULL((SELECT workno FROM emp WHERE username = '王小二'),'为空') AS '判断NULL';SELECT username,(CASE age WHEN 23 THEN '符合23岁的标准' WHEN 24 THEN '勉强接受' ELSE '不符合标准' END) AS '标准' FROM emp;SELECT CASE WHEN ((SELECT age FROM emp WHERE username = '王小二') = 23) THEN '符合23岁的标准' ELSE '不符合标准' END AS '标准';

来源地址:https://blog.csdn.net/weixin_63836026/article/details/133214421

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯