【MySQL】MySQL表的增删改查(进阶篇)——之约束条件

前言:

🌟🌟本期讲解关于MySQL表增删查改进阶篇,希望能帮到屏幕前的你。

🌈上期博客在这里:http://t.csdnimg.cn/cF0Mf

🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客

 

目录

📚️1.引言

📚️2.NOT NULL的使用

2.1添加数据约束

2.2修改数据约束 

📚️3.DEFAULT的使用

📚️4.UNIQUE的使用

4.1添加数据约束

4.2修改数据约束

📚️5.PRIMARY  KEY的使用

5.1存在多个primary key时 

5.2插入数据约束

5.3修改数据约束

5.4自增主键分配机制

📚️6.FOREIGN KEY的使用

📚️7.总结


 

📚️1.引言

      Hello!!!家人们,小编上期期讲解了关于增删查改的基础操作~~~,关于数据库表的增删查改有了一定的认知,小编这期就将深入讲解另一部分内容,即关于数据库增删查改的进阶操作之约束条件,大家准备好了吗~~~🥳🥳🥳;

讲解内容:

📍1.NOT  NULL:指示某列不能存储 NULL 值

📍2.UNIQUE:保证某列的每行必须有唯一的值

📍DEFAULT:规定没有给列赋值时的默认值

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

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

看不懂???没关系!! 且听小编进行讲解,包你学会!!! 

📚️2.NOT NULL的使用

SQL执行语句示范:

create table 表名(列名,列名 ONT NULL,......);

代码示范如下:

mysql> create table test99(id int not null,name varchar(10));
Query OK, 0 rows affected (0.01 sec)

2.1添加数据约束

如上我们在表的某个列添加了约束条件后,MySQL就可以进行判断我们写的数值是否合理。

添加时进行约束:

mysql> insert into test99 values(1,'孙悟空'),(null,'唐三藏');
ERROR 1048 (23000): Column 'id' cannot be null

mysql> desc test99;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+


mysql> insert into test99 values(1,'孙悟空'),(2,'唐三藏');
Query OK, 2 rows affected (0.00 sec)

注解:此时我们就可以看到这里唐三藏的数值id设置为NULL后,就无法进行添加进入数据库表中,那么此时我们进行表的结构查看后,NULL的值改为no了;

我们再次改变“唐三藏”的数值id后就能够进行数据的插入即添加了;

2.2修改数据约束 

和上述添加一样,修改时也会进行约束;

修改时约束:

mysql> update test99 set id=null where name='孙悟空';
ERROR 1048 (23000): Column 'id' cannot be null
mysql> -- 此时可以发现由于约束条件,不能修改

注意:此时小编就将“孙悟空”的数值id改为了null,此时就不能够完成修改这个操作;

📚️3.DEFAULT的使用

SQL执行语句:

create table 表名(列名 类型,列名 类型 default '默认的内容');

我们在不添加约束条件,查看表的结构:

mysql> create table student(id int,name varchar(10));
Query OK, 0 rows affected (0.01 sec)

mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(10) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

此时我们添加表之后,可以发现这里的Default默认为NULL,所以我们就能够对他进行操作;

添加约束条件:

mysql> create table student(id int,name varchar(10) default'未命名');
Query OK, 0 rows affected (0.02 sec)

mysql> desc student;
+-------+-------------+------+-----+-----------+-------+
| Field | Type        | Null | Key | Default   | Extra |
+-------+-------------+------+-----+-----------+-------+
| id    | int(11)     | YES  |     | NULL      |       |
| name  | varchar(10) | YES  |     | 未命名    |       |
+-------+-------------+------+-----+-----------+-------+
2 rows in set (0.00 sec)

mysql> insert into student(id) values(1);
Query OK, 1 row affected (0.02 sec)

mysql> select * from student;
+------+-----------+
| id   | name      |
+------+-----------+
|    1 | 未命名    |
+------+-----------+

注解:这里在添加约束条件后,再次查看表的结构,可以发现此时的default变为了‘未命名’,再次插入数据时,不给名字进行数据填入,此时就会默认为‘未命名’

📚️4.UNIQUE的使用

SQL执行语句:

create table 表名(列名 类型 unique.....)

约束代码如下:

mysql> create table student(id int unique,name varchar(10));
Query OK, 0 rows affected (0.02 sec)

4.1添加数据约束

这里在第二次添加数据时,会进行约束

mysql> insert into student values(1,'孙悟空'),(1,'猪八戒');
ERROR 1062 (23000): Duplicate entry '1' for key 'id'

注解:这里的报错就是说明id这个1被约束后,不能再次出现,重复了;

4.2修改数据约束

mysql> insert into student values(1,'孙悟空'),(2,'猪八戒');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> update student set id=1 where name='猪八戒';
ERROR 1062 (23000): Duplicate entry '1' for key 'id'

注解当我们成功添加进去两个数据之后,再次修改id为1,已经存在的id时,可以发现不能修改

📚️5.PRIMARY  KEY的使用

SQL执行语句:

create table 表名(列名 类型 primary key);

5.1存在多个primary key时 

由于一张表里只能存在一个primary key时,表里只能存在一个身份标识;

mysql> create table student(id int primary key,name varchar(10) primary key);
ERROR 1068 (42000): Multiple primary key defined

注解:这里会报错,即多次定义了primary key;

5.2插入数据约束

代码如下:

mysql> insert into student values(1,'猪八戒'),(null,'孙悟空'),(1,'沙悟净');
ERROR 1048 (23000): Column 'id' cannot be null
mysql> insert into student values(1,'猪八戒'),(1,'沙悟净');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

 注意:这里有两处报错,第一是id不能为空,第二处是这里的重复定义了id为1。所以这里的约束条件就是not null和unique的合并

5.3修改数据约束

 代码如下:

mysql> update student set id=1 where name='沙悟净';
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

mysql> update student set id=null where name='沙悟净';
ERROR 1048 (23000): Column 'id' cannot be null

注解:此时可以看到这里和上述的插入数据情况一样,小编就不再过多解释了;重复和null都是不能存在的;

5.4自增主键分配机制

代码实例如下:

mysql> create table student(id int primary key auto_increment,name varchar(10));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into student values(null,'孙悟空'),(null,'猪八戒'),(10,'孙悟空'),(null,'猪八戒');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0


mysql> select * from student;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | 孙悟空    |
|  2 | 猪八戒    |
| 10 | 孙悟空    |
| 11 | 猪八戒    |
+----+-----------+

注解

在primary key之后加入auto_increment可以实现主键自动分配;

主键最开始从1开始进行分配,若自主定义了id,就从定义id的最大值开始自主分配;

这里的自主分配是不能够定义约束在varchar类型的数据上;

📚️6.FOREIGN KEY的使用

这里的约束即为外键,可以用来建立两个表之间的联系;

SQL执行语句:

create table 表名(列名 类型,列名 类型,foreign key(被约束的列)references 父类表(参考列));

看读懂没关系,且听小编给你分析:

代码如下:

mysql> create table class(classid int primary key,name varchar(10));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into class values(1,'树莓一班'),(2,'树莓二班'),(3,'树莓三班'),(4,'树莓四班');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from class;
+---------+--------------+
| classid | name         |
+---------+--------------+
|       1 | 树莓一班     |
|       2 | 树莓二班     |
|       3 | 树莓三班     |
|       4 | 树莓四班     |
+---------+--------------+

 此时我们新建一个办班级,它的id和名字如上;

然后我们安排几个学生,那么此时学生的班级id就只能是上述班级其中之一,即这两个表位父子关系,那么此时我们就要使用foreign key约束条件,进行两个表的联系;

代码如下:

mysql> create table student(classid int,name varchar(10),foreign key(classid) references class(classid));
Query OK, 0 rows affected (0.00 sec)

那么此时就已经建立了联系;

那么是如何进行书写的呢???

此时我们在插入数据时,学生的班级id就不能够不是父类表的班级id之外了,这里小编就不再过多演示;

注解:

1.在指定列进行关联的时候,父类的这一类必须是主键或者是unique;

2.子类的与父类关联的列,插入和修改会被父类约束,但是其他的列,可以随意修改和插入;

3.在删除时,由于父类时子类表的参考,所以无法先删除父表,得先删除子类的表后,然后再次删除父类这个表。

📚️7.总结

💬💬小编这期总结了关于数据库表的操作的进阶,即在原有的基础上讲解了表的约束条件,当然,小编任然附上了相关代码,供小伙伴们参考~~~

🌅🌅🌅~~~~最后希望与诸君共勉,共同进步!!!


                                💪💪💪以上就是本期内容了, 感兴趣的话,就关注小编吧。

                                                               😊😊  期待你的关注~~~

评论 103
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值