当前位置:网站首页>MySQL速学笔记-2021-08-31
MySQL速学笔记-2021-08-31
2022-07-26 10:36:00 【竹某】
目录
0.摘要:
a.简要记录了数据库(DB),数据库管理系统(DBMS)和SQL的基本概念和相互关系
b.简要介绍SQL语句的基本分类,涉及一些日后会学到的新的概念
c.简要介绍了数据库(DB)的基本单元——表(table)
d.介绍了一些初步的SQL语句和数据库相关操作
e.简单查询和条件查询。注意两者的区别
f.模糊查询
1.DB,DBMS,SQL的基本概念
数据库(DB):按 一定格式 存放数据 的 文件 的集合。
数据库管理系统(DBMS):用于管理数据库、对数据库中数据进行增删改查等操作的软件。(两个功能是并列的,前者类似于文件的组织,后者通过SQL实现)
SQL(structed query language):结构化查询语言,用于对数据库进行操作(增删改查)。
三者的关系是:DBMS通过SQL对DB进行操作。
2.DB,table
数据库中最基本的单元是表(table),以表的形式组织数据比较直观。
表由行(row)和列(colnum)组成。行也可称为记录record,列也可称为字段field。行往往存储一个个体的不同方面的数据(张三 男 20岁 中国人),而列往往存储同类型(广义上的,非狭义的数据类型)的数据。字段的属性有:数据类型,字段名和约束(比如唯一性约束和范围约束)。
3.SQL语句分类
| DQL | 数据查询语言(select关键字)(Data Query Language) |
| DML | 数据操作语言(insert,delete,update)(Data Management Language)操作的对象是数据,对数据进行增删改。 |
| DDL | 数据定义语言(create,drop,alter)操作表的结构,如删除列等。针对的是表的结构,而不是数据,尽管可能会引起数据的变化。(Data Definition Language) |
| TCL | 事务控制语言(Transaction Control Language)(commit事务提交;rollback事务回滚) |
| DCL | 数据控制语言(Data Control Language)(grant授权,revoke撤销权限) |
4.常见命令:
注意有些操作需要以管理员身份运行命令提示符才行。
登录mysql
| net start mysql | 开启mysql服务,之后才可以登录 |
| net stop mysql | 关闭mysql服务,之后不允许登录 |
| mysql -uroot -pkeyword | 以用户名root密码keyword登录。这样会导致密码显示。 |
mysql -uroot -p enter(回车) keyword | 输入p后输入回车,再输入密码,可以避免密码显示。 |
| ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_keyword'; | 修改root账户的密码 |
| exit | 退出mysql账户 |
上述命令只有修改密码那块之后要加分号或是\g,其他不需要加。
管理数据库(类型于文件管理)
| show databases; | 显示该用户的所有数据库(名称),只有在修改了初始密码之后才允许使用该命令 |
| use DBname; | 使用某一个database,DBname为数据库名称。不使用'DBname'或是“DBname”。 |
| create database DBname; | 在root用户名下创建数据库DBname。 |
| show tables; | 在使用某一个数据库之后(use DBname),展示该数据库中的所有表。 |
| select * from tableName; | 查看某一张表格,只有在使用(选中use)对应数据库后才能查看。 |
| source loop | 导入某一loop(路径)下的sql文件(数据库),loop中不能有中文。之前认为sql文件是一个类似于excel表格的文件,但是在看过物联的同学编程之后,产生了新的认识:sql类似于C语言中的cpp,是源文件,区别于目前我的命令行编程。 |
| desc tableName; | 描述表的结构(描述表的字段及其对应的数据类型等),是describe tableName;的缩写。 |
use database之后不需要加\g也可以执行,加了也不会报错。
| select version(); | 查询当前mysql版本 |
| select database(); | 查询当前使用的数据库 |
| \c | 取消本次命令的输入。 |
由于SQL语句不遇到分号;不执行,所以可以使用\c取消本次命令的输入,这样会使得未输入的命令是无效的(或说被忽略)。
5.简单查询
首先需要use某一数据库。简单查询指的是查询字段,区别于后面的条件查询,查询的是记录。
| select fieldName from tableName; | 只显示tableName表中的fieldName字段(显示指定表中的单个字段) | 注意,字段名大小写均可。 |
| select field1,field2,... from tableName; | 显示指定表中的多个字段(可以是全部) | 注意,字段名大小写均可。 |
| select * from tableName; | 显示指定表中的全部字段 | 效率较低,实际开发不用。 |
as关键字 select fieldName as 'newName' from tableName; | as关键字为字段名起别名(但是没有修改字段名)。as可以省略用空格代替。单引号''也可以省略。(单引号是SQL中括字符串的标准)但是当起中文别名时,单引号不能省略。 | as不但可以给fieldName起别名,也可以给表起别名。但是要注意使用这些别名必需要在定义这些别名之后。 |
| select fieldName_expr from tableName; | 可以直接对字段名进行算数运算构成表达式(当然字段得是数值),这样显示出来的列就会是经过计算的列(包括字段名,可以用as改为更加直观的)。这不会修改表中的数据,只是在显示上进行了修改而已。 |
这些语句都需要实践才可能记住。如果不知道如何导入数据库的话不妨自己创建一个,参考:
https://blog.csdn.net/weixin_42419856/article/details/81355719
下面是例子:表detail。
select * from detail;
显示:
+------------+------+------+------------+--------+----------+
| ID | name | age | date | scores | address |
+------------+------+------+------------+--------+----------+
| 2019213224 | Ying | 21 | 2001-07-20 | 653 | Zhejiang |
| 2019213225 | Chen | 22 | 2000-04-24 | 655 | Beijing |
| 2019213221 | Zhao | 19 | 2002-05-14 | 645 | Tianjin |
| 2019213220 | Qian | 19 | 2002-01-14 | 675 | Hubei |
| 2019213226 | Sun | 20 | 2001-04-14 | 673 | Xinjiang |
+------------+------+------+------------+--------+----------+
select name,id from detail;结果为:
+------+------------+
| name | id |
+------+------------+
| Ying | 2019213224 |
| Chen | 2019213225 |
| Zhao | 2019213221 |
| Qian | 2019213220 |
| Sun | 2019213226 |
+------+------------+
可以发现,sql语句不但关键字不区分大小写,就连字段名也不区分。这带来一个问题,如果字段名分别为fieldname和FIELDNAME的话,如何区分,或是根本就不能创建类似字段?这个留到后续学习创建table时再说。
select name,scores + 100 from detail;
结果为:
+------+--------------+
| name | scores + 100 |
+------+--------------+
| Ying | 753 |
| Chen | 755 |
| Zhao | 745 |
| Qian | 775 |
| Sun | 773 |
+------+--------------+
这个语句不但会导致字段下对应的数值的变化,也会导致字段名的变化,可以使用as关键字进行简化。
6.条件查询
条件查询针对的是记录(也就是行),只不过只会显示符合条件的记录的指定字段。下面是条件查询的语句和常用的运算符。
| SELECT field1,field2... FROM tableName WHERE conditionExpr; | where关键字后面跟的是逻辑表达式,由字段名和运算符组成。区别于前面对字段进行算术运算时的算术表达式。只有逻辑为1(即符合条件)的记录才会显示。 |
| = | 不是赋值,而是等于,相当于C语言中的==。注意区别。 |
| <>或!= | 不等于 |
| >和< | 大于和小于 |
| >=和<= | 大于等于和小于等于 |
| between...and | fieldName BETWEEN a AND b相当于 fieldName>=a and filedName<=b。必需保证a小b大,否则查出来的为empty sets。 |
| and | 逻辑与,优先级高于or,不想管优先级就加() |
| or | 逻辑或 |
| is null | 要求记录的指定字段为空。sql中的NULL不是一个值,所以不能使用fieldName = null进行判断。这区别于Java和C中NULL为0的事实。 |
| is not null | 要求记录的指定字段为非空。 |
in(value1, value2,...) | 要求记录的指定字段为value list中的某个值 |
| not in(value1, value2,...) | 注意in后面的()中是枚举而不是区间 |
仍然是上面的表detail:
mysql> select id, name
-> from detail
-> where scores>660
-> \g //这么输入有助于区分关键字和标识符。
结果为:
+------------+------+
| id | name |
+------------+------+
| 2019213220 | Qian |
| 2019213226 | Sun |
+------------+------+
其他的操作符类似。
7.模糊查询
模糊查询针对的同样是记录,是条件查询中的一种。其特点是:conditionExpr中的的字段的数据类型为String。sql中的String是使用单引号' '括起来的,而不是双引号" "。
| like | 关键字like |
| % | 代替任意多个字符。'%T'表示以T结尾的字符串。如果想要表示单纯的%,使用\%。 |
| _ | 代替任意一个字符。'_T%'表示第二个字符为T的字符串。如果想要表示单纯的_,使用\_。 |
| select field1, field2,...from tableName where stringField like '....'; | stringField指的是字段数据类型为String的字段名,like为模糊查找关键字,'...'为由_和%构成的字符串。 |
mysql> select id,name
-> from detail
-> where scores like '65_'
-> \g
结果为:
+------------+------+
| id | name |
+------------+------+
| 2019213224 | Ying |
| 2019213225 | Chen |
+------------+------+
这个说明where后面的条件语句中的字段可以是string类型的,也可以是int类型的。其中也许有隐式类型转换的事情在。
边栏推荐
- 剑指Offer(二十):包含min函数的栈
- .NET操作Redis Set无序集合
- 码云,正式支持 Pages 功能,可以部署静态页面
- The problem of large fluctuation of hx711 data
- 图片随手机水平移动-陀螺仪。360度设置条件
- 剑指Offer(八):跳台阶
- Interview questions and answers of the first company (I)
- 2022/07/25 ------ arrangement of strings
- Zongzi battle - guess who can win
- [leetcode每日一题2021/2/18]【详解】995. K 连续位的最小翻转次数
猜你喜欢

Navicat15 MySQL (centos7) connected to local virtual machine

Tradingview 使用教程

.NET 开源框架在工业生产中的应用

Okaleido ecological core equity Oka, all in fusion mining mode

Issue 6: which mainstream programming language should college students choose

Agenda express | list of sub forum agenda on July 27

英语基础句型结构------起源

SAP ABAP 守护进程的实现方式

hx711 数据波动大的问题

多目标优化系列1---NSGA2的非支配排序函数的讲解
随机推荐
MD5 encryption
剑指Offer(十):矩形覆盖
Introduction to Phoenix (Level 1: Phoenix installation, level 2: Phoenix basic grammar)
Interview questions and answers for the second company (2)
.net5wtm (asp.net core) PgSQL unpacking operation
C language callback function
剑指Offer(二十):包含min函数的栈
关于硕博士开题报告编写的思考
剑指Offer(八):跳台阶
[Halcon vision] morphological expansion
.net operation redis set unordered collection
The problem of large fluctuation of hx711 data
.net operation redis hash object
.NET操作Redis sorted set有序集合
【论文下饭】Deep Mining External Imperfect Data for ChestX-ray Disease Screening
并行、并发及对于高并发优化的几个方向
第7期:内卷和躺平,你怎么选
L2-005 set similarity (intersection of vector and set)
STM32 阿里云MQTT esp8266 AT命令
SAP ABAP 守护进程的实现方式