MySQL键值的示例分析


这篇文章将为大家详细讲解有关MySQL键值的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 根据数据存储要求,选择键值index 普通索引unique 唯一索引fulltext 全文索引primary key 主键foreign key 外键索引是什么?—— 类似于书的目录—— 对表中字段进行排序—— 索引类型包括:Btree(二叉树)、B+tree、hash索引有点—开发云主机域名— 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性—— 可以加快数据的查询速度索引缺点—— 但对表中的数据进行增加、删除和修改的时候,索引也要动态的调整,降低了数据的维护速度—— 索引需要占物理空间使用规则—— 一个表中可以有多个 index 字段—— 字段的值允许重复,且可以赋 NULL 值—— 通常把做为查询条件的字段设置为 index 字段—— index 字段标志为 MUL建表时创建索引—— index(字段名), index(字段名) .. ..创建一个信息表,指定字段中的name和age作为索引(字段name和age中的值要进行排序)查看索引信息基本查看
详细查看mysql> show index from db2.t2; //下图是不加 G 的效果删除索引—— drop index 索引名 on 库名.表名;mysql> show index from db2.t2 G //只剩下索引name,索引age已被删除向库db2中的表t2中存入数据:索引排序的信息在 t2.frm 和 t2.ibd 文件中[root@DB ~]# ls /var/lib/mysql/db2注:没有设置索引的时,查询表数据是按照表顺序逐行进行匹配的;设置索引后,是按照索引的排序来进行查找的(如:BTree、B+Tree、hash)在已有的表里创建索引—— create index 索引名 on 表名(字段名);mysql> desc db2.stuinfo;mysql> show index from db2.stuinfo G; //查看索引的详细信息使用规则—— 字段值不允许重复,且不允许赋NULL值—— 一个表中只能有一个primary key字段—— 多个字段都作为主键,称为复合主键,必须一起创建—— 主键字段的标志是PRI—— 主键通常与 auto_increment 连用—— 通常把表中唯一标志记录的字段设置为主键[记录编号字段]建表时创建主键—— primary key(字段名)格式一:格式二:向表t3中插入数据在已有表里创建主键—— 格式mysql> select * from db2.t2;删除主键—— alter table 表名 drop primary key;注:移除主键前,如果有自增属性,必须先去掉创建复合主键—— alter table 表名 add primary key(字段名列表);注:多个字段都作为主键时,称为复合主键,作为主键的这几个字段里的值,在插入记录时不能同时重复。比如字段class有两个值都为classA,字段name的两个值不能都为tom,即字段name中不能有一样的名字,可以为tom和lucy,但不能都为tom创建复合主键,将class字段和name字段都设置为主键注:此时出现一个问题,若同一个班出现名字相同的两个人,然而class字段和name字段都为主键,由于这两个主键字段的值不能同时重复,此时数据是不能插入的。解决方案就是先删除这两个字段的主键,再删除表数据,然后在创建一个stu_num(学号)字段,设置stu_num、class、name字段一起做主键。1)删除主键:2)创建一个新字段stu_num:mysql> alter table db2.t5 add stu_num char(9) first; //添加一个新字段stu_num,并放在表的第一列mysql> select * from db2.t5; //由于要设置字段stu_num为主键,所以字段stu_num的值不能为NULL,所以我们要清空表数据3)清空表数据:4)在已有表里创建复合主键://通过加入学号stu_num字段为,让三个字段都为主键,解决同班同名数据插入的问题主键与auto_increment(自增) 连用注:要设置自增的前提是,字段必须为主键才可以设置自增;设置自增的字段必须是数值类型的,字符类型是不能自增的。示例:创建一个自增主键的表示例:如果清空表记录,在插入数据,那么字段stu_num的值是从1开始自增,还是从10开始自增呢?mysql> insert into db2.t6(name,age) values(null,”tom”,18); //主键不能为空,但此处我们给主键字段stu_num赋值为NULL,却不报错,原因是空就相当于与没有给字段stu_num赋值,没赋值所以就会以自增的方式进行赋值,所以此处赋值NULL不会报错mysql> select * from db2.t6;示例:通常把表中唯一标识记录的字段设置为主键,如记录编号字段mysql> select * from db2.stuinfo;外键功能—— 插入记录时,字段值在另一个表字段值范围内选择使用规则—— 表存储引擎必须是innodb—— create table 库名.表名(… …) engine=innodb; //指定表存储的引擎—— 插入记录的表的字段与被参照的表的字段类型要一致—— 被参照字段的值要唯一且不能为空,所以必须要是索引类型的主键(primary key)创建外键创建一个员工表作为参考表:创建一个工资表设置外键,以员工表作为参考表:mysql> insert into db2.gongzi values(3,20000); //给id为3员工发工资报错,原因:给gongzi表里字段id赋值3,但由于gongzi表设置了外键,将gongzi表的id字段参考了yuangong表的id字段,所以给gongzi表id字段赋值时,这个值必须要在yuangong表的id字段里面有,才能进行赋值。ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`db2`.`gongzi`, CONSTRAINT `gongzi_ibfk_1` FOREIGN KEY (`id`) REFERENCES `yuangong` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)同步更新将yuangong表中id字段值为2的改为8:mysql> select * from db2.yuangong;mysql> update db2.yuangong set id=8 where id=2; //将yuangong表中id字段的2改为8,同步更新表gongzi表id字段为2的记录mysql> select * from db2.yuangong;mysql> select * from db2.gongzi; //发现yuangong表的id字段值从2改为8后,gongzi表的id字段的值也从2变为8同步删除将yuangong表中id字段值为8的删除掉:mysql> select * from db2.gongzi; //发现yuangong表的id字段值为8被删除后,gongzi表的id字段值为8的也被删除注意事项注:如上所示,字段id为3的被重复赋值,且字段id也被赋空值。因为参考表yuangong表里的字段id里面的值有1和3,所以gongzi表中的字段id就可以重复赋值1或3。这样赋值在生产环境中很不合理,所以我们通过将gongzi表中的id字段设置为主键,这样就能解决重复赋值和赋值空值的问题。1)删除gongzi表的数据2)将字段id设置为主键mysql> desc db2.gongzi;3)进行赋值测试删除外键—— alter table 库名.表名 drop foreign key 外键名;mysql> show create table db2.gongzi;//注:红线圈起来的地方就是外键的名称mysql> alter table db2.gongzi drop foreign key gongzi_ibfk_1; //删除外键mysql> show create table db2.gongzi; //查看创建表的命令,发现没有创建外键的记录了此时我们就可以插入除了yuangong表id字段的值范围以外的值了由于gongzi表的id字段还是主键,所以不能赋重复的值和空值关于“MySQL键值的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

相关推荐: MySQL执行计划中的各个参数及含义是什么

本篇文章给大家分享的是有关MySQL执行计划中的各个参数及含义是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。显示这一行的数据是关于哪张表的。Id完全相同,都是1,并且select_type的…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/28 20:41
下一篇 06/28 20:41

相关推荐