Mysql学习笔记(查询数据库/表格、建表约束、三大范式、四种连接、事务)

目录:

一、查询数据库/表格

二、Mysql的建表约束

1.主键约束

2.联合主键

3.自增约束

4.唯一约束

5.非空约束

6.默认约束

7.外键约束

三、Mysql的三大设计范式

1.第一范式

2.第二范式

3.第三范式

四、Mysql的四种连接查询

1.内连接

2.外连接(左连接、右连接、完全外连接)

五、Mysql的事务

1.事务的四种特征

2.隔离性的四种情况


一、查询数据库/表格

1.查询数据库服务器中的所有数据库:show databases

2.查询数据库中的所有表格:show tables

二、Mysql的建表约束

1.主键约束

它能够唯一确定一张表中的一条记录,该字段不重复且不能为空,创建表时如果忘记添加主键,可以使用命令:alter table (表名) add primary key (属性名)来增加主键,alter table (表名) drop primary key来删除主键,alter table (表名) modify (属性名+变量类型) primary key来修改主键。

2.联合主键

多个字段联合组成的主键,只要联合的值不完全重复即可,primary key(属性名,...)

3.自增约束

和主键约束联合使用后可以自动累加ID值(auto_increment)

4.唯一约束

约束修饰的字段的值不能重复alter table (表名) add unique (属性名),多个元素联合则类似于联合主键,只要联合值不重复就可以。alter table (表名) drop index (属性名)删除。alter table (表名) modify (属性名+变量类型) unique来删除主键。

5.非空约束

修饰的字段不能为空NULL(not null)

6.默认约束

当我们插入字段值的时候,如果没有传值,就会使用默认值,例如age int default 10,传了值就不会是默认值。

7.外键约束

涉及到两个表,父表和子表-主表和副表,例如:

班级表

Create table classes(id int primary key, name varchar(20));

学生表:

Create table students(id int primary key, name varchar(20),class_id int, foreign key(class_id ) references classes(id));

主表中classes没有的数据值在副表中是不可以使用的,若主表中的记录被幅表引用了,那么也不可以被删除。

三、Mysql的三大设计范式

1.第一范式

数据表中的所有字段都是不可分割的原子集,字段值还可以继续拆分的,就不满足第一范式,下图就不满足第一范式

2.第二范式

必须是满足第一范式的前提下,第二范式要求,除主键外的每一列都必须完全依赖于主键,如果要出现不完全依赖,只可能发生在联合主键的情况下。

3.第三范式

必须先满足第二范式,除开主键列的其他列之间不能有传递依赖关系。

四、Mysql的四种连接查询

1.内连接

inner join 或 join

语句示例:select * from person inner join card on person.cardID=card.id;

其实就是两张表的数据,通过某个字段相等,查询出相关记录数据。

 

2.外连接(左连接、右连接、完全外连接)

①左连接 left join 或 left outer join

语句示例:select * from person left join card on person.cardID=card.id;

左外连接,会把左边表里面的所有数据取出来,而右边表中的数据,如果有相等的,就显示出来,如果没有就补NULL。

②右连接 right join 或 right outer join

语句示例:select * from person right join card on person.cardID=card.id;

右外连接,会把右边表里面的所有数据取出来,而左边表中的数据,如果有相等的,就显示出来,如果没有就补NULL。

③完全外连接 full join 或 full outer join

语句示例:select * from person full join card on person.cardID=card.id; mysql不支持full join

五、Mysql的事务

事务其实是一个最小的不可分割的工作单元,事务能够保证一个业务的完整性。给我们提供了一个返回的机会。

比如我们的银行转账:

A --> -100 Update user set money=money-100 where name = ‘A’

B --> +100 Update user set money=money+100 where name = ‘B’

实际的程序中,如果只有一条语句执行成功了,而另一条没有执行成功,那么这次事务就判定为失败。事务默认状态下是开启的,当我们执行一个sql语句的时候,效果会立即体现出来,不能回滚(rollback)。所以,我们可以在转账之前先执行begin/start transaction操作,手动开启事务,但如果事务一旦提交了(commit)就不能回滚了。

1.事务的四种特征

A:原子性:事务是最小的单位,不可以再分割

C:一致性:事务要求,同一事务中的SQL语句,必须保证同时成功或失败

I:隔离性:事务1和事务2之间是具有隔离性的

D:持久性:事务一旦结束(commit),就不可以返回

2.隔离性的四种情况

分为以下4种情况,越往后安全级别越高,但性能越差

1.read uncommitted:读未提交的

如果有事务a和事务b,a事务对数据进行操作,在操作过程中,事务没有被提交,但b可以看见a操作的结果。这样就会出现脏读(一个事务读到了另一个事务没有提交的数据),例如小明在淘宝点买东西转账后使用rollback撤回转出去的钱。

2.Read committed:读已经提交的

虽然我能读到另一个事务提交的数据,但还是会出现问题,就是读取到同一个表的数据,发现前后不一致。两个人同时操作时没有实时更新导致,a和b同时操作一张表,a插入了一条数据,b要求平均值,此时b查到平均值是更新后的而不是原表的。

3.Repeatable read:可以重复读

两个人同时开启事务进行操作一张表时,会出现幻读,例如A插入了一条数据6号,同时B也插入一条数据6号,但显示不能插入,也查询不到6号。即事务a提交的数据,不能被事务b读到。

4.Serializable:串行化

会出现SQL语句被卡住的情况,对于同一张表,当一方在进行事务操作的时候,另一方会进入排队状态,直到另一方提交。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值