数据库高级
数据完整性
1.1数据库的完整性
用来保证存放到数据库中的数据是有效的,即数据的有效性和准确性 确保数据的完整性=在创建表时给表中添加约束 完整性的分类 1.实体完整性(行完整性) 2.域完整性(列完整性) 3.引用完整性(关联表完整性): 主键约束:primary key 唯一约束:unique[key] 非空约束:not null 默认约束:default 自动增长:auto_increment 外键约束:foreign key 建议这些约束应该在创建表的时候设置 多个约束之间使用空格间隔 示例: create table student( studentno int primary key auto_increment, loginPwd varchar(20) not null default '123456', studentname varchar(50) not null, sex char(2) not null, gradeid int not null, phone varchar(255) not null, address varchar(255) default '学生宿舍', borndate datetime, email varchar(50) );
1.2实体完整性
实体:即表中的一行(一条记录)代表一个实体(entity) 实体完整性的作用:表示每一行数据不重复 约束类型: 主键约束(primary key) 唯一约束(unique) 自动增长列(auto_increment)
1.2.1主键约束
注意:每个表中要有一个主键 特点:数据唯一,且不能为null 示例: 第一种添加方式: CREATE TABLE student( id int primary key, name varchar(50) ); 第二种添加方式:此种方式优势在于,可以创建联合主键 CREATE TABLE student( id int, name varchar(50), primary key(id) ); CREATE TABLE student( classid int, stuid int, name varchar(50), primary key(classid,stuid) ); 第三种添加方式: CREATE TABLE student( id int, name varchar(50) ); ALTER TABLE student ADD PRIMARY KEY (id);
1.2.2唯一约束(unique)
特点:数据不能重复 CREATE TABLE student( Id int primary key, Name varchar(50) unique );
1.2.3自动增长列(auto_increment)
sqlserver数据库(identity-标识列) oracl数据库(sequence-序列) 给主键添加自动增长的数值,列只能是整数类型 CREATE TABLE student( Id int primary key auto_increment, Name varchar(50) ); INSERT INTO student(name) values(‘tom’);
1.3域完整性
域完整性的作用:限制此单位各的数据正确,不对照此列的其他单元格比较,域代表当前单元格 域完整性约束:数据类型 非空约束(not null) 默认值约束(default) check约束 (mysql不支持) check(sex='男' or sex='女')
1.3.1数据类型
-
数值类型
-
类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1 byte (-128,127) (0,255) 小整数值 SMALLINT 2 bytes (-32 768,32 767) (0,65 535) 大整数值 MEDIUMINT 3 bytes (-8 388 608,8 388 607) (0,16 777 215) 大整数值 INT或INTEGER 4 bytes (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值 BIGINT 8 bytes (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值 FLOAT 4 bytes (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度 浮点数值 DOUBLE 8 bytes (-1.797 693 134
-