MYSQL学习(二)

一、约束

非空约束 not null

​ 约束的字段不能为NULL

唯一性约束 unique

​ 约束的字段不能重复,可为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)
};

主键约束 primary key

任何一张表都应该有主键,一张表,主键约束只能添加一个

主键字段不能重复也不能为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)
};

外键约束 foreign key

一但添加了外键约束,则字段中的数据不能随便写了。只能写父表中所存在的

子表中的外键引用附表中的某个字段,该字段不一定是主键,但必须具有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   开启自动提交

事务的四大特性 (ACID)

原子性: 一个事务中所有操作,要么全部完成,要么全部不完成。若执行中发生错误,会回滚为事务开始前状态 。

​ 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。

​ 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。

​ 持久性:事务处理结束后,对数据的修改就是永久的,不能回滚,即便系统故障也不会丢失。

事务的隔离级别:

​        读未提交(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约束的字段上添加索引。必须唯一,可以为空。

注意:唯一性较弱的字段上添加索引用处不大。

五、数据库设计三范式

第一范式 任何一张表都应该有主键,并且每一个字段原子性不可再分。
第二范式 建立在第一范式的基础上,所有非主键字段完全依赖主键,不能产生部份依赖。
多对多,三张表,关系表两外键
第三范式 建立在第二范式的基础上,所以非主键字段直接依赖主键,不能产生部分传递依赖。
一对多,两张表,多的表加外键

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值