前面虽然对MySQL数据库进行了DDL,DML和基本的DQL的相关知识做了讲解,但是我们在实际开发时, 确实需要遵循一定的规范对数据库进行设计的。同时了解一定的规则(例如外键关联时主表记录的删除等),而这正是正是数据库完整性需要解决的问题。
一.数据库完整性
1.数据库完整性体现
1)实体(记录)完整性
主键约束:唯一标识一个字段,例如商品编号,不可以为null
唯一约束:也是唯一标识,但是却可以为空,同时本身是索引字段
主键自增:从1开始增加,数据库自己维护主键字段的值。
首先注意的是,之所以设计主键的目的其一是为了唯一标识,其二是为了提高查询性能,本身没有实际含义,认为设计的,而唯一约束在内存中维护的是一颗B+树(索引),因此建议在进行查询的时候尽量根据主键或者索引(包括唯一约束字段)进行查询,一定程度上能够提升性能
主键约束使用(primary key 关键字):
创建表的同时创建:
create table student( sid int primary key, sname varchar(20), age int );
创建表完毕后添加主键:
alter table mktest.mkt add primary key(sid);
唯一约束使用(unique关键字):
创建表的同时创建:
create table student( sid int primary key, sname varchar(20) unique, age int );
创建表完毕后添加唯一约束:
alter table mktest.mkt add unique(sname);
主键自增(auto_increment):
create table student(
sid int primary key auto_increment,
sname varchar(20),
age int
);
2) 域(字段)完整性
类型约束 -- 不同字段定义成对应数据类型
非空约束 -- not null
默认值 --default
非空约束使用:
create table student( -- 实际开发中最常用
sid int primary key,
sname varchar(20) not null,
age int
);
alter table student change sname sname not null;
默认值使用:
create table student( -- 实际开发中最常用
sid int primary key,
sname varchar(20) not null,
age int default 20
);
3) 引用完整性
外键约束
创建表时添加外键:
create table student( -- 实际开发中最常用
sid int primary key,
sname varchar(20) not null,
age int default 20,
deptno int(11),
foreign key (deptno) references dept(deptno)
);
创建表完毕后添加外键:
alter table student add foreign key(deptno) references dept(deptno);
2.删除约束
-- 删除主键约束
alter table student drop primary key;
-- 删除外键约束
alter table student drop foreign key;
-- 删除唯一约束
drop unique index index_name on tname;
二.运算符
1.算术运算符
四则运算:+ - * / -- 需要注意的是 除法 / 得到的是整数部分,即求商,不带余数
select 1+2; select 3/2; 得到1.5 select 3 div 2; 得到1;
2.比较运算符
大小比较: > < >= <= <> !=
select 2>1; 得到1,否则为0
3.逻辑运算符
and or ! -- 与 或 非
4.位运算符
& | ^ -- 按位与 按位或 按位异或