2. SQL - 约束

1 主键约束

PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
添加主键约束

  • 创建表时,在字段描述处,声明指定字段为主键
  • 创建表时,在constraint约束区域,声明指定字段为主键
  • 创建表之后,通过修改表结构,声明指定字段为主键
CREATE TABLE persons
(
id_p int PRIMARY KEY,
lastname varchar(255),
firstname varchar(255),
address varchar(255),
city varchar(255),
-- CONSTRAINT PRIMARY KEY (id_p)
);
-- ALTER TABLE persons ADD PRIMARY KEY (id_p)
删除主键约束
ALTER TABLE persons DROP PRIMARY KEY
2 自动增长列

我们通常希望在每次插入新记录时,数据库自动生成字段的值。我们可以在表中使用 auto_increment(自动增长列)关键字,自动增长列类型必须是整形,自动增长列必须为键(一般是主键)。
下列 SQL 语句把 “persons” 表中的 “p_id” 列定义为 auto_increment 主键

CREATE TABLE persons
(
p_id int PRIMARY KEY AUTO_INCREMENT,
lastname varchar(255),
firstname varchar(255),
address varchar(255),
city varchar(255)
)
  • 向persons添加数据时,可以不为p_id字段设置值,也可以设置成null,数据库将自动维护主键值:
INSERT INTO persons (firstname,lastname) VALUES ('Bill','Gates')
INSERT INTO persons (p_id,firstname,lastname) VALUES (NULL,'Bill','Gates')
  • 默认AUTO_INCREMENT 的开始值是 1,如果希望修改起始值,请使用下列 SQL 语法:
ALTER TABLE persons AUTO_INCREMENT=100
  • 问:针对auto_increment ,删除表中所有记录使用 delete from 表名 或使用 truncate table 表名,二者有什么区别?
    - delete 一条一条删除,不清空auto_increment记录数。
    - truncate 直接将表删除,重新建表,auto_increment将置为零,从新开始。
3 非空约束

NOT NULL 约束强制列不接受 NULL 值。
NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

4 唯一约束

UNIQUE 约束唯一标识数据库表中的每条记录。 UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。 PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

5 默认约束

对列添加默认约束,若不写入该列值,则使用默认值。

CREATE TABLE persons11(
    -- 主键
    pid INT PRIMARY KEY AUTO_INCREMENT,
    -- 名
    lastname VARCHAR(20),
    -- 姓
    firstname VARCHAR(20),
    -- 城市
    city VARCHAR(10) DEFAULT '北京'
);

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