http://tianya23.blog.51cto.com/1081650/268899

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;