前言:
🌟🌟本期讲解关于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.总结
💬💬小编这期总结了关于数据库表的操作的进阶,即在原有的基础上讲解了表的约束条件,当然,小编任然附上了相关代码,供小伙伴们参考~~~
🌅🌅🌅~~~~最后希望与诸君共勉,共同进步!!!
💪💪💪以上就是本期内容了, 感兴趣的话,就关注小编吧。
😊😊 期待你的关注~~~