字段约束条件

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

作用:用于保证数据的完整性和一致性

非空约束:

  not null:表示不可以为空--不能是null但可以是""。默认是可以为null。用在字段后

默认值

  default x :指定x为默认值。默认没有默认值。用在字段后

主键约束:一个表只可以有一个主键

  primary key:设置为主键,不可重复,不可为空。用在字段后

  组合主键:联合主键就是用2个或2个以上的字段组成主键。用这个主键包含的字段作为主键,这个组合在数据表中是唯一。

    写在建表最后  primary key (字段1,字段2)

自增长:

  auto_increment:标识该字段的值自动增长(整数类型,而且为主键)。用在字段后

  初始值: 

    在创建完表之后修改自增字段的起始值: alter table 表名 auto_increment=N;

    创建表时指定auto_increment的初始值: auto_increment=N;注意初始值的设置为表选项,应该放到括号外

mysql> create table cc(id int primary key auto_increment)auto_increment=5;
Query OK, 0 rows affected (0.32 sec)

mysql> insert into cc values (),(),();
Query OK, 3 rows affected (0.05 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select *from cc;
+----+
| id |
+----+
|  5 |
|  6 |
|  7 |
+----+

 

  步长:

  设置自增列的步长,可以分为全局级别和会话级别,如果是会话级别,那么当用户新建一个会话的时候,那么步长又回到了全局级别,所mysql的步长跟sqlserver的步长有很大的不同,mysql不能设置为表级别的步长!!

mysql> show variables like 'auto_inc%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 1     | --步长
| auto_increment_offset    | 1     |  -- mysql起始值,不是单独一个表的
+--------------------------+-------+

 

修改回话级别 

mysql> set @@auto_increment_increment=3;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'auto_incre%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 3     |
| auto_increment_offset    | 3     |
+--------------------------+-------+
mysql> insert into dd values (),(),();
Query OK, 3 rows affected (0.07 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from dd;
+----+
| id |
+----+
|  3 |
|  8 |
| 13 | -- 除了这里步长都变为了3
| 18 |
| 21 |
| 24 |
+----+
重新登录之后
mysql> show variables like 'auto_incre%';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| auto_increment_increment | 5     |
| auto_increment_offset    | 3     |
+--------------------------+-------+

 

修改全局

set global auto_increment_increment=5; -- 可同样设置初始值
-- 需重新登录,之后创建的的步长都为5

 

  如果auto_increment_offset的值大于auto_increment_increment的值,则auto_increment_offset的值会被忽略

唯一约束

  unique:表示该字段的值不可以重复。用在字段后

  组合:表示组合起来的字段不能同时重复。用在建表最后 unique 别名(字段名1,字段名2)

 

 unsigned 表示数字类型没有符号,默认有符号

外键约束

constraint 外键名 foreign key (字段名) references 库名.表名(字段名) on delete cascade

把一个表的一个字段关联到另一个表的字段。

比如有一个员工信息表,和一个部门表

+---------+-----------+
| dept_id | dept_name |
+---------+-----------+
|       1 | 财务部    |
|       2 | 普工      |
+---------+-----------+

部门表

+----+--------+---------+
| id | name   | dept_id |
+----+--------+---------+
|  1 | 熊大   |       1 |
|  2 | 熊二   |       1 |
+----+--------+---------+

将员工所属部门关联到部门表里,节省空间。员工所属部门只能从部门表里选择

-- 部门表
create table dept(
        dept_id int(30) not null auto_increment primary key,
        dept_name varchar(255) not null
        );
-- 员工表
create table emp(
        id int(10) not null auto_increment primary key,
        name varchar(50) not null,
        dept_id int(10) not null,
        constraint f_key foreign key (dept_id) references db2.dept(dept_id) on delete cascade
                );

默认情况下添加外键约束后,部门表中的数据如果被员工表中的数据使用了,则不可以删除
级联删除:删除主表的数据时,关联的从表数据也删除。在建立外键约束的后面增加on delete cascade

设置为null:删除主表的数据时,将从表的关联列的值设置为null。在建立外键约束的后面增加on delete set null

 

 警告:进公司工作时,最好问清楚,表的主外建设计是否需要添加约束?

posted @ 2017-12-10 17:48  瓜田月夜  阅读(729)  评论(0)    收藏  举报