Mysql总结-2

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

1、乐观所和悲观锁策略

悲观锁:在读取数据时锁住那几行,其他对这几行的更新需要等到悲观锁结束时才能继续 
乐观所:读取数据时不锁,更新时检查是否数据已经被更新过,如果是则取消当前更新 
一般在悲观锁的等待时间过长而不能接受时我们才会选择乐观锁 

2、spin方式

spin方式就是字面意思,轮询需要的锁,获得锁以后再操作,否则等待重试,那么就是SELECT .. FOR UPDATE方式,先轮询到锁,然后在UPDATE,一定不会死锁,只会等待

3、MySQL自动提交问题
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过 去设置
set autocommit=0  禁止自动提交
set autocommit=1 开启自动提交
mysql>   select  @@autocommit;
+ --------------+
| @@autocommit |
+ --------------+
|                        1 |
+ --------------+

4、修改数据库表名

修改表名语法: ALTER   TABLE   `原表名`   RENAME   TO   `新表名`;
 例子:alter table user rename to tdd_user;

5、主键、自增、外键

主键、自增:eid  bigint   not   null   primary   key  auto_increment
外键:masterId  bigint   references  employee(employeeid)
 
 
  1. create table Employee(eid bigint not null primary key auto_increment, employeeId bigint,employeeName char(10), employeeType char(20), salary float, addressId bigint references address(id) , telePhone char(15), masterId bigint references employee(employeeid)); 

6、 MySql唯一性约束 

唯一性约束
1) 唯一性约束所在的 列允许空值,但是 主键约束所在的列不允许空值
(2) 可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的只。但是,唯一性约束所在的列并不是表的主键列。
(3) 唯一性约束强制在指定的列上创建一个唯一性索引。在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建的索引是聚簇索引。

主键: 
1) 用于标识某行而且与之相关. 
2) 是不可能(或很难)更新. 
3) 不应该允许空(NULL). 
唯一域/字段: 
1) 用于作为访问某行的可选手段.
2) 只要唯一就可以更新. 
3) 可以为空(NULLs). 

注意唯一和主键的区别,它们都是创建一个唯一的索引,一个表格仅含有一个主键约束列,但是,它有可能在其他列中含有许多的唯一约束。

 

例如,user表中有user_id,user_name两个字段,如果不希望有两条一摸一样的的user_id和user_name,我们可以给user表添加两个字段的联合唯一索引:

alter table user add unique index(user_id,user_name);





这样当向表中添加相同记录的时候,会返回1062的添加失败信息。



但是有一种情况是表中已经有n个重复的记录,这时候我们才想起来要添加唯一索引,再执行上面的操作时,数据库会告诉你已经有重复的记录了,建立索引失败,这时候,我们可以用下面的操作:
alter ignore table user add unique index(user_id,user_name);



它会删除重复的记录(别怕,会保留一条),然后建立唯一索引,高效而且人性化。尤其是绿色的那条sql,在建立索引的同时删除了重复数据,相当有用。

 


2.给表中 你不想重复出现的字段,如:userid, 则给userid加上 唯一索引(unique)



  再执行 replace into  table (***) values (***),即OK
 
实例:
 
  1. mysql> alter table employee add unique index(employeeid); 
  2. Query OK, 1000001 rows affected (8.95 sec) 
  3. Records: 1000001  Duplicates: 0  Warnings: 0 

 
  1. mysql> alter table employee add unique index myindex(employeeid); 
  2. Query OK, 1000001 rows affected (9.70 sec) 
  3. Records: 1000001  Duplicates: 0  Warnings: 0 

7、查询数据库中的存储过程

 方法一:

       select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE'

 方法二:

          show procedure status; 
 
8、SQL中的‘或者’选择
eg:选择id=2或者id=3或者id=4的记录,使用‘ ||
 select * from machines where id=2 || id=3 || id=4; 
 
 
 本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/368461,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
265
分享
相关文章
mysql中lock tables与unlock tables(锁表/解锁)使用总结
mysql中lock tables与unlock tables(锁表/解锁)使用总结
425 0
MySQL总结
一.SQL语句简介 1.什么是SQL? SQL(Structured Query Language):结构化查询语言 其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”
146 0
MySQL总结
【MySQL】MySQL命令总结 | 数据库与数据表的创建删除与查询
【MySQL】MySQL命令总结 | 数据库与数据表的创建删除与查询
212 0
MYSQL约束的总结和小练习
约束笔记: 1:主键约束默认是唯一且非空的 2:AUTO_INCREMENT在MYSQL8.0中会将自增主键保存到重做日志中,即使关闭后重启,存储引擎innoDB仍然会根据重做日志初始化计数器内存值。 3:设置了外键约束后,如果要删除主表的内容,则需要先把从表的相关内容给删除。 4:建表时一般设置not null default '' 或default 0,因为nul这个特殊值不好比较,而且查找效率低。 5:外键约束不能跨引擎使用,且mysql中其有一定成本,不适合大并发SQL操作,开发中一般在.
223 0
MySQL技能树学习总结
MySQL技能树学习总结
263 0
MySQL技能树学习总结
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等