约束的字段不能为NULL
约束的字段不能重复,可为NULL
一个字段约束(使用列级约束)
create table t_vip{
id int,
name varchar(255) unique,
email varchar(255)
};
多个字段联合约束(使用表级约束)
create table t_vip{
id int,
name varchar(255) ,
email varchar(255),
unique (name,email)
};
任何一张表都应该有主键,一张表,主键约束只能添加一个
主键字段不能重复也不能为NULL
主键的特征 not null + unique (主键不能为NULL,也不能重复)
主键可以采用列级约束,也可以采用表级约束
create table t_vip{
id int primary key,
name varchar(255) ,
email varchar(255)
};
create table t_vip{
id int,
name varchar(255) ,
email varchar(255),
primary key(id) 单一主键
primary key(id,name) 复合主键
};
主键值建议使用 int bigint char(一般是数字,定长)
auto_increment 表示自增(自动维护主键值)
create table t_vip{
id int primary key auto_increment,//自增
name varchar(255) ,
email varchar(255)
};
一但添加了外键约束,则字段中的数据不能随便写了。只能写父表中所存在的
子表中的外键引用附表中的某个字段,该字段不一定是主键,但必须具有unique约束
外键值可以为NULL
先创建父表,在创建子表。先删除子表数据,在删除父表数据
格式:
foreign key(子表中的字段名) references 父表名(父表中的字段名)
例:
create table t_class{
classno int primary key,
classname varchar(225)
};
creat table t_student{
no int primary key,
name varchar,
cno int,
foreign key(con) references t_class(classno)
};
存储引擎是一个表存储/组织数据的方式,不同存储引擎,表存储的方式不同
在建表的时候给表指定/添加存储引擎
mysql默认存储引擎 InnoDB
mysql默认编码方式 utf-8
oreate table t_vip{
id int primary key,
name varchar(255) ,
email varchar(255)
}engine-InnoDB default charset-gbk;
事务用来管理 insert update delete 语句
在mysql命令的默认执行下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。
开启start transaction会禁止使用当前会话的自动提交。
commit 提交
rollback 回滚
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
原子性: 一个事务中所有操作,要么全部完成,要么全部不完成。若执行中发生错误,会回滚为事务开始前状态 。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。
持久性:事务处理结束后,对数据的修改就是永久的,不能回滚,即便系统故障也不会丢失。
读未提交(read uncommitted) [ A事务还未提交B事务就读到了内容(脏读)]
读提交(read committed)[避免脏读,但是有不可重复读的现象 ]
可重复读(repeatable read)默认[幻读]
串行化(serializable)
1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
mysql>create index emp_ename_index on emp(ename);
//给emp表的ename字段添加索引,起名:emp_ename_index
mysql> drop index emp_ename_index on emp;
//将emp表中的emp_ename_index索引对象删除
单一索引:一个字段上添加索引。
复合索引:两个字段或更多字段上添加索引。
主键索引:主键上添加索引。
唯一性索引:具有unique约束的字段上添加索引。必须唯一,可以为空。
注意:唯一性较弱的字段上添加索引用处不大。