MySQL学习笔记简单分享(3)

本文详细介绍了MySQL中的多表连接(内连接、左外连接和右外连接)以及各种约束(主键、唯一、外键和检查),并讨论了自增长字段的使用和规则。
摘要由CSDN通过智能技术生成

目录

Mysql多表连接

内连接

左外连接

右外连接

Mysql约束

1.primary key

2.unique

3.外键

4.check约束

自增长


Mysql多表连接

绝大多数时用 where 条件


内连接

INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。

隐式内连接:select --- from table1,table2 where 条件;

显式内连接: select --- from table1 inner join table2 on 连接条件;


左外连接

LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。

select dept.deptno,dname,loc,count from dept left join (select deptno,count(ename) as count from emp group by deptno)tmp on tmp.deptno = dept.deptno;

tab01 left join tab02 ... on 条件


右外连接

RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

tab01 right join tab02 ... on 条件


Mysql约束

约束用于确保数据库的数据满足特定的商业规则

mysql中约束包括:not null(非空) 、unique(唯一)、primary key(主键)、foreign key(外键)、check(检查)五种不指定为default


1.primary key

用于唯一标识表行的数据,当列定义为主键后,该列就不可以重复

​ id int primary key --标识id为主键

主键唯一且默认非空

一张表中只能有一个主键,但可以是复合主键

​ 实际开发中。每张表都应设计一个主键

​ create table tab(

​ id int,

name varchar(32),

​ email varchar(32),

​ primary key (id,name) //复合主键:id和name都相同才算重复不能添加

​ );


2.unique

​ 当一个列被定义unique,该列不可以重复

​ id int unique id数据唯一

unique字段数据可以为空null,且null可以添加多个,不造成重复

一张表可以有多个unique字段


3.外键

用于定义 主表和从表之间的关系

外键必须定义在从表上,并且主表必须有主键或者unique约束

外键约束的列的数据---必须在主表的主键列存在或者为null(unique约束时)

​ 创建主表

​ create table my_class(

​ id int primary key,

name varchar(32) not null default ''

​ );

​ 创建从表

​ create table my_stu(

​ id int primary key,

name varchar(32) not null default '',

​ class_id int,

​ foreign key(class_id) references my_class(id)

​ );

​ 主键列和外键列数据要都存在,否则添加失败

表的存储引擎要为Innodb,这样表才支持外键

外键删除行为:

no action:删除/更新父表时检查父表中字段是否有对应外键,如果有,不可删除

restrict:删除/更新父表时检查父表中字段是否有对应外键,如果有,不可删除(与no action一致)

cascade:删除/更新父表时检查父表中字段是否有对应外键,如果有,则也更新/删除外键在子表中的记录

set null:删除/更新父表时检查父表中字段是否有对应外键,如果有,则将外键在子表中的记录设置为null (要求子表该字段允许为null)

set default:父表有变更时,子表将外键所在列设置为一个默认值(InnoBD不支持)

例:alter table 表名 add constraint 外键名称 foreign key 外键列 references 父表(列名) on update cascade on delete cascade;//外键删除和更新行为


4.check约束

​ sql5.7不支持check,只做语法校验,但不会生效,oracle,sql server 生效

​ sal double CHECK (sal > 1000 and sal < 2000)

create table customer(

customer_id int,name varchar(32),address varchar(32),email varchar(32),sex enum('男','女') not null,card_id varchar(32),primary key(customer_id));

create table purchase(order_id int primary key,customer_id int not null,goods_id int not null,nums int not null default 0,foreign key (customer_id) references customer(customer_id),foreign key (goods_id) references goods(goods_id));


自增长

存在某一列,从添加记录时,自动增长

字段名 数据类型 primary key auto_increment

insert into ***(字段1,字段2...) values (null,'值') 为空是时填null 会自动增长

insert into *** (字段2,字段3...)valuees('值1','值2',...);不写自增长的字段

insert into *** values('null','值1','值2',....) ;也会自动增长

create table autocre(

-> id int primary key auto_increment,
-> email varchar(32) not null default '',
-> `name` varchar(32) not null default '');

insert into autocre values(null,'thank@qq.com','thank');

insert into autocre values(null,'mike@qq.com','mike');

insert into autocre (email,name) values('jxs@qq.com','jxs');


自增长字段一般和unique或primary key配合使用

自增长修饰的字段为整数型(小数极少使用)

自增长默认从1开始,想要默认其他值开始可以使用 : alter table 表名 auto_increment = 值

字段自增长也可以指定值

insert into autocre values(null,'thank@qq.com','thank'); //第一次插入数据,默认自增长为1

insert into autocre values(200,'mike@qq.com','mike'); //指定了200,该字段为200

insert into autocre (email,name) values('jxs@qq.com','jxs'); //默认从上一个最大的id开始算,现在id=201

不过一般来说,指定自增长的字段,就按照自增长的规则添加数据,不再指定值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值