0


【MySQL 数据库 基础 Ⅱ】基础sql语句 Ⅱ

MySQL基础语法 Ⅱ

文章目录

前言:

这篇是基础语法 Ⅱ,第一篇 请跳转 【MySQL 数据库 基础】基础sql语句

一、in 离散查询

在条件查询中:

1、between and 表示的是一个连续的闭区间;

2、in 表示的是一个 离散的区间。

具体可以 看这篇帖子来回顾 条件查询 的一些运算符 【MySQL 数据库 基础】基础sql语句

select name, math from exam_result where math in(null,98,85,59,58);select name, math from exam_result where math =nullor math =98or math =85or math =59or math =58;

他们两个是等价的。

二、like 模糊查询

模糊查询会用的一些通配符;

1、% 代表任意多个的任意字符。(0个,也可以是任意个)

2、_ 代表任意一个的任意字符。

mysql>select name, english from exam_result where english like'7%';+-----------+---------+| name      | english |+-----------+---------+| xxx       |77.0|| xx        |78.5|+-----------+---------+2rowsinset(0.00 sec)
mysql>select name, english from exam_result where name like'鸢_';+--------+---------+| name   | english |+--------+---------+| 鸢也   |99.5|+--------+---------+1rowinset(0.00 sec)

where查询筛选在sql充当的是“过滤器”;sql中最核心的就是 select,select最核心的就是where。

三、分页查询(limit)

我们在网页中看到的论坛,评论,他们的最下面会出现,1,2,3…的按钮,这些按钮就对应到了分页查询。

在这里插入图片描述

select*from exam_result limit4,3;-- 不直观,不推荐select*from exam_result limit3offset4;

这俩是等价的操作,但是我们以搭配

offset

来写,比较直观,不容易出错

四、修改 (update)

修改操作是会真正的修改数据库服务器里面的数据,

update

里面的“=”就是赋值的意思。(而不是等于)

  • 格式
mysql>update 表名
    ->set 列名 = 值,列名 = 值...->where 条件

update

语句可以分开写,这样不会写错,思路清晰。(老手写一长串亦可以)

-- 修改某个同学的中文成绩变更为60.
mysql>update exam_result
    ->set chinese =60->where name ='yuanye';
    
Query OK,1row affected (0.00 sec)Rowsmatched: 1  Changed: 1Warnings: 0

4.1 修改语句一次改多个列

-- 将某个同学的数学成绩改为70分,英语成绩改为65分update exam_result set math =70, english =65where name ='yuanye';

Query OK,1row affected (0.00 sec)Rowsmatched: 1  Changed: 1Warnings: 0

4.2 update可以搭配其他字句使用

update

可以搭配 limit,order by 等的字句一起使用

-- 将总成绩倒数三位同学英语成绩加20分
mysql>update exam_result
    ->set english = english +20->orderby chinese + math +english limit3;
Query OK,3rows affected (0.00 sec)Rowsmatched: 3  Changed: 3Warnings: 0

这里的使用是总分倒数三位同学,那么总分升序排序找出前三位同学,然后英语成绩分别都加20分。

如果里面有null ,那么null进行运算,还是等于null。

如果 update 没有指定条件语句,修改就会针对所有的记录生效。

update exam_result set english = english -10;

Query OK,9rows affected (0.00 sec)Rowsmatched: 9  Changed: 9Warnings: 0

这里他会针对所有 英语那一列 进行 - 10 操作。

五、删除操作

deletefrom 表名 where 条件;
-- 删除某位同学的考试成绩deletefrom exam_result where name ='yuanye';

Query OK,1row affected (0.00 sec)

如果没有 条件筛选条件语句,就会删除整张表 的记录,但是表名还是存在的。

deletefrom exam_result;

Query OK,8rows affected (0.00 sec)

六、约束

“约束”是数据库中重要的机制,保证数据的“完整性”,数据类型本身能进行一部分的数据校验工作。除此之外,“约束”也能进行一部分的数据校验工作,通过这些数据校验,就可以尽量避免出现一些“非法的数据”。

  • NOT NULL - 指示某列不能存储 NULL 值。
  • UNIQUE - 保证某列的每行必须有唯一的值。
  • DEFAULT - 规定没有给列赋值时的默认值。
  • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标 识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
  • CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略 CHECK子句。

6.1 not null

在这里插入图片描述

当你插入/修改的数据不符合约束的要求,那么这种操作就会被报错,避免了问题进一步的扩大。

6.2 unique

默认情况下的表,列都是可以重复的,但是使用

unique

就会保证这个列没有重复的值。(唯一)

在这里插入图片描述

mysql>insertinto student values(1,'zhangsan');
Query OK,1row affected (0.00 sec)

mysql>insertinto student values(1,'lisi');
ERROR 1062(23000): Duplicate entry '1'forkey'id'

党有 unique 约束的时候,进行插入之前,就会先去检测当且的列是否有重复的,有就会报错。

6.3 default

指定列的默认值。当指定的列插入的时候,如果这个列没有被指定特定的值,mysql就会给他设置一个默认值,默认的默认值就是null。

mysql>createtable student (id int, name varchar(20)default'321');
Query OK,0rows affected (0.01 sec)

mysql>insertinto student (id)values(1);
Query OK,1row affected (0.00 sec)

mysql>select*from student;+------+------+| id   | name |+------+------+|1|321|+------+------+1rowinset(0.00 sec)

这里我们把默认值修改为了 ‘321’,默认值可以我们自己灵活修改参数。

6.4 primary key

primary key 表示了一个记录(行)的身份标识。(相当于唯一 && not null)

在这里插入图片描述

mysql>insertinto student values(1,'yuanye');
ERROR 1062(23000): Duplicate entry '1'forkey'PRIMARY'

mysql>insertinto student values(null,'zhangsan');
ERROR 1048(23000): Column'id' cannot be null

从报错结果就可以看出,指定的列不能是null,指定的列是唯一的,不能重复。

一张表只能有一个主键:

mysql>createtable student (id intprimarykey, name varchar(20)primarykey);

ERROR 1068(42000): Multiple primarykey defined

设定了两个主键会报错误提示。

但是我们可以让多个列作为一个“联合主键”

主键的要求就是不能为null,也不能重复,在很多的场景下,主键都是设定在 id 上的单纯的整数。

我们可以借助 mqysql 提供的“自增主键”来解决这个问题,每次插入数据的售后不需要用户手动指定 id 的值 (1,2,3…),mysql会自动分配一个合适的值,这个值就是通过自增得到的。

自增主键: auto_increment

在这里插入图片描述

student 这张表有了

自增主键

的约束,那么他就会直接依次往前递增。

自增主键也可以用户手动指定值。

mysql>insertinto student values(5,'yuanye');
Query OK,1row affected (0.00 sec)

mysql>select*from student;+----+--------+| id | name   |+----+--------+|1| yuanye ||2| yuanye ||3| yuanye ||5| yuanye |+----+--------+4rowsinset(0.00 sec)

当再次插入一条mysql自增语句的时候,那么下一条记录就是6,二不是4.

mysql>insertinto student values(null,'yuanye');
Query OK,1row affected (0.00 sec)

mysql>select*from student;+----+--------+| id | name   |+----+--------+|1| yuanye ||2| yuanye ||3| yuanye ||5| yuanye ||6| yuanye |+----+--------+5rowsinset(0.00 sec)

6.5 foreign key (外键约束)

外键约束设计两张表,

一张是父表,一张是字表

  • 子表
mysql>select*from student;+----+----------+---------+| id | name     | classId |+----+----------+---------+|1| zhangsan |1||2| lisi     |2|+----+----------+---------+2rowsinset(0.00 sec)
  • 父表
mysql>select*from classes;+----+------+| id | name |+----+------+|1|100||2|101||3|102|+----+------+3rowsinset(0.00 sec)

显然父表里面对应的是三行,经过某一列的外键约束,那么子表里面插入了父表里面 那个列 不存在的 元素,就会报错。

mysql>createtable student
    ->(id intprimarykeyauto_increment,-> name varchar(20),-> classId int,->foreignkey(classId)references classes(id)->);

这段sql语句里面外键约束的就是student表中

classId

这一列,和classes表中

id

这一列,如果子表插入的元素

> 3

就会报错。

在这里插入图片描述

当前表列里面的内容个必须被 references 另外那个表的列里的内容包含。

mysql>insertinto student values(null,'123',4);

ERROR 1452(23000): Cannot addorupdate a child row: a foreignkeyconstraint fails (`aaa`.`student`,CONSTRAINT`student_ibfk_1`FOREIGNKEY(`classId`)REFERENCES`classes`(`id`))

外键约束就是把两张表绑在了一起,子表你不能随便乱改,父表你也不能随表乱改。

mysql>deletefrom classes where id =1;

ERROR 1451(23000): Cannot deleteorupdate a parent row: a foreignkeyconstraint fails (`aaa`.`student`,CONSTRAINT`student_ibfk_1`FOREIGNKEY(`classId`)REFERENCES`classes`(`id`))

七、表的设计

一种表的通用设计手段,首先我们要抓住实体 和 关系。

关系:就是多个实体之间对应的关系是什么样。

实体:问题场景中的一些“关键性“的名词。

找到了实体,实体和实体之间可能存在一些联系,这些联系就会影响到表的最终设计。

联系指的又是,”关系与关系之间的关系“,类似于一张二维表和另一张二维表之间的关系。

类型:

7.1、一对一

关系A中的

一条记录

对应关系B中的

一条记录

,关系B中的一条记录也对应关系A中的一条记录。

例如:学生表 和 用户表 …

7.2、一对多

关系A中的

一条记录

对应着关系B中的

多条记录

,关系B中的

一条记录

只对应关系A中的

一条记录

,这样的关系称为“从A到B的一对多关系“。

(班级对学生的关系是一对多)

在这里插入图片描述

7.3、多对一

关系A中的

一条记录

对应关系B中的

一条记录

,关系B中的

一条记录

对应关系A中的

多条记录

,这样称之为“从A到B的多对一的关系“。(学生对班级的关系是多对一)

在这里插入图片描述

7.4、多对多

关系A中的

一条记录

对应着关系B中的

多条记录

,关系B中的

一条记录

对应关系A中的

多条记录

例如:学生和课程,学生和老师之间的关系…

这种关系,两个表之间存在需要引入一个中间表

在这里插入图片描述

站在学生表的角度,张三选择了语文和数学;

站在了课程表的角度,数学被张三和李四选了。

这样子的表就形成了

多对多

的关系


铁汁们,觉得笔者写的不错的可以点个赞哟❤🧡💛💚💙💜🤎🖤🤍💟,收藏关注呗,你们支持就是我写博客最大的动力.

标签: 数据库 mysql sql

本文转载自: https://blog.csdn.net/qq_54219272/article/details/126530031
版权归原作者 鸢也 所有, 如有侵权,请联系我们删除。

“【MySQL 数据库 基础 Ⅱ】基础sql语句 Ⅱ”的评论:

还没有评论