记录的是基础用法,有很多细节省略了,详细请看课件或者完整笔记
MySQL的SQL语句分为以下三类
create,alter,drop,source,showinsert,select,delete,updategrant,revoke,commit有两种方式:
指明端口

不指明端口,使用默认的

-p的作用是不显式地输入密码,我并没有设置root账户的密码,直接按回车即可 -u和root之间可以有空格可以没有

注意mysql语句要用分号结尾

或者“如果这个库不存在的话,就创建”(创建表的时候也一样):
注意,关于库、表的名称,最好使用反引号`` `括起来,这个符号是电脑esc键下面的键,半角状态打出

也可以不括起来,但是如果名称和mysql内部一些名称冲突的话,会报错




严格来说也不是退出,而是返回到最初的库

当然,是没有必要退出的,因为在其他数据库的时候,还是可以使用show databases;命令查看所有数据库,并使用use 数据库名;直接进入其他数据库

create table 表名 (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;最下面一行后面的内容可以省略




省略长横线:

在SC表中的Cno列后面新增一列Grade

查看一下表结构,发现列信息被加入进去了:

由于一般新增列的时候,默认该列的数据都为空NULL,但是有些场景需要指定默认数据
创建新列时设置默认填充数据:


主键用于标定一张表中一条数据的唯一性的的列。主键不为空、数据值不能重复,因此可以标定一条数据的唯一性。
一张表中只能有一个主键,但是主键可以是由一列构成,也可以由多列复合而成(复合主键),只要复合主键中并不是每一列的数据都是相同的,那么这个数据就是唯一的。
一般选择int类型字段作为主键(比如ID之类)
方法一:在设置字段的时候设置上主键

方法二:在最后设置主键

not null

前提是表中没有主键


不能用第一种方式创建

会报错“定义了重复主键”
此前表中没有主键

关于主键、默认值(default)、唯一键、外键等SQL字段约束相关知识,在慕雪的寒舍-SQL字段约束
将SC表中的Sno的数据类型由int(11)改为int(20)

查看一下表结构:

说明修改表的某一列是用新的列覆盖掉旧的列
将表SC的Grade列改名为NianJi

注意,在改列名的时候,必须还要重新指定该列的数据类型,可以保留原来的,也可以修改,但必须都要写出。 这里我顺便修改成新的数据类型,还可以加注释。 所以说修改列名是包含了修改修改数据类型的 修改列名使用change而不是rename
查看一下表结构:


凡是涉及到删除的操作,都要慎重 如果表中只剩下一列,不能删除列了,只能删除整张表


https://blog.musnow.top/posts/2109090510/
$ mysqldump [-P端口号] -u用户名 -p密码 [-B] 数据库名 > 备份后的名称.bak.sql[ ]内的是可以省略的 -u和用户名、-p和密码之间可以加空格,可以不加 -B和数据库名之间必须有空格(如果-B没有省略的话) 端口号可能是3306,取决于数据库有没有指定端口 备份后的文件要具体到路径,否则认为当前工作路径(同其他shell命令一样)
eg1:mysqldump -uroot -p0295 test2 > ../test2.bak.sql备份到了父目录
eg2:mysqldump -P3306 -uroot -p0295 test2 > test2.bak.sql备份到了当前目录
可以多个数据库同时备份
$ mysqldump [-P端口号] -u用户名 -p密码 [-B] 数据库1 数据库2 > 备份后的名称.bak.sqleg:mysqldump -uroot -p0295 -B test2 test_mysql > test.back.sql两个数据库备份到了一个备份文件上
也可以只进行数据库中表的备份
$ mysqldump [-P端口号] -u用户名 -p密码 数据库名 表1 表2 > 备份后的名称.bak.sql备份表的时候不能加-B,因为-B是专用于数据库的,否则会把表名当成数据库名
eg:mysqldump -uroot -p0295 test2 test2_table1 > test_table1.back.sql
其他知识点详见置顶链接
mysql> source 备份文件路径eg:source /yj/test2.bak.sql
数据库中的内容和原来数据库中的内容是相同的
mysql备份的时候,会将里面的语句智能化简
eg:mysql> system clear执行清理屏幕功能
table固定写法比如alter, drop等等,后面都需要加table, 然后才能跟表名
而下面的DML在指定表名的时候不需要写table, 直接用表名就可以
这是因为DDL是操作表的
而DML是操作数据的

Sno、Sname等字段可以不写,如果不写的话就默认为数据为空(前提是该字段允许为空,或已设置defalut值)

如果字段名全部省略,就默认为所有的数据都要填上,所有数据都要填充,且要按照表中字段顺序填入


同单行插入一样,字段名可以省略(但是数据插入要按字段顺序); 部分字段名可以不写,默认为空(前提是该字段允许为空,或者有default值)
如果要插入的数据,其主键或唯一键,与表中现存数据重合,则插入数据失败。此时我们可以选择更新现有数据。

在test表中插入数据Sno、Sage(Sno必填,因为是主键),如果填入的内容与主键发生重复冲突,则更新
update语句后面指定字段中的内容 示例中是,如果发生主键/唯一键冲突,则将该主键/唯一键对应的数据中Sno字段数据改为21
与更新update不同,更新是只更新数据中原有的部分字段,替换replace则是先删除原数据(所有字段),然后根据要填入的value再插入。
要插入的数据的主键/唯一键与现有数据冲突时,replace将现有数据所有字段删除,将要插入的数据重新插入。即replace在遇到冲突时,是先删除,后插入。


从这里可以看出,数据是先删除后插入
基本写法
SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...
*为通配符
查看Student所有数据:

查看Course所有数据:

查询指定字段的数据,并汇聚成一张表呈现出来

所以可以看出来,select到from之间的这部分,实际上就是规定了查询结果的字段。而MySQL支持将查询结果通过表达式进行展示

这样可以增强查询结果的可读性

有些使用场景下可能需要用到去重,比如上面,只是想知道总体上都是有哪几种总分,因此可以对结果进行去重。

注意去重只是去掉所有字段都重复的数据,所以结果中,就算有一个字段存在重复的数据,但是其他字段不重复,该数据也不会被去掉

基本用法就是在表名后加where,后面是查询条件
where语句支持比较运算符和逻辑运算符
比较运算符 | 说明 |
|---|---|
>, >=, <, <= | |
= | 等于,NULL 不安全,NULL=NULL 的结果是 NULL |
<=> | 等于,NULL 安全,NULL<=>NULL 的结果是 TRUE(1) |
!=, <> | 不等于 |
BETWEEN a AND b | 范围匹配,闭区间,如果 a <= value <= b 返回 TRUE(1) |
IN (option, ..., ...) | 如果是 option 中的任意一个,则返回 TRUE(1) |
IS NULL | 是 NULL |
IS NOT NULL | 不是 NULL |
LIKE | 模糊匹配,% 表示任意多个(包括 0 个)字符;_表示任意一个字符; |
逻辑运算符 | 说明 |
|---|---|
AND | 与,相当于 cpp 中的 &&,全真为 1,有假为 0 |
OR | 或,相当于 cpp 中的 ` |
NOT | 逻辑取反,条件为 TRUE(1) 的时候结果为 FALSE(0) |





需要注意的是,where只是进行条件筛选,起别名的工作并不是通过where语句完成的,而是select本身
并且起别名本质是在表示结果的时候更换一下结果表的字段名,并不影响查询过程,所以where是不认识别名的


使用where时设置条件的字段,可以与select查询要获取的结果集字段无关,而是可以根据原有表中任意字段进行筛选

DESC】 显示
降序在字段后加EDSC

按照书写先后确定排序优先级

先按照数学将序排序,相等时,就再参考语文的升序,如果还是相等,参考英语的升序

排序的时候可以使用别名,说明排序只是对于查询后的结果表进行排序,而不同于where(在查询时按条件筛选)
where + order by
查询语文成绩大于70分的学生的id、姓名、数学成绩 并将查询结果按照语文成绩,降序排列