MySQL-约束和事务

一、约束

约束是对表的强制规定

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

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

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

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

约束的分类:

完整性类型

约束类型

描述

约束对象

 

扫描二维码关注公众号,回复: 9646207 查看本文章

域完整性

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

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

猜你喜欢

转载自www.cnblogs.com/kerwin-chyl/p/12435914.html
今日推荐