- 个人主页:努力学习的少年
- 版权: 本文由【努力学习的少年】原创、在CSDN首发、需要转载请联系博主
- 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦
目录
一.表操作
1. 插入数据
2. 查询
3.结果去重
4.where条件
5. 结果排序
6.筛选分页显示
7. 修改行数据
8.删除数据
9.清空表
二.表的约束
1.属性含义
2.设置非空约束
3. 设置字段的默认值
4.设置字段描述
5.zerofill
6.设置主键约束
7.复合主键
8.设置字段值自动增加
9.唯一键
10.外键及其外键约束
如下的test表,接下来我们会对它进行操作。
全量插入数据,往表中插入所有数据段的数据,不需要在表名后面指定数据段。
insert into 表名 values(数据,数据....);
指定数据段的进行插入数据,需要在表名后面指定数据段。
insert into 表名(数据段,数据段) values(数据,数据);
将指定数据段的数据插入到test表中,表名后面需要跟上指定插入数据段的类型。
多行数据插入,在values后面用多个括号插入数据
实例:同时插入多条数据进test表中。
全字段查询
select * from 表名;
" * "代表的是表中的所有字段。
实例:查看reports表中的所有字段的信息。
指定字段查询
select 字段,字段 from 表名;
实例:只查看reports中的id和name的信息
查询字段为表达式
如果我们想算reports中所有人的总分,那么我们可以用chinese+english+math表达式算出来。
给表达式取别名
直接在表达式后加上别名即可,如上,我们在chinese+english+math表达式后面加上总分,则表中显示出来chinese+math+engish会被替换为总分。
如果想要将查询的字段中不包含重复数据,可以在字段的前面加上distinct
在上面的表中,我们可以看到math是有重复了,但是我们想要看到去重math结果,所以我们可以在math前面加上distinct.
where是用来筛选行数据的条件,例如,我们要表中筛选出math是大于60分,那么我就需要使用where进行筛选。
where筛选的运算符分为比较运算符和逻辑运算符。
比较运算符
逻辑运算符
实例:找出reports表中数学大于90分的同学 。
实例:找出reports表中的数学成绩在[100,120]区间。
实例:查找姓张的同学。
like是模糊匹配,其中” % "能够匹配到多个字符(包括0个)字符。
实例:查找张某同学。
ps:“_"只匹配到一个字符。
实例:查找语文成绩大于英语成绩的同学。
实例:筛选出总分在300分以下的同学
实例:语文成绩小于100分,且不是姓张的同学。
order by能够将筛选结果进行排序,order by语句默认排的是升序。
实例:将reports表中的语文成绩排一个升序。
order by 语句后面可以加上ASC或者DESC,ASC为升序,DESC为降序。
实例:将reports表中的语文成绩排一个降序。
实例:查询同学的各门成绩,依次按照语文成绩,数学成绩,英语成绩排一个降序。
实例:查询同学的成绩,由高到低
表达式的别名是可以出现在order by语句后面。
查询的过程:
where语句执行选择出行数据->进行select 的要求进一步筛选出列的数据后表达式->进行 order by对数据进行排序->显示阶段。
因为select是在where的后面,在order by的前面,所以别名是不能出现在where语句中,能够出现在order by语句中。
在语句的后面加上limit n;显示多少行,如果我们在查询一个未知表时,最后加上一条limit 3,防止表中的行数据太多,导致数据库卡死。
实例: 查询同学的成绩,由高到低,只显示成绩前3名的同学
update 表名 set 字段名=数据,字段名=数据.... where 语句;
实例:将关羽的数学成绩改为110分,语文成绩改为100分。
如果不加where进行筛选,则会导致表中字段下的所有数据都会被改。
update reports set math=math+30 order by chinese +math+english limit 3
order by chinese+math+english limit 3.筛选出总分最后三名的同学.
set math=math+30:将数学成绩加上30分;
delete from 表名 筛选条件;
实例:删除总分倒数三名的数据。
delete from reports order by chinese+math+english limit 3;
order by chinese +math +english limit 3;筛选出总分倒数三名的同学。
truncate 表名;
实例:清空 test1表中的所有数据
如果使用turncate清空表,会重置AUTO_INCREMENT,AUTO_INCREMENT属性下面讲解。
如果使用的是delete清空表,则不会重置ATUO_INCREMENT中的数据
delete from test1;清空test1表
desc person;查看person表的字段属性。
当数据表中希望某个字段的值不希望被设置为NULL时,则可以在创建数据表的时候在该字段的后面加上"NOT NULL“约束条件,保证所有记录中该字段都有值。
实例:创建test表使id字段不能为空,name可以为空。
null的值为NULL保证该字段都有值,如下,如果只插入name是插入不成功,因为id字段被设置为NOT NULL,插入的数据id必须要有值。
当为数据库中插入一条新记录时,如果没有为某个字段赋值,尼玛数据库系统就会自动为这个字段插入默认值。在创建数据库时在某些字段后面加上" DEFAULT 默认值 "。
实例:创建一个test1表,name中包含张三默认值。
当我们只插入id字段的时候,则name的值默认是"张三".
如果一个字段同时被设置非空值和默认值,那么该字段的非空属性就会失去效果,因为每次插入的值都有一个默认值,不会导致该字段的值是空。
字段描述是没有实际含义,专门用来描述字段,是给程序员查看字段的含义。在创建数据库时在某些字段后面加上" comment 字段描述"。
实例:创建一个test表,用comment来描述id和name字段。
查看表中字段描述指令show create table 表名;
很多人在学数据库的时候,很多人对字段类型后面的长度很迷茫。例如int(11),11中这个数字它不是代表的类型大小,而代表的的是最小数据类型的宽度,当然前提得有设置zerofill这个属性..
实例:将test表中id的属性类型的最小宽度设置为5,且设置为zerofill属性,插入一个23,发现前面补了3个0.
总结:只有当字段为zerofill属性的时候, 字段属性后面的数字才有效,如果插入的数据不足为最小宽度,前面会补0.
当想用数据库表中的某个字段来唯一标识所有记录时,则可以使用主键进行约束进行设置。主键约束在创建表时为某些字段加上 " PRIMARY KEY" 约束条件。表中的只能有一个字段能被设置为主键,且被设置的主键的字段能够标识字段中所有数据的唯一性。
实例:创建一个test3表,将id设置为主键
被设置主键的字段中key属性列中会出现PRI,NULL被设置为NO。被设置为主键的字段中的数据不能重复,不能为空,一张表中只能有一个主键。
如上:因为id被设置为主键,所以表中的id字段不能出现相同的数据,如果重复插入,则会插入失败。
复合主键是让多个字段来标识其唯一性。
例如:在网络中,会使用ip+port来标识唯一的进程。
创建复合主键需要在创建表的时候需要最后加上一个 primary key(字段名,字段名...);
实例:创建test4表,使ip和port是复合主键。
被设置的复合主键的字段中,不能出现所有字段都相同的数据。
如下,表中不能同时出现ip和port都相同的数据,否则会插入失败。
其出现ip相同,port不同的数据,或者 可以出现 ip不同,port相同的数据。
auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同值。它需要与主键搭配使用,作为主键值。
实例:创建一个test_final表,将id字段设置为自增长属性。
ps:将字段设置为自增长属性,同时需要将其字段设置为primary_key属性,否则将会创建失败。
创建表test_final,查看表中字段属性时,可以看到id字段中的Extra中有一个auto_increment属性。
接下来我插入两个数据,不给id插入值,由于id是自增长字段,所以插入的数据如果不给id字段值,那么id值会被系统触发,系统会从当前的字段中的最大值加1。
校园中每一学生中都存在大量唯一性的数据,学号,身份证号,qq号,微信号。。。
如果只有一个主键来设置唯一性是远远不够的,所以就有唯一键来表示其它数据的唯一性。
设置唯一键,需要在字段的后面加上"unique".
实例:创建一个test表,将id设置为自增长属性,qq设置为唯一键。
外键是用来定义主表与从表之间的关系:外键的约束主要定义在从表上,主表则必须是有主键约束或unique约束,当定义外键后,要求外键列数据必须在主表的主键列存在或为null。
如下:其中test_fial表表示的是期末排名,class_desc表表示的是班级id及其描述。test_final中的class_id被称为外键,因为它是与class_desc表中的id建立映射关系的。test_final表中的class_id字段中的数据必须存在class_desc表的中id值中,如果不存在,则插入的数据会失败,这就是外键约束,如下:test_final表中的class_id不能是4,因为class_desc表中id的没有4这个班级。
实例:创建主表class_desc与从表test_final,并让让test_final表中的class_id与class_desc表中id建立约束关系。
创建主表class_desc
查看从表test_final中字段的属性,如果字段被设置有外键,则key属性列中会有MUL值。
往test_final中插入数据,如果往class_id字段中插入的数据是4,则会插入失败,因为class_id受到了class_desc表中id的约束。
如何理解外键约束?
如果在从表test_final中的class_id没有与class_desc中的id建立外键约束的关系,那么就有可能class_id就会出现class_desc中id没有出现过值,如果没有建立约束的关系就有可能出现很大的问题,外键约束能够保证从表test_final中的class_id字段下数据都在class_desc表中的id的范围内。
例如:一个学校只开了3个班级,分别是1,2,3班,但是如果在期末成绩表中出现了一个4班的学生,那么这很明显就会有问题,因此我们需要通过外键约束来保证数据的正确性和完整性。