外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会 锁全表.
行级锁的优点如下:
1)当很多连接分别进行不同的查询时减小LOCK状态。
2)如果出现异常,可以减少数据的丢失。因为一次可以只回滚一行或者几行少量的数据。
行级锁的缺点如下:
1)比页级锁和表级锁要占用更多的内存。
2)进行查询时比页级锁和表级锁需要的I/O要多,所以我们经常把行级锁用在写操作而不是读操作。
3)容易出现死锁。
注意:inodb不能确定操作的行,这个时候就使用的意向锁,也就是表锁on row level);
4》察看存储引擎:
存储引擎是Mysql的特点,Mysql可以选择多种存储引擎及不同的存储方式,是否进行事物处理等;
1> 查询Mysql支持的引擎
Mysql->show engines;
Mysql->show engines\G;
2>查询Mysql引擎详细信息:
Mysql->show engine innodb status\G;
3>查询Mysql默认存储引擎
Mysql-> show variables like 'storage_engine';
如果想修改存储引擎,可以在 my.ini中进行修改或者my.cnf中的Default-storage-engine=引擎类型;
5》如何选择存储引擎:
在企业生产环境中,选择一个款合适的存储引擎是一个很复杂的问题。每一种存储引擎都有各自的优势,不能笼统的说,谁比谁好。通常用的比较多的 是innodb存储引擎
以下是存储引擎的对比:
==========================创建,修改,删除表:
1》创建表的方法:
语法:create table 表名(
属性名数据类型完整约束条件,
属性名数据类型条完整约束件,
。。。。。。。。。
属性名数据类型
);
举例:
create table example0(
id int,
name varchar(20),
sexboolean);
2》表的完整性约束:
| 约束条件 | 说明|
| (1)primary key | 标识该字段为表的主键,具备唯一性|
| (2)foreign key | 标识该字段为表的外键,与某表的主键联系|
| (3)not null | 标识该属于的值不能为空|
| (4)unique | 标识这个属性值是唯一|
| (5)auto_increment | 标识该属性值的自动增加
| (6)default | 为该属性值设置默认值|
1>设置表的主键:
主键是一个表的特殊字段,这个字段是唯一标识表中的每条信息,主键和记录的关系,跟人的身份证一样。名字可以一样,但是身份证号码觉得不会一样, 主键用来标识每个记录,每个记录的主键值都不同,主键可以帮助Mysql以最快的速度查找到表中的某一条信息,主键必须满足的条件那就是它的唯一性,表中的 任意两条记录的主键值,不能相同,否则就会出现主键值冲突,主键值不能为空,可以是单一的字段,也可以多个字段的组合。
举例:
create table sxkj(
User_id int primary key,
user_name varchar(20),
user_sexchar(7));
2>设置多个字段做主键
举例:
create table sxkj2(
user_id int ,
user_name float,
grade float,
primary key(user_id,user_name));
3>设置表的外键:
外键是表的一个特殊字段,如果aa是B表的一个属性且依赖于A表的主键,那么A表被称为父表。B表为被称为子表,
举例说明:
user_id 是A 表的主键,aa 是B表的外键,那么user_id的值为zhangsan,如果这个zhangsan离职了,需要从A表中删除,那么B表关于 zhangsan的信息也该得到相应的删除,这样可以保证信息的完整性。
语法:
constraint外键别名 foreign key(外键字段1,外键字段2)
references 表名(关联的主键字段1,主键字段2)
(1) yy1表存储了zhangsan姓名和ID号
create table yy1(
user_id int primary key not null,
user_name varchar(20));
(2) yy