1、乐观所和悲观锁策略
悲观锁:在读取数据时锁住那几行,其他对这几行的更新需要等到悲观锁结束时才能继续
乐观所:读取数据时不锁,更新时检查是否数据已经被更新过,如果是则取消当前更新
一般在悲观锁的等待时间过长而不能接受时我们才会选择乐观锁
乐观所:读取数据时不锁,更新时检查是否数据已经被更新过,如果是则取消当前更新
一般在悲观锁的等待时间过长而不能接受时我们才会选择乐观锁
2、spin方式
spin方式就是字面意思,轮询需要的锁,获得锁以后再操作,否则等待重试,那么就是SELECT .. FOR UPDATE方式,先轮询到锁,然后在UPDATE,一定不会死锁,只会等待
3、MySQL自动提交问题
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过 去设置
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
mysql>
select
@@autocommit;
+ --------------+
| @@autocommit |
+ --------------+
| 1 |
+ --------------+
+ --------------+
| @@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)
- 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).
注意唯一和主键的区别,它们都是创建一个唯一的索引,一个表格仅含有一个主键约束列,但是,它有可能在其他列中含有许多的唯一约束。
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 |
实例:
- mysql> alter table employee add unique index(employeeid);
- Query OK, 1000001 rows affected (8.95 sec)
- Records: 1000001 Duplicates: 0 Warnings: 0
- mysql> alter table employee add unique index myindex(employeeid);
- Query OK, 1000001 rows affected (9.70 sec)
- 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,如需转载请自行联系原作者