(昨天发过一次,但是觉得太少也比较水,所以今天就重新写一遍之后加一点内容)
先总结一下上面一篇所讲的内容。
1.新增:
insert into 表名 values(列的值...);
还可以支持值插入部分数值,或者同时插入多行数据。
2.查询
2.1.全列查询
select * from 表名;
2.2.指定列查询
select 列名(可以是多个列,可以用,来连接) from 表名;
2.3.指定表达式
select 表达式 from 表名;
往往是列和列之间的运算,得到的结果是一个临时表,不会影响原始的数据。
2.4.指定别名
为了使得临时表当中的首列更加方便简洁,此处的别名就相当于查询结果的临时表的列名
select 表达式 as 别名 from 表名;
2.5.去重
select distinct 列名 from 表名;
通过该代码就会根据列的值,来进行去重。
2.6.排序
select 列名 from 表名 order by 列名/表达式 asc/desc;
2.7.条件
select 列名 from 表名 where 条件;
2.8.分页查询
select 列名 from 表名 limit N offset M;
从M开始,返回N个数据。
下面开始我们今天的内容。
一.修改
当我们输入表中的数据出现问题或者要对表中的数据进行修改的时候,可以进行该操作。
代码:update 表名 set 改成的内容 where 条件。
-- 将孙悟空同学的数学成绩变更为 80 分
二.删除
delete from 表名 where 条件;
我先插入了两个没有作用的元素,之后对第9个元素进行删除。
三.数据库的约束
约束就是数据库在使用的时候,对于里面能够存的数据提出的要求和限制。这些约束都是针对某个列单独设置的,不同的列之间没有影响。
3.1.约束类型
NOT NULL - 指示某列不能存储 NULL 值。(如果尝试插入空值,就会直接报错)
UNIQUE - 保证某列的每行必须有唯一的值。(数据唯一,插入重复的数据就会直接报错)
DEFAULT - 规定没有给列赋值时的默认值。(约定一个默认值)
PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标
识,有助于更容易更快速地找到表中的一个特定的记录。(主键约束,相当与数据的唯一身份标识,类似于身份证)
FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。(外键,描述的两个表之间存在的关系。表1里面的数据必须在表2里面存在)
CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略CHECK子句(指定一个条件,通过一个条件来对值进行判定)注:我是使用mysql来进行的代码展示,但是在mysql里面不支持check。所以就只能简略的讲一下。
3.2.null约束
null可以使得当输入的数据不可以为空。下面我用实际的代码来展示一下。
从该代码中可以看出,当我设置了id被设置了not null 代表我们输入数据时候必须要有id。
在desc 之后我们会发现,null里面已经从yes变成了NO,代表这边必须要输入数据。
当然,我们不仅仅可以值设置id为not null ,我们其他的也可以都设置成not null.
3.3.unique 唯一约束
从该代码中可以看出,当我们对数据进行了unique之后,可以发现当有重复的数据进行输入的时候就会进行报错。
我们也会发现Key里面也多出了UNI的标识来代表该数据不可以被重复。
同样的,我们可以给多列设置上默认值。
3.4.default 默认值约束
当我们输入的数据为null时,通过该操作可以使得default输入的值进行赋值。
其实在mysql中是有默认的默认值的,默认的默认值为null。
通过该代码可以看出,当我们没有插入name的时候,会有name的默认值为null。
在该代码中,我将没有输入的name设置成了匿名,当我们没有输入name 的时候,系统会自动给我们加上我们设置的默认值。
同样的,我们可以给多列设置上默认值。
3.5.primary key 主键约束
通过该代码我们可以看出,当我们对一列进行了主键约束之后,该列就不可以为空,并且也不可以重复,在desc上我们可以看出,NULL里面被设置了NO,Key里面也有PRI。
关于主键,典型的用法就是,直接使用1.2.3.4.整数递增的方式来进行表示
mysql里面对于这种递增的主键是有内置的支持的,称为“自增主键” 。
当我们设定好自增主键之后,此时插入的记录,就可以不指定 自增主键的值了(直接用null来表示),交给mysql,当我们中途修改了值之后,之后当我们继续输入null的时候,自增主键会从我们输入的值开始继续向后递增。
和前面的不同的是,一个表当中只可以有一个主键约束,这一点十分重要。
3.6.foreign key: 外键约束
外键约束是针对两张表,进行了关联
这边我创建两个表,一个是学生表,一个是班级表,之后用学生表来关联班级表。
代码比较长,可能看不清,下面我单独把代码打出来:
create table student(studentId int primary key auto_increment,name varchar(50),classId int,
foreign key(classId) references class(classId);
下面我来解释一下这段代码:我们是用学生表中的班级Id来关联班级表中的班级Id,所以在学生表中创建完classId int,之后用foreign key(classId)references class(classId)。来关联class表中的classId。
外键约束,描述的是两个表的两个列之间的依赖关系,子表依赖于父表(子表引用自父表)要求子表中对应的记录得在父表中存在。
下面我就插入一些数据来体验一下关联得过程。
先查看一下表结构,之后我先插入了两条记录,但插入张三和李四得时候,classId用1和2的时候没有问题,但是当我用李五的时候,100在父表中不存在,所以就进行了报错。
同样的我们也没有办法修改学生表中班级Id的信息为不存在的班级。
所以说不仅仅是新增的时候要考虑到外键约束,新增成功的数据如果进行修改,也一样是会存在问题。
我们上面都在介绍的是父表约束子表,其实子表也在约束着父表。
通过该操作我们可以看出,当我们在子表存入数据和父表当中的一些数据产生依赖的时候,是不可以对父表中的数据进行删除的。只有不被依赖的数据可以进行删除。
外键约束的工作原理:在子表中插入新的记录的时候,就会根据对应的值,在父表中先查询,查询到之后才能够执行后续的插入