03、Mysql约束

89 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第28天,点击查看活动详情

03、Mysql约束

01.SQL约束_概念:

  • 1).什么是"约束" : 它是在逻辑数据库中创建的一个"对象",跟表一样,"表"也是逻辑数据库中的一个对象。
  • 2).约束的作用:它可以让数据库软件为我们监控,并强制某些字段的值必须按照某种规则填写,否则,数据库软件将会拦截这些数据。

02.SQL约束_主键约束:        

// 不允许有 null

  • 1).主键:指在一个表中,用于唯一识别一行记录的一个"对象",它通常是一个字段来表示的,这个字段的值不能重复。
  • 2).设置主键约束:
        方式一:
            create table teacher(
                id    int    primary key,//设置了主键约束
                tname    varchar(1000),
                tage    int
            )
          方式二:创建表时,在constraint约束区域,声明指定字段为主键:
                    格式:[constraint 名称] primary key (字段列表)    
                    关键字constraint可以省略,如果需要为主键命名,constraint不能省略,主键名称一般没用。
                    字段列表需要使用小括号括住,如果有多字段需要使用逗号分隔。声明两个以上字段为主键,我们称为联合主键。


 CREATE TABLE Persons
(
FirstName varchar(255),
LastName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (FirstName,LastName)
)
或
CREATE TABLE Persons
(
FirstName varchar(255),
LastName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (FirstName)
)
	* 
方式三:创建表之后,通过修改表结构,声明指定字段为主键:


ALTER TABLE Persons ADD [CONSTRAINT 名称] PRIMARY KEY (字段列表)
CREATE TABLE Persons
(
FirstName varchar(255),
LastName varchar(255),
Address varchar(255),
City varchar(255)
)

ALTER TABLE Persons ADD PRIMARY KEY (FirstName)
     
  • 3).其它说明:
  1. 一个表中只能有一个主键;
  2. 一个主键可以由一个列组成(常用),也可以由多个列组成(复合主键--不常用)
  3. 当字段设置为"主键"后,会同时设置:唯一约束、非空约束
  4. 删除主键:ALTER TABLE 表名 DROP PRIMARY KEY;
  5. 关于主键的建议:
  • 1).主键可以使用int类型(先期使用),也可以使用varchar类型(后期使用)。
  • 2).主键字段不要使用与业务有关的字段,与业务有关的字段例如:手机号、身份证号.一旦发生修改,尤其是在多表时,会非常的麻烦,不好管理。所以,建议增加的int类型的无关的字段。

03.SQL约束_自动增长:

//  不保证唯一 ,只保证连续。  从最大值 一直增长    不会往回走  增长到 4 , 再把4删了  下次 会是 5  不会是 4

自动增长列类型必须是整形,自动增长列必须为键(一般是主键)。

  • 1).如果由我们程序对"主键"字段的值进行维护,十分的不方便。所以,可以委托给"数据库软件"为这个表的id字段管理这个值。
  • 2).可以对主键列,设置"自动增长":
  • 3).设置方式:
        方式一:
            create table teacher(
                id    int    primary key auto_increment,
                tname    varchar(1000),
                tage    int
            )
          方式 二:
          ALTER TABLE teacher MODIFY id INT AUTO_INCREMENT;

        添加数据时,可以不指定id列的值,但要用NULL
	* 
向persons添加数据时,可以不为P_Id字段设置值,也可以设置成null,数据库将自动维护主键值:


INSERT INTO Persons (FirstName,LastName) VALUES ('Bill','Gates')

INSERT INTO Persons (P_Id,FirstName,LastName) VALUES (NULL,'Bill','Gates')
        insert into teacher values(null,'章子怡',20);
        也可以传值:
        insert into teacher values(2,'章子怡',20);
  • 4).基数的设定:                    //不设定没有数据的话    默认从 1 开始    有数据从 数据最大 开始增长 ALTER TABLE 表名 AUTO_INCREMENT = 100;     //自动增长从100开始         
  • 5).清空表:
        1).delete from 表名:不会影响increment的基数   // 逐条删除,
        2).truncate 表名:会将基数从头再来。                    // 删表,重建
   删除自增长
     ALTER TABLE teacher MODIFY id INT ;    重新设置 列

04.SQL约束_非空约束:

  • 1).它可以约束某个字段,不接受NULL值。
  • 2).设置方式:
        方式一:
            create table teacher(
                id    int    primary key auto_increment,
                tname    varchar(100) not null,
                tage    int
            )
     方式二:修改表结构

添加非空约束 ALTER TABLE student MODIFY LastName varchar(255) NOT NULL
        添加数据时:
        insert into teacher(null,null,20);//错误,第二个字段不允许为NULL
        insert into teacher(null,'',20);//可以。
  • 3).删除非空约束:

ALTER TABLE 表名 MODIFY 字段名 数据类型(长度) [只要后面的约束中不出现not null约束,就表示将之前的not null约束删掉]

05.SQL约束_唯一约束:

  • 1).它可以约束某字段的值,必须唯一。但允许有多个NULL
  • 2).设置方式:
        方式一:
            create table teacher(
                id    int    primary key auto_increment,
                tname    varchar(100) not null,
                tage    int,
                phoneNum    char(11)  unique
            )
     方式2:创建表时,在约束区域,声明唯一:

     CREATE TABLE Persons

     (

     Id_P int,

     LastName varchar(255) NOT NULL,

     FirstName varchar(255),

     Address varchar(255),

     City varchar(255),

     CONSTRAINT 名称UNIQUE (Id_P)

     )
        方式三:
            ALTER TABLE 表名 ADD  UNIQUE (字段名)            //如果表中已经存在重复的数据,添加唯一约束将会报错
  • 3).注意:它和主键的区别:
    1. 主键:非空并且,唯一
    2. 唯一:只唯一,但允许有多个NULL值。
  • 4).删除唯一约束:         ALTER TABLE 表名 DROP INDEX 字段名.

06.SQL约束_默认约束:

1).它可以设定某个字段的"默认值",在添加数据时,可以添加一个值,也可以使用这个默认值;

2).设置方式:

        方式一:
            create table teacher(
                id    int    primary key auto_increment,
                tname    varchar(100) not null,
                tage    int,
                schemaName     varchar(1000)  default '传智播客北京校区顺义分校'
            )
        添加数据时:
        insert into teacher values(null,'章子怡',20,default);                         // 添加时如果要用默认值,需要写 default ;

3).删除默认约束:

        ALTER TABLE 表名 MODIFY 字段名 数据类型(长度) [约束列表中不出现default约束即可]