MySQL的基础(二)

函数:

MySQL是一款关系型数据库,支持使用函数来处理数据。以下是MySQL中可用的一些常用函数:

  • 字符串函数:例如CONCAT、SUBSTRING、UPPER、LOWER等
  • 数学函数:例如ABS、CEIL、FLOOR、ROUND等
  • 日期和时间函数:例如NOW、YEAR、MONTH、DAY等
  • 聚合函数:例如SUM、AVG、COUNT、MAX、MIN等
  • 控制流函数:例如IF、CASE、COALESCE等

这些函数可以在SELECT语句中使用,以帮助您查询和处理数据。例如,您可以使用CONCAT函数将两个字符串连接在一起,使用SUM函数计算数据列的总和,或使用IF函数根据条件返回不同的值。

有些函数需要传递参数,例如SUBSTRING函数需要指定要截取的字符串和要开始截取的位置。其他函数可能不需要参数,例如NOW函数返回当前日期和时间。您可以在MySQL文档中找到更多有关每个函数及其参数的详细信息。

字符串函数

CONCAT(S1,S2,…Sn)字符串拼接,将S1,S2,… Sn拼接成一个字符串

LOWER(str)将字符串str全部转为小写

UPPER(str)将字符串str全部转为大写

LPAD(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度

RPAD(str,n,pad)右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
TRIM(str)去掉字符串头部和尾部的空格

SUBSTRING(str,start,len)返回从字符串str从start位置起的len个长度的字符串

select  concat('he','llo');
select lower('HELLo012');
//左填充可以实现以‘0’为前导,如excel一样

select  lpad('0123',5,'-');
select  rpad('0123',5,'-');
select trim(' _1 hello MySQL 1');
select  substring('helloworld',1,3);

数值函数

CEIL(×)向上取整

FLOOR(×)向下取整

MOD(Xy)返回x/y的模

RAND()返回0~1内的随机数

ROUND(x,y)求参数x的四舍五入的值,保留y位小数

日期函数

在这里插入图片描述

流程函数

在这里插入图片描述

约束

常见的约束有非空约束 唯一约束 主键约束 默认约束 外键约束
primary key:存在且唯一;unique:只需唯一,不一定存在

1.非空:是否可以存在null值

2.唯一:不重复

3.主键:非空的,唯一的

4.默认:

5.检查:check检查约束是否符合

6.外键:至少两张表,保证数据的一致性和严谨性
外键:其他表中的主键字段

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

中间不加任何符号,直接空格

id的自动增长:

主键:一个表中,只能有一个字段作为主键,并且不能为NULL,且值是唯一的(可以多列作为复合主键,当所有设置为复合主键的列都相同时视为唯一,常用于多对多的表中)。
在这里插入图片描述

不允许name为NULL值,但不要是字符串的null就行

在这里插入图片描述

唯一约束

唯一键(唯一约束):一个表中可以有多个唯一键,唯一键的值可以为NULL,但值必须保证唯一,即NULL值在表中只能出现一次,其它非NULL值也必须是唯一的。唯一键会隐式地创建唯一索引。

在这里插入图片描述

实现同样效果的

在这里插入图片描述

外键约束

外键是用来建立两张表之间的关联关系,确保数据的一致性和完整性。具有外键的表被称为子表,而拥有被引用作为主键的表被称为父表。

然而,尽管外键约束可以确保数据的完整性,但在某些情况下,它可能会对查询性能产生一定影响。这是因为在进行插入、更新或删除操作时,数据库需要检查外键约束以确保数据的一致性,这可能会增加操作的时间开销。

另外需要注意的是,外键仅仅是在逻辑上的关联关系,并不一定在数据库层面实际存在。数据库本身并不强制要求使用外键约束,因此在某些情况下,开发人员可能选择不使用外键约束。然而,在大多数情况下,使用外键约束是推荐的做法,以确保数据的完整性和一致性。

如果您希望在数据库层面建立外键关联,可以使用ALTER TABLE语句来添加外键约束。这样,在执行相关操作时,数据库会自动检查并处理外键约束,以保证数据的一致性和完整性。

语法

(1)创建的时候就添加
create table 表名(
	字段名 数据类型,
	[constraint] [外键名称] foreign key(外键字段名)references 主表(主表列名)
	);
(2)已经存在表结构
alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表列名);

蓝色小钥匙–外键

在这里插入图片描述

(3)删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

删除、更新

上述是关于外键约束时常见的触发器选项,它们用于定义当父表中的行被删除或更新时,子表应该如何处理相应的外键关联。

下面对各个选项进行简要说明:

  • NO ACTION/RESTRICT:当在父表中删除或更新记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。这两个选项的行为是一致的。
  • CASCADE:当在父表中删除或更新记录时,首先检查该记录是否有对应外键,如果有,则同时删除/更新外键在子表中的相关记录。
  • SET NULL:当在父表中删除记录时,首先检查该记录是否有对应外键,如果有,则将子表中该外键设置为NULL。这就要求外键允许取NULL值。
  • SET DEFAULT:当父表发生变更时,子表将外键列设置成一个默认的值。然而InnoDB存储引擎并不支持此选项。
  • 不采取行动:与NO ACTION/RESTRICT的行为是一致的,即当在父表中删除或更新记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。
  • 限制:与NO ACTION/RESTRICT的行为是一致的,即当在父表中删除或更新记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。
  • 级联:与CASCADE的行为是一致的,即当在父表中删除或更新记录时,首先检查该记录是否有对应外键,如果有,则同时删除/更新外键在子表中的相关记录。
  • 设置为空:与SET NULL的行为是一致的,即当在父表中删除记录时,首先检查该记录是否有对应外键,如果有,则将子表中该外键设置为NULL。这就要求外键允许取NULL值。
  • 设置默认值:与SET DEFAULT的行为是一致的,但InnoDB存储引擎不支持该选项。

不同的选项适用于不同的场景和需求,根据实际情况选择适合自己的选项可以更好地保证数据的完整性和一致性。

语法

以下是在MySQL中定义外键约束时的一般语法:

ALTER TABLE 子表
ADD CONSTRAINT 外键名称
FOREIGN KEY (子表外键列) 
REFERENCES 父表 (父表主键列)
[ON DELETE 动作]
[ON UPDATE 动作];
  • "子表"是包含外键的表名。
  • "外键名称"是您为外键约束指定的一个唯一名称。
  • "子表外键列"是子表中与父表关联的列名。
  • "父表"是被引用作为主键的表名。
  • "父表主键列"是父表的主键列名,它与子表的外键列相关联。

"[ON DELETE 动作]“和”[ON UPDATE 动作]"是可选项,用于指定在父表中删除或更新记录时的动作。这些动作可以是以下之一:

  • CASCADE:级联操作,在父表上执行删除或更新操作时,同时删除/更新子表中的相关记录。
  • SET NULL:将子表中的外键值设置为NULL(要求该外键允许取NULL值)。
  • SET DEFAULT:将子表中的外键值设置为默认值(InnoDB不支持此选项)。
  • NO ACTION/RESTRICT:不采取行动,阻止对父表的删除或更新操作。

示例:
假设有两个表,一个名为"orders",另一个为"customers"。我们想在"orders"表中添加外键约束,使其引用"customers"表的主键"customer_id"。如果父表中的记录被删除或更新,我们希望禁止对子表进行相应的操作。

ALTER TABLE orders
ADD CONSTRAINT fk_customer
FOREIGN KEY (customer_id)
REFERENCES customers (customer_id)
ON DELETE RESTRICT
ON UPDATE RESTRICT;

这将在"orders"表上创建一个名为"fk_customer"的外键约束,将"customer_id"列与"customers"表中的"customer_id"列关联起来,并设置了NO ACTION/RESTRICT选项来限制删除和更新操作。

图形化页面操作

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_74154295/article/details/134212608