澳门皇冠金沙网站-澳门皇冠844网站

热门关键词: 澳门皇冠金沙网站,澳门皇冠844网站

数据库之完整性约束,完整性约束

总结:

数据类型

一、介绍

     1,not null 不能插入空,不设置可空

1. 数字(默认都是由符号,宽度表示的是显示宽度,与存储无关).tinyint 括号里指定宽度

七位2进制数最大数就是2**7 -1=127 最小是-128

验证:

create tabel t1(id tinyint)

create tabe t2(id int)

浮点数

float

double

decimal

测试

create table t2(salary float)

float(6,2) 第一参数,代表宽度. 第二个参数代表小数点后面的位数.

约束条件与数据类型的宽度一样,都是可选参数

      2,unique  单列唯一

2.字符串类型

char 与 varchar

作用:用于保证数据的完整性和一致性
主要分为:

    create table department(name char(10) unique);         创建方式一

char 类型:定长,浪费空间,存取速度快

PRIMARY KEY (PK)    标识该字段为该表的主键,可以唯一的标识记录
FOREIGN KEY (FK)    标识该字段为该表的外键
NOT NULL    标识该字段不能为空
UNIQUE KEY (UK)    标识该字段的值是唯一的
AUTO_INCREMENT    标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT    为该字段设置默认值

UNSIGNED 无符号
ZEROFILL 使用0填充

    create table department( unique(name));                    创建方式二

不够就用空格补,
字符长度范围: 0 ~ 255

create table t6(name char(4));

insert into t6('aigen')#存不进去

insert into t6('能不能存')  #能存进去


####varchar:变长,精准,节省空间,存取速度慢
字符长度范围:0 ~ 65535



**char 和 varchar 区别:  char(5), 存不够5个,用空格补齐.     varhar(5), 你是几个它就存几个.**

char_length : 查看的是字符的长度
'abc'和'你好啊' 都是三个字符.

但是前面是3个字节,后面 char(5)的length话,是11个字节.

length : 查看字节.


一个英文字符算一个 bytes

一个中文字符算3个 bytes

insert into t7 values('abc','abc ')

select * from t6 where y= 'abc   '

说明:

 

3.日期类型

create table student(
id int,
name char(5),
born_date date,#'2017-09-06',
born_year year, #'2017',
res_time datetime, #'2017-09-06 10:53:23'
class_time time  #'10:53:23'
);


insert into student values(1,'ff',now(),now(),now(),now());

insert into student values(2,'ff2',,now(),now(),now());
1. 是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值
2. 字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值
sex enum('male','female') not null default 'male'
age int unsigned NOT NULL default 20 必须为正值(无符号) 不允许为空 默认是20
3. 是否是key
主键 primary key
外键 foreign key
索引 (index,unique...)

    联合唯一: unique(name)    unique(id)  两个都不同才可插入

4.枚举和集合

enum 枚举: 规定一个范围,可有多个值,但是为该字段传值时,只能取规定范围内的一个值.

set 集合: 规定一个范围,但是为该字段传值时,能取规定范围中的一个值或多个值.

create table person(
id int primary key auto_increment,
name char(10),
sex enum('male','female'),
hobbies set('music','read','swimming','learning English')
);

insert into person (name,sex enum,hobbies set) values('ff','male','read,swimming');

二、not null 和default  

              组合唯一:unique(name,id)   有一个不同即可插入

约束

是否可空,null表示空,非字符串
not null - 不可空
null - 可空

   3,主键   primary key = not null unique

1.not null和 default...

create table student( id int primary key auto_increment, name char(5), sex enum('male','female') not null default 'femela' );

insert into student (name) values('egon');

 

    作用:唯一标识,查询优化.

2.unique 唯一

主键就是不为空且唯一.

default默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值
create table tb1(
id int not null defalut  2 ,
澳门皇冠金沙网站,num int not null
)

     复合主键:  有一个不同即可.

2.1单列唯一

create table teacher( id int not null unique, name char(10));

insert into teacher values(1,'go');

insert table teacher values(1,'alex');

 

    注意    :   多列主键有问题

2.2多列唯一

create table service( id int primary key autoincrement, name char(10), host char(15), port int, /#constraint hostport unique(host,port) );

三、unique约束(唯一性约束)

  4,auto_increment(自增长)

2.3偏移量: autoincremenoffset

create table dep( id int primary key autoincrement, name char(10) )autoincrement=10;

insert into dep(name) values ('it'),('hr');

单列唯一

**         # 步长auto_increment_increment,默认为1
         # 起始的偏移量auto_increment_offset, 默认是1

2.4步长 autoincrementincrement

create table dep( id int primary key auto_increment, name char(10) );

insert into dep(name) values ('it'),('hr');

澳门皇冠844网站,set session autoincrementincrement=10;#会话级,只对当前回话有效.

set global autoincrementincrement=2;#全局,对所有的会话都有效.

autoincrementoffset#偏移量(也就是从几开始) autoincrementincrement#步长

set session autoincrementoffset=5; set session autoincrementincrement=2;

!!!如果偏移量的值大于步长的值,则偏移量的值会被忽略!

set session autoincrementoffset=2;

set session autoincrementincrement=3;

-----1.单列唯一---------
create table t2(
id int not null unique,
name char(10)
);
insert into t2 values(1,'egon');
insert into t2 values(1,'alex');
#上面创建表的时候把id设置了唯一约束。那么在插入id=1,就会出错了

         # 设置步长 为会话设置,只在本次连接中有效
          set session auto_increment_increment=5;

2.5show variables like '%auto_in%'; #查看变量

primary key字段的值不为空且唯一... 一个表中可以,一般都加在 id 字段上. ```

多列唯一

         #全局设置步长 都有效。
         set global auto_increment_increment=5;

3.foreign key(附练习) #外键

-----2.多列唯一---------
#255.255.255.255
create table server(
id int primary key auto_increment,
name char(10),
host char(15), #主机ip
port int, #端口
constraint host_port unique(host,port) #constraint host_port这个只是用来设置唯一约束的名字的,也可以不设置默认就有了
);
insert into server(name,host,port) values('ftp','192.168.20.11',8080);
insert into server(name,host,port) values('https','192.168.20.11',8081); #ip和端口合起来唯一
select * from server;

        # 设置起始偏移量
         set global  auto_increment_offset=3;**

关联

四、primary key (主键约束)

本文由澳门皇冠金沙网站发布于数据库研究,转载请注明出处:数据库之完整性约束,完整性约束