约束 级联
约束
除了数据类型以外额外添加的约束和数据类型一样是可选参数,添加约束是为了保证数据的一致性,完整性,而且为主键) DEFAULT 为该字段设置默认值 UNSIGNED 无符号 ZEROFILL 使用0填充
PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FOREIGN KEY (FK) 标识该字段为该表的外键 NOT NULL 标识该字段不能为空 UNIQUE KEY (UK) 标识该字段的值是唯一的 AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键) DEFAULT 为该字段设置默认值 UNSIGNED 无符号 ZEROFILL 使用0填充
not null 不可空 不添加约束条件not null 的话字段默认是null,插入数据时如果未设置则自动添加默认值
mysql> create table t(id int); #字段默认可以插入空 Query OK, 0 rows affected (0.24 sec) mysql> desc t; #查看表显示默认为null +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 1 row in set (0.01 sec) mysql> insert into t values(); #插入一个空的值 Query OK, 1 row affected (0.06 sec) mysql> select * from t; #查询到表内有一个 null 的记录 +------+ | id | +------+ | NULL | +------+ 1 row in set (0.00 sec)
创建一个t2表设置为不能为空 插入一个空的数据 就会报错

default 默认值约束 可以指定字段的默认值
设置id字段有默认值后,则无论id字段是null还是not null,都可以插入空,插入空默认填入default指定的默认值
create table user (id ind,name char(10) not null,sex char(1) default "man");

 
unique 唯一性约束 该字段的值不能重复
unique其实是一种索引,索引是一种数据结构,用于提高查询效率
单列唯一约束
create table t1(id char(10) unique);
多列联合唯一约束
create table t2(id char(10),number char(12),unique(id,number));
多列情况下 两个都相同的就重复 单个不相同就不会
设置唯一约束 UNIQUE 方法一: create table department1( id int, name varchar(20) unique, comment varchar(100) ); 方法二: create table department2( id int, name varchar(20), comment varchar(100), constraint uk_name unique(name) ); mysql> insert into department1 values(1,'IT','技术'); Query OK, 1 row affected (0.00 sec) mysql> insert into department1 values(1,'IT','技术'); ERROR 1062 (23000): Duplicate entry 'IT' for key 'name'
primary key主键约束 标识该字段为该表的主键,可以唯一的标识记录,从约束的角度来看主键约束和非空加唯一约束没有区别
create table student(id int primary key);
主键也可以多列联合 和上面的unique用法一样
一张表中必须有且只有一个主键。主键的字段名基本上都叫id,主键的类型需要设置成整型,别的也可以但是最好不好设置其他的
单列主键 #方法一:not null+unique create table department1( id int not null unique, #主键 name varchar(20) not null unique, comment varchar(100) ); #方法二:在某一个字段后用primary key create table department2( id int primary key, #主键 name varchar(20), comment varchar(100) ); #方法三:在所有字段后单独定义primary key create table department3( id int, name varchar(20), comment varchar(100), constraint pk_name primary key(id); #创建主键并为其命名pk_name
多列做主键 create table service( ip varchar(15), port char(5), service_name varchar(10) not null, primary key(ip,port) );
auto_increment
通常搭配主键字段使用 可以自动为你的数据分配逐渐增加
create table t9(id int primary key auto_increment,name char(3));
不指定id,则自动增长
create table student(
id int primary key auto_increment,
name varchar(20),
sex enum('male','female') default 'male'
);
也可以指定id
mysql> insert into student values(4,'a','female');
mysql> insert into student values(7,'w','female');
修改自动增长的起始位置  
    alter table t9 auto_increment = 7;
也可以创建表时指定auto_increment的初始值,注意初始值的设置为表选项,应该放到括号外
create table student(
  id int primary key auto_increment,
  name varchar(20),
  sex enum('male','female') default 'male'
  )auto_increment=3;
对于自增的字段,在用delete删除后,再插入值,该字段仍按照删除前的位置继续增长,应该用truncate清空表,
比起delete一条一条地删除记录,truncate是直接清空表,在删除大表时用它
自动增长 只能用于整型
foreign key 专门用于为表和表之间建立物理关联
两个表之间的关系有:多对一,多对多,一对一
多对一
create table dept(id int primary key auto_increment,name char(10),manager char(10));
create table emp(id int primary key auto_increment,name char(10),dept_id int,
                           foreign key(dept_id) references dept(id));
多对多 :用户表+用户与主机关系表+主机表
先创建了一个教师表
create table teacher (id int primary key auto_increment,name char(10));
再创建一个学生表
create table student (id int primary key auto_increment,name char(10));
               create table t_s (t_id int,
               s_id int,
               foreign key(t_id) references teacher(id),
               foreign key(s_id) references student(id)
               );
再创建一个存放教师和学生关系的关系表
create table t_s (t_id int,
               s_id int,
               foreign key(t_id) references teacher(id),
               foreign key(s_id) references student(id),
               primary key(t_id,s_id)
               );
添加外键约束时: 被关联的表需要先被创建
                        主表应该先插入 从表后插入
                                        在删除数据前(主表)前 要保证该从表数据都删除了
                                        在更新数据前  要先保证从表没有数据关联到主表
 
级联:
指的是就是同步更新和删除
语法:在创建外键时  在后面添加  on update cascade   同步更新
                                             on delete cascade   同步删除
实例:
      create table class(id int primary key auto_increment,name char(10));
      create table student(
              id int primary key auto_increment,
              name char(10),
              c_id int,
              foreign key(c_id) references class(id)
              on update cascade
              on delete cascade
              );
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号