数据库索引
方法一:CREATE INDEX index_name ON table_name(column(length)); //直接创建,length是可选项,下同
方法二:ALTER TABLE table_name ADD INDEX index.name (column(length));//修改表方式创建
方法三:CREATE TABLE 'table' (
'id' int(11) NOT NULL AUTO_INCREMENT,
'title' char(255) CHARACTER SET utf8 COLLATE utf8_general ci NOT NULL,
'content' text CHARACTER SET utf8 COLLATE utf8_ general ci NULL,'
time' int(10) NULL DEFAULT NULL,
PRIMARY KEY ('id'),
INDEX index. name (title(length))
) //创建表时创建
方法一:CREATE UNIQUE INDEX index_namd ON table_name(lun(ength));
方法二:ALTER TABLE table_name ADD UNIQUE index_name (column(length));
方法三:CREATE TABLE 'table' (
'id' int(1) NOT NULL AUTO_ INCREMENT,
'title' char(255) CHARACTER SET utf8 COLLATE uff8_general_ci NOT NULL,
'content' text CHARACTER SET utf8 COLL ATE utf8_ general_ci NULL,
'time' in(10) NULL DEFAULT NULL,
PRIMARY KEY ('id'),
INDEX index. name (title(length))
)
主键索引,唯一且非空
CREATE TABLE 'table_ name' ('
id' int(11) NOT NULL AUTO_ INCREMENT ,'
title' char(255) NOT NULL,
PRIMARY KEY ('id')
);
CREATE TABLE user(
name varchar(9),
age int(3),
sex tinyint(1),
INDEX user(name, age, sex) 添加多个列
);
1、查看索引语法
SHOW INDEX FROM table _name;
SHOW KEYS FROM table_ name ;
2、 查看索引的示例
mysql > SHOW INDEX FROM player;
mysql SHOW KEYS FROM player;
删除索引语法
DROP INDEX index_name ON table_ name;
ALTER TABLE table_ name DROP INDEX index. name;
■删除索引的示例
mysql> drop index index_puid on mappini;
mysq|> atler table mapping drop index gameid;
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。
1.第一范式(确保每列保持原子性)
第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
2.第二范式(确保表中的每列都和主键相关)
第二范式在第一范式的基础之上更进一层。第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
3.第三范式(确保每列都和主键列直接相关,而不是间接相关)
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
(1)原子性(Atomicity)
1、MySQL .事务默认是自动提交的,当SQL语句提交时事务便自动提交
2、事务控制语句
1、手动对事务进行控制的方法
(1)事务处理命令控制事务
由存档点b回滚a,存档点b从内存中释放缓存,消失;存档点回滚事务,rollback后,意味着事务的结束。
三种情况结束事务Commit;Set autocommit=1;Rollback;
三种情况事务开始begin;set autocommit=0;START TEANSACTION
事务处理命令控制事务
mysql>use kgc;
mysql>create table kgc_transaction_test(id int(5))engine=innodb; 存储引擎必须是innodb,只有innodb支持事务
mysql>selecte * from kgc_transaction_test;
mysql>begin; //开始事务
mysql>insert into kgc_transaction_test value(1);
mysql>insert into kgc_transaction_test value(2);
mysql>commit; //提交事务
mysql>begin; //开始事务
mysql>insert into kgc_transaction_test value(3);
mysql>rollback; //回滚
1、MyISAM不支持事务,也不支持外键访问速度快,对事务完整性没有要求
2、MyISAM在磁盘上存储成三个文件
1、业务需要事务的支持
2、行级锁定对高并发有很好的适应能力,但需确保查询是通过索引来完成
3、业务数据更新较为频繁的场景 如:论坛,微博等
4、业务数据一致性要求较高 如:银行业务
5、硬件设备内存较大,利用Innodb较好的缓存能力来提高内存利用率,减少磁盘IO的压力
1、索引的支持
方法1: alter table修改
alter table table_ name engine=引擎;
方法2:修改my.cnf, 指定默认存储引擎并重启服务
default-storage-engine=InnoDB
方法3: create table创建表时指定存储引擎
create table表名(字段) engine= 引擎
方法4: Mysql_ convert_ table _format 转化存储引擎(方法四在5.7之后被移除,5.7之前可以用)
Mysql convert table_ format -user=root - password=密码
-sock=/tmp/mysql.sock- engine=引擎 库名表名