一、约束
约束是对表的强制规定
数据完成性:实体完整性、域完整性、参照完整性
实体完整性:保证表中的每一行数据在表中是唯一的
域完整性:数据库中的列必须满足某种特定的数据类型或约束。约束又分为强制域完整性越苏、限制格式或限制可能值得范围。
参照完整性:在输入/删除记录时,包含主关键字的主表 和 包含外关键字的外表
约束的分类:
完整性类型
约束类型
描述
约束对象
域完整性
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)
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利
标签:事务,列名,表名,约束,key,MySQL,table,null
来源: https://www.cnblogs.com/kerwin-chyl/p/12435914.html