详解mysql基本操作详细(二)
前言
本文类容
1、数据库的几大约束
2、表与表之间的关系
约束:
主键约束:
作用:为了保证数据的有效性和完整性 mysql中常用的约束:主键约束(primarykey)唯一约束(unique)非空约束(notnull)外键约束(foreignkey) 主键约束:被修饰过的字段唯一非空 注意:一张表只能有一个主键,这个主键可以包含多个字段 方式1:建表的同时添加约束格式:字段名称字段类型primarykey 方式2:建表的同时在约束区域添加约束 所有的字段声明完成之后,就是约束区域了 格式:primarykey(字段1,字段2) createtablepk01( idint, usernamevarchar(20), primarykey(id) ); insertintopk01values(1,'tom');--成功 insertintopk01values(1,'tom');--失败Duplicateentry'1'forkey'PRIMARY' insertintopk01values(null,'tom');--失败Column'id'cannotbenull createtablepk01( idintprimarykey, usernamevarchar(20), primarykey(id) );--错误的一张表只能有一个主键 方式3:建表之后,通过修改表结构添加约束 createtablepk02( idint, usernamevarchar(20) ); altertablepk02addprimarykey(字段名1,字段名2..); altertablepk02addprimarykey(id,username); insertintopk02values(1,'tom');--成功 insertintopk02values(1,'tomcat');--成功 insertintopk02values(1,'tomcat');--失败
唯一约束
被修饰过的字段唯一,对null不起作用 方式1:建表的同时添加约束格式:字段名称字段类型unique createtableun( idintunique, usernamevarchar(20)unique ); insertintounvalue(10,'tom');--成功 insertintounvalue(10,'jack');--错误Duplicateentry'10'forkey'id' insertintounvalue(null,'jack');--成功 insertintounvalue(null,'rose');--成功 方式2:建表的同时在约束区域添加约束 所有的字段声明完成之后,就是约束区域了 unique(字段1,字段值2...) 方式3:建表之后,通过修改表结构添加约束 altertable表名addunique(字段1,字段2);--添加的联合唯一 altertable表名addunique(字段1);--给一个添加唯一 altertable表名addunique(字段2);--给另一个添加唯一 //////////////// createtableun01( idint, usernamevarchar(20) ); altertableun01addunique(id,username); insertintoun01values(1,'tom');--成功 insertintoun01values(1,'jack');--成功 insertintoun01values(1,'tom');--失败Duplicateentry'1-tom'forkey'id'
非空约束
特点:被修饰过的字段非空 方式: createtablenn( idintnotnull, usernamevarchar(20)notnull ); insertintonnvalues(null,'tom');--错误的Column'id'cannotbenull
案例1一对多–创建用户表
createtableuser( idintprimarykeyauto_increment, usernamevarchar(20) ); --创建订单表 createtableorders( idintprimarykeyauto_increment, totalpricedouble, user_idint );
为了保证数据的有效性和完整性,添加约束(外键约束).
在多表的一方添加外键约束
格式:
altertable多表名称addforeignkey(外键名称)references一表名称(主键);
例如:
altertableordersaddforeignkey(user_id)referencesuser(id);
添加了外键约束之后有如下特点:
- 1.主表中不能删除从表中已引用的数据
- 2.从表中不能添加主表中不存在的数据
开发中处理一对多:
在多表中添加一个外键,名称一般为主表的名称_id,字段类型一般和主表的主键的类型保持一致,
为了保证数据的有效性和完整性,在多表的外键上添加外键约束即可.
案例2一对多–创建用户表
--创建商品表 createtableproduct( idintprimarykeyauto_increment, namevarchar(20), pricedouble ); --创建中间表 createtableorderitem( oidint, pidint );
–添加外键约束
altertableorderitemaddforeignkey(oid)referencesorders(id);
altertableorderitemaddforeignkey(pid)referencesproduct(id);
开发中处理多对多:
引入一张中间表,存放两张表的主键,一般会将这两个字段设置为联合主键,这样就可以将多对多的关系拆分
成两个一对多了
为了保证数据的有效性和完整性
需要在中间表上添加两个外键约束即可.
案例3-多表查询
笛卡尔积:
多张表无条件的联合查询.没有任何意思 selecta.*,b.*froma,b;
内连接
格式1:显式的内连接 selecta.*,b.*froma[inner]joinbonab的连接条件 格式2:隐式的内连接 selecta.*,b.*froma,bwhereab的连接条件
外连接
左外连接: selecta.*,b.*fromaleft[outer]joinbon连接条件; 意思: 先展示join左边的(a)表的所有数据,根据条件关联查询join右边的表(b),符合条件则展示出来,不符合以null值展示. 右外连接: selecta.*,b.*frombright[outer]joinaon连接条件; 意思: 先展示jion右边的表(a)表的所有数据,根据条件关联查询join左边的表(b),符合条件则展示出来,不符合以null值展示. 子查询: 一个查询依赖另一个查询.
以上所述是小编给大家介绍的mysql基本操作详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!