首页 > 数据库技术 > 详细

MySQL-约束和事务

时间:2020-03-07 19:32:33      阅读:75      评论:0      收藏:0      [点我收藏+]

一、约束

约束是对表的强制规定

数据完成性:实体完整性、域完整性、参照完整性

实体完整性:保证表中的每一行数据在表中是唯一的

域完整性:数据库中的列必须满足某种特定的数据类型或约束。约束又分为强制域完整性越苏、限制格式或限制可能值得范围。

参照完整性:在输入/删除记录时,包含主关键字的主表 和 包含外关键字的外表

约束的分类:

完整性类型

约束类型

描述

约束对象

 

域完整性

Not null

列的值不能为空

 

列

Auto_increment

列值自动增加

Default

默认值

实体完整性

Primary key

主键约束,表示唯一,不能为空

行

Unique

唯一键,表示唯一,可为空

参照完整性

Foreign key

外键约束

表与表之间

1、非空约束

1)、建表时创建非空约束

Create table if not exists t3(

  age char(3) not null,

  Sid int comment‘用户编号‘,

  Sname varchar(10) default‘无名氏‘

);

插入值:

mysql> insert into t3(sid,sname) values(1001,‘byd‘);

ERROR 1364 (HY000): Field ‘age‘ doesn‘t have a default value

mysql> insert into t3(age,sid,sname) values(null,1001,‘byd‘);

ERROR 1048 (23000): Column ‘age‘ cannot be null

mysql> insert into t3(age,sid,sname) values(105,1001,‘byd‘);

Query OK, 1 row affected (0.01 sec)

2)、增加非空约束

语法:alter table 表名 modify 列名 数据类型 not null;

Create table if not exists t4(

  Sid int comment‘用户编号‘,

  Sname varchar(10) default‘无名氏‘

);

alter table t4 modify Sid int not null comment ‘用户编号‘;

3)、删除非空约束

语法:Alter table 表名 modify 列名 数据类型 null;

此处严格意义上来讲,并不是删除约束,只是修改约束

 

2、主键约束

一个表中只能有一个主键(或联合主键),主键约束不为空

自增序auto_increment必须随主键一起使用

Create table if not exists t6(

  Sid int primary key auto_increment comment‘用户编号‘,

  Sname varchar(10) default‘无名氏‘,

  age char(3) not null

);

mysql> insert into t6(sname,age) values(‘BRA‘,26);

技术分享图片

1)、创建联合主键约束

Create table if not exists s6(

  Sid int,

  Sname varchar(10) default‘无名氏‘,

  age char(3) not null,

  constraint pk_s6 primary key (Sid,Sname)

);

技术分享图片

2)、添加主键约束

语法格式:alter table 表名 add constraint 约束名 primary key(列名1,列名2,…);

alter table emp add constraint pk_emp primary key (empno,ename);

alter table emp add constraint uk_emp unique key (mgr);

3)、删除主键约束

语法:Alter table 表名 drop primary key;

Alter table emp drop primary key;

 

3、外键约束

1)、创建外键约束

Constraint fk_emp_dept(约束名) foreign key(列名1,列名2) references 表名(列)

CREATE TABLE dept(

  deptno int(2) primary key,

  dname varchar(5) not null,

  loc varchar(10) not null

);

CREATE TABLE emp(

  Empno int(4) primary key,

  ename varchar(5) not null,

  deptno int(2),

  constraint fk_emp_dept foreign key(deptno) references dept(deptno)

);

外键约束关联的两个表列之间,列名可以不一样

2)、添加外键约束

语法:ALTER TABLE 从表 ADD Constraint 约束名 foreign key(列名1,列名2,)references 主表(列名1,列名2)

alter table emp add constraint fk_emp_dept foreign key (deptno) references dept(deptno);

3)、删除外键约束

Alter table 表名 drop foreign key 约束名;

alter table emp drop foreign key fk_emp_dept;

在建立外键约束后,可能忘记了约束名,在navicat中可参考如下方式 查看约束名

 技术分享图片技术分享图片

 

4、唯一约束

1)、创建唯一性约束

Create table 表名(

  列名 数据类型 列属性 unique,

  或 Constraint  约束名  unique (列名1,列名2…)

  …

);

create table dept1(

         deptno int(2) primary key,

         dname varchar(10) not null unique,

         loc varchar(10) not null);

或

create table dept1(

         deptno int(2) primary key,

         dname varchar(10) not null,

         loc varchar(10) not null

  Constraint un_dept1 unique(dname)

);

2)、添加唯一约束

Alter table 表名 add constraint 约束名 unique(列名1,列名2…);

或 Alter table 表名 modify 列名 数据类型 unique;

3)、删除唯一约束

Alter table 表名 drop key(此处为key,非unique) 约束名

说明:如果没有设置约束名,约束名与列名相同

在建立外键约束的时候,我们可能没设置约束名,但是系统会自动设置一个约束名,在navicat中可以去查看约束名

 

5、默认值约束

1)、创建默认值约束

Create table 表名(

  列名 数据类型 列属性 default 默认值,

  …

);

2)、添加默认值约束

Alter table 表名 modify 列名 数据类型 default 默认值;

例:Alter table dept1 modify dname varchar(20) default ‘无名氏’;

3)、删除默认值约束

Alter table 表名 alter 列名 drop default;

例:Alter table dept1 alter dname drop default;

 

二、事务和SQL语句分类

1、事务的四大特性ACID(掌握、背)

原子性、一致性、隔离性、持久性

原子性Atomicity

不可分割的操作单元,事务中所有操作,要么全部成功;要么撤回到执行事务之前的状态

一致性Consistency

如果在执行事务之前数据库是一致的,那么在执行事务之后数据库也还是一致的;

隔离性Isolation

事务操作之间彼此独立和透明互不影响。事务独立运行。这通常使用锁来实现。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度

持久性Durability

事务一旦提交,其结果就是永久的。即便发生系统故障,也能恢复

 在别的数据库中,当执行完数据操作语句(INSERT\UPDATE\DELTE),事务提交(commit)

2、SQL语句的分类

DDL:数据定义语言(create drop)

DML:数据操作语句(insert update delete)

DQL:数据查询语句(select)

DCL:数据控制语句,进行授权和权限回收(grant revoke)

TPL:数据事务语句(commit colback savapoint)

 

作者:kerwin-chyl

文章链接:https:////www.cnblogs.com/kerwin-chyl

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利

MySQL-约束和事务

原文:https://www.cnblogs.com/kerwin-chyl/p/12435914.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!