MySQL的增删改查(进阶)--上

发布时间:2023年12月20日

1. 数据库约束

1.1 约束类型

????????NOT NULL - 指示某列不能存储 NULL 值。

????????UNIQUE - 保证某列的每行必须有唯一的值。

????????DEFAULT - 规定没有给列赋值时的默认值。

????????PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

????????FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

????????CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略 CHECK子句。

? ? ? ? 下面将详细讲解一下以上所提到的约束类型;?

1.2 NOT NULL约束

????????创建表时,可以指定某列不为空

? ? ? ? 如下我们先创建一个chengyuan表,我们对里面的id列进行约束为不能为null;

?????????创建代码如下:

DROP TABLE IF EXISTS chengyuan;
CREATE TABLE chengyuan (
	id INT NOT NULL,
	score double,
	name VARCHAR(20),
	qq_mail VARCHAR(20)
);

? ? ? ? 下图为我们创建的chengyuan表结构的明细,可以看到id行列是显示不可为null的

????????我们通过给id列插入null数据试一下:

? ? ? ? 报错显示:id列不能为null;

1.3 UNIQUE:唯一约束

????????指定表中的score列为唯一的、不重复的

????????下面我们重新设置一下表结构,对id进行约束为唯一约束,代码如下:

DROP TABLE IF EXISTS chengyuan;
CREATE TABLE chengyuan (
	id INT NOT NULL,
	score double UNIQUE,
	name VARCHAR(20),
	qq_mail VARCHAR(20)
);

? ? ? ? 查看表结构进行可以看到,score列发生了明显变化,如下图所示:

?????????我们通过给score列插入相同的数据数据试一下:

? ? ? ? 报错信息显示我们对于chengyuan表插入了相同的score数据;

1.4 DEFAULT:默认值约束

????????指定插入数据时,若列为空,则为默认值

????????重新设置一下chengyuan表,对name进行默认值约束,若为null,则为默认值:委婉待续

? ? ? ? 且具体代码如下:

// 重新设置学生表结构
DROP TABLE IF EXISTS chengyuan;
CREATE TABLE chengyuan (
	id INT NOT NULL,
	sn INT UNIQUE,
	name VARCHAR(20) DEFAULT '委婉待续',
	qq_mail VARCHAR(20)
);

? ? ? ? 查看表结构:

//Default(默认)列的name行不再为null,而为我们设置的默认值“委婉待续”

? ? ? ? 进一步测试:

? ? ? ? 我们在插入的时候,没有对name赋值,他会使用我们的默认值;

????????注意事项:只适用于指定列插入数据,且该列不是受约束的列?

1.5 PRIMARY KEY:主键约束

????????指定某一列为主键

?????????主键是关系表中记录的唯一标识,使用主键应注意以下几点:

? ? ? ? 1、主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据。这是唯一性原则。

? ? ? ? 2、一个字段名只能在联合主键字段表中出现一次。

? ? ? ? 3、联合主键不能包含不必要的多余字段。当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。这是最小化原则
? ? ? ?

????????创建主键代码具体如下:

// 重新设置学生表结构
DROP TABLE IF EXISTS chengyuan;
CREATE TABLE chengyuan (
	id INT PRIMARY KEY,
	sn INT UNIQUE,
	name VARCHAR(20) DEFAULT '委婉待续',
	qq_mail VARCHAR(20)
);

? ? ? ? 查看表结构:

????????我们可以简单理解为:主键是 NOT NULL 和 UNIQUE 的结合

q:主键不允许重复,怎样保证呢?

a:Mysql自身就有一种机制,叫做“自增主键”,意味着当前的id,不需要用户自己指定,可以交给数据库,让数据库自己分配。---数据库按照自增的方式自增。自增主键务必是整数。同时id也可以自己手动插进去,但是要确保插入的结果是不重复的。但是当手动之后自增主键后,id接着上个数字id自增。

1.6 FOREIGN KEY:外键约束

????????外键用于关联其他表的主键或唯一键

????????语法如下:

foreign key (字段名) references 主表(列)

????????MySQL 外键约束(FOREIGN KEY是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

????????外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。

????????主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。

?????????

????????定义外键时,需要遵守下列规则:

? ? ? ? 1、主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。

? ? ? ? 2、必须为主表定义主键。

? ? ? ? 3、主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。

? ? ? ? 4、在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。

? ? ? ? 5、外键中列的数目必须和主表的主键中列的数目相同。

? ? ? ? 6、外键中列的数据类型必须和主表主键中对应列的数据类型相同。

? ? ? ? 下面通过实例来了解外键;

? ? ? ? 1、创建队伍表teamss,id为主键

DROP TABLE IF EXISTS teams;
CREATE TABLE teams (
	id INT primary KEY auto_increment,
	name VARCHAR(20),
	desc1 VARCHAR(100)
);

? ? ? ? 2、创建成员表chengyuan,一个成员对应一个队伍,一个队伍对应多个成员。使用id为主键,teamss_id为外键,关联队伍表与成员;

1.7 CHECK约束

? ? ? ? 略(mysql5版本并不支持这个操作)

2. 表的设计

? ? ? ? 下面主要讲解了表在后期设计时,用到的模型;

2.1 一对一

? ? ? ? 像每一个人都有固定的身份证号

2.2 一对多

? ? ? ? 一个班级里面存放多个学生的相关数据;

2.3 多对多

ps:本篇的内容就到这里了,如果大家感兴趣的话,就请一键三连哦!!!

? ? ? ? 关于mysql进阶的内容委婉待续;

文章来源:https://blog.csdn.net/2202_76101487/article/details/135097103
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。