数据库基本操作---约束

目录

1.主键约束(primary key)

(1)添加单列主键

(2)添加多列主键(联合主键)

(3)通过修改表结构方式添加主键

(4)删除主键约束

2.自增长约束(auto_increment)

(1)用字段添加auto_increment属性来实现(单列)主键的自增长,自增长初始值为1

(2)指定自增长的初始值

(3)删除自增长

3.非空约束(not null)

(1)非空所在列的数据必须有值(不能为空)

(2)删除非空约束

4.唯一性约束(unique)

5.默认约束(default)

6.零填充约束(zerofill)

(1)添加零填充约束

(2)删除零填充约束

7.外键约束(foreign key)


1.主键约束(primary key)

(1)添加单列主键

  • a.在定义字段的同时用primary key来指定主键

  /*
     格式如下:
       create table 表名(
              ...,
              <字段名> <数据类型> primary key,
              ...
       );
   */
   CREATE TABLE emp1(            -- 创建emp1表
          eid1 INT PRIMARY KEY,
          NAME VARCHAR(20),
          deptid INT,            -- deptid部门号
          salary DOUBLE
   );         
  • b.在定义完字段后再指定主键

   /*
     格式如下:
       create table 表名(
              ...,
              <字段名> <数据类型>,
              ...,
              [constraint <约束名>]  primary key  [字段名]
       );
   */
   CREATE TABLE emp2(             -- 创建emp2表
          eid2 INT,
          NAME VARCHAR(20),
          deptid INT,
          salary DOUBLE,
          CONSTRAINT pk1 PRIMARY KEY(eid2)     
                      -- CONSTRAINT pk1 可省略
   );
  • c.主键的作用 主键约束的列唯一、数据不能重复(其他数据随意)且不能为空值(null)

     -- 以emp1为例:
     INSERT INTO emp1(eid1,NAME,deptid,salary)                      
                    VALUES(1001,'张三',10,3000);
     INSERT INTO emp1(eid1,NAME,deptid,salary)                      
                    VALUES(1002,'李四',20,4000), 
                          (1003,'李四',20,4000);

(2)添加多列主键(联合主键)

联合主键是由一张表中的多个字段组成,实质也是组合成一个主键

   /*
     格式如下:
       create table 表名(
              ...,
              <字段名> <数据类型>,
              ...,
              primary key (字段1,字段2,字段3...)
       );
   */
   CREATE TABLE emp3(               -- 创建emp3表
          NAME VARCHAR(20),
          deptid INT,
          salary DOUBLE,
          CONSTRAINT pk2 PRIMARY KEY(NAME,deptid)           -- CONSTRAINT pk2 可省略
   );
   -- 联合主键只需主键中任意一列不重复就可以
   INSERT INTO emp3 VALUES('张三',10,5000);
   INSERT INTO emp3 VALUES('张三',20,5000);
   INSERT INTO emp3 VALUES('李四',10,5000);
   -- 联合主键的各个列每一列都不能为空
   INSERT INTO emp3 VALUES(NULL,10,5000);
   INSERT INTO emp3 VALUES('张三',NULL,5000);
   INSERT INTO emp3 VALUES(NULL,NULL,5000);

(3)通过修改表结构方式添加主键

主键约束不仅可以在创建表的同时创建,也可以在修改表是添加

 /*
   格式如下:
     create table 表名(
            ...,
            <字段名> <数据类型>,
            ...
     );
     alter table <表名> add primary key (字段1,字段2,字段3...);
 */
  • a.添加单列主键

     CREATE TABLE emp4(              -- 创建emp4表
            eid4 INT,
            nama VARCHAR(20),
            deptid INT,
            salary DOUBLE
     );
     ALTER TABLE emp4 ADD PRIMARY KEY(eid4);
  • b.添加多列主键

     CREATE TABLE emp5(              -- 创建emp5表
            eid5 INT,
            name VARCHAR(20),
            deptid INT,
            salary DOUBLE
     );
     ALTER TABLE emp5 ADD PRIMARY KEY(mane,deptid);

(4)删除主键约束

 /*
   格式如下:
     alter table <数据表名> drop primary key;
 */
 ALTER TABLE emp5 DROP PRIMARY KEY;

2.自增长约束(auto_increment)

(1)用字段添加auto_increment属性来实现(单列)主键的自增长,自增长初始值为1

 /*
   格式如下:
     create table 表名(
            ...,
            <字段名> <数据类型> primary key auto_increment,
            ...
     );
 */
 CREATE TABLE user1(              -- 创建user1表
        user1 INT PRIMARY KEY AUTO_INCREMENT,
        NAME VARCHAR(20)
 );          
 INSERT INTO user1 VALUES(NULL,'张三');
 INSERT INTO user1 VALUES(NULL,'张三');
 INSERT INTO user1(NAME) VALUES('李四');

(2)指定自增长的初始值

  • 方式一:创建表之时指定

     - CREATE TABLE user2(             -- 创建user2表
              user2 INT PRIMARY KEY AUTO_INCREMENT,
              NAME VARCHAR(20)
       )AUTO_INCREMENT=100;        
       INSERT INTO user2 VALUES(NULL,'张三');
       INSERT INTO user2 VALUES(NULL,'张三');
       INSERT INTO user2(NAME) VALUES('李四');
     - 

    方式二:创建表之后指定

     CREATE TABLE user3(              -- 创建user3表
            user3 INT PRIMARY KEY AUTO_INCREMENT,
            NAME VARCHAR(20)
     );      
     ALTER TABLE user3 AUTO_INCREMENT=200;
     INSERT INTO user3 VALUES(NULL,'张三');
     INSERT INTO user3 VALUES(NULL,'张三');
     INSERT INTO user3(NAME) VALUES('李四');   

(3)删除自增长

 -- a.使用delete删除后自增长从断点开始
 DELETE FROM user1;
 -- b.使用truncate删除后自动增长从默认起始值开始  
 TRUNCATE user2;

3.非空约束(not null)

(1)非空所在列的数据必须有值(不能为空)

  • 方式一:创建表之时指定非空

     -- <字段名> <数据类型> not null;
     CREATE TABLE user4(
            user4 INT,
            NAME VARCHAR(20) NOT NULL,
            address VARCHAR(20) NOT NULL
     );
     INSERT INTO user4 VALUES(1,'张三','西安');
     INSERT INTO user4 VALUES(NULL,'张三','西安');
  • 方式二:创建表之后指定非空

    -- alter table 表名 modify 字段 类型 not null;
     CREATE TABLE user5(
            user5 INT,
            NAME VARCHAR(20),
            address VARCHAR(20)
     );
     ALTER TABLE user5 MODIFY NAME VARCHAR(20) NOT NULL;
     ALTER TABLE user5 MODIFY address VARCHAR(20) NOT NULL;
     INSERT INTO user5 VALUES(1,'张三','西安');
     INSERT INTO user5 VALUES(NULL,'张三','西安');

(2)删除非空约束

 -- alter table 表名 modify 字段 类型
 ALTER TABLE user4 MODIFY NAME VARCHAR(20);
 ALTER TABLE user5 MODIFY address VARCHAR(20);

4.唯一性约束(unique)

所在列所有字段的值不能重复出现

  • 方式一:创建表之时添加唯一约束

     -- <字段名> <数据类型> unique;
     CREATE TABLE user6(
            user6 INT,
            NAME VARCHAR(20),
            phone_number VARCHAR(20) UNIQUE
     );
     INSERT INTO user6 VALUES(1,'张三','123');
     INSERT INTO user6 VALUES(2,'张三','1234');
  • 方式二:创建表之后添加唯一约束

     -- alter table 表名 add constraint 约束名 unique(列);
     CREATE TABLE user7(
            user7 INT,
            NAME VARCHAR(20),
            phone_number VARCHAR(20)
     );
     ALTER TABLE user7 ADD CONSTRAINT phone UNIQUE(phone_number);
     INSERT INTO user7 VALUES(1,'张三','1234');
     INSERT INTO user7 VALUES(2,'张三','5678');
     INSERT INTO user7 VALUES(2,'张三','5678');
  • 删除唯一约束

     -- 格式:alter table 表名 drop index <唯一的约束>;
     ALTER TABLE user7 DROP INDEX phone;

5.默认约束(default)

用来指定某列的默认值

  • 方式一:<字段名> <数据类型> default <默认值>;

     CREATE TABLE user8(
            user8 INT,
            NAME VARCHAR(20),
            address VARCHAR(20) DEFAULT '北京'
     );
     INSERT INTO user8(user8,NAME) VALUES(1,'张三');
     INSERT INTO user8(user8,NAME,address) VALUES(2,'张三','上海');
     INSERT INTO user8 VALUES(3,'李四',NULL);
  • 方式二:alter table 表名 modify 列名 类型 default '默认值';

     CREATE TABLE user9(
            user9 INT,
            NAME VARCHAR(20),
            address VARCHAR(20)
     );
     ALTER TABLE user9 MODIFY address VARCHAR(20) DEFAULT '宝鸡';
     INSERT INTO user9(user9,NAME) VALUES(1,'张三');
     INSERT INTO user9(user9,NAME,address) VALUES(2,'张三','上海');
     INSERT INTO user9 VALUES(3,'李四',NULL);
  • 删除默认约束

     -- alter table 表名 modify 列名 类型 default null;
     ALTER TABLE user9 MODIFY address VARCHAR(20) DEFAULT NULL;
     INSERT INTO user9(user9,NAME) VALUES(4,'王五');

6.零填充约束(zerofill)

zerofill默认为int(10)

(1)添加零填充约束

 CREATE TABLE user10(
        user10 INT ZEROFILL,
        NAME VARCHAR(20)
 );
 INSERT INTO user10(user10,NAME) VALUES(123,'张三');
 INSERT INTO user10(user10,NAME) VALUES(2,'李四');

(2)删除零填充约束

 ALTER TABLE user10 MODIFY user10 INT;

7.外键约束(foreign key)

你可能感兴趣的:(数据库,sql)