索引
索引可以提升查询速度,会影响where查询,以及order by排序。MySQL索引类型如下:
从索引存储结构划分:B Tree索引、Hash索引、FULLTEXT全文索引、R Tree索引 从应用层次划分:普通索引、唯一索引、主键索引、复合索引 从索引键值类型划分:主键索引、辅助索引(二级索引) 从数据存储和索引键值逻辑关系划分:聚集索引(聚簇索引)、非聚集索引(非聚簇索引)
总结:创建表时无主键,查询顺序根据输入顺序;再创建索引,查询顺序也是根据输入顺序。 创建表时有主键,索引自动创建关于主键的,查询顺序是升序的。
读锁会阻塞写,但是不会阻塞读,而写锁则会把读写都阻塞
例子
1、新建数据库RUNOOB。
2、选择SQL语句操作。
3、在RUNOOB的数据库中创建emp_pay表,无主键。 命令:
CREATE TABLE emp_pay
(
employeeID int NOT NULL,
base_pay int NOT NULL,
commission decimal(2, 2) NOT NULL
)
4、插入数据 命令:
INSERT INTO emp_pay VALUES (1, 500, .10);
INSERT INTO emp_pay VALUES (6, 800, .07);
INSERT INTO emp_pay VALUES (5, 1500, .03);
INSERT INTO emp_pay VALUES (9, 750, .06);
5、查询表。 命令:SELECT * FROM emp_pay
6、将employeeID为1的更改为7。 命令:update emp_pay set employeeID=7 where employeeID=1;
7、查询表。 命令:SELECT * FROM emp_pay
8、创建索引。 命令:CREATE INDEX employeeID_ind ON emp_pay (employeeID)
9、查询表。 命令:SELECT * FROM emp_pay
10、将employeeID等于6的更改为8。 命令:update emp_pay set employeeID=8 where employeeID=5;
11、查询表。 命令:SELECT * FROM emp_pay
12、在RUNOOB数据库中创建emp表,employeeID为主键。 命令:
CREATE TABLE emp
(
employeeID int NOT NULL PRIMARY KEY,
base_pay int NOT NULL,
commission decimal(2, 2) NOT NULL
)
13、插入数据。 命令:
INSERT INTO emp VALUES (1, 500, .10);
INSERT INTO emp VALUES (6, 800, .07);
INSERT INTO emp VALUES (5, 1500, .03);
INSERT INTO emp VALUES (9, 750, .06);
14、查询表。 命令:SELECT * FROM emp;
15、将employeeID为1的值改为7。 命令:update emp set employeeID=7 where employeeID=1;
16、查询表。 命令:SELECT * FROM emp;
总结:创建表时无主键,查询顺序根据输入顺序;再创建索引,查询顺序也是根据输入顺序。 创建表时有主键,索引自动创建关于主键的,查询顺序是升序的。