mysql完整性约束命名_mysql 表的完整性约束

mysql 表的完整性约束

约束概念

为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,

使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。

约束条件与数据类型的宽度一样,都是可选参数,主要分为以下几种:

# NOT NULL :非空约束,指定某列不能为空;

# UNIQUE : 唯一约束,指定某列或者几列组合不能重复

# PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录

# FOREIGN KEY :外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性

unsigned 设置某一个数字无符号 (整数类型 ,浮点类型不能是unsigned的)

not null default create table t2(id int not null,name char(12) not null,age int default 18,

gender enum('male','female') not null default 'male');

not null 某一个字段不能为空(严格模式会影响非空设置的效果)

#not null示例

mysql> create table t12 (id int not null);

Query OK, 0 rows affected (0.02 sec)

mysql> select * from t12;

Empty set (0.00 sec)

mysql> desc t12;

+-------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| id | int(11) | NO | | NULL | |

+-------+---------+------+-----+---------+-------+

row in set (0.00 sec)

#不能向id列插入空元素。

mysql> insert into t12 values (null);

ERROR 1048 (23000): Column 'id' cannot be null

mysql> insert into t12 values (1);

Query OK, 1 row affected (0.01 sec)

#not null不生效

#设置严格模式:

不支持对not null字段插入null值

不支持对自增长字段插入”值

不支持text字段有默认值

#直接在mysql中生效(设置在内存,重启失效):

mysql>set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

#配置文件添加(永久生效):

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

default 给某个字段设置默认值(设置默认值)

#我们约束某一列不为空,如果这一列中经常有重复的内容,就需要我们频繁的插入,这样会给我们的操作带来新的负担,

于是就出现了默认值的概念。

#默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值

#not null + default 示例

mysql> create table t13 (id1 int not null,id2 int not null default 222);

Query OK, 0 rows affected (0.01 sec)

mysql> desc t13;

+-------+---------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+---------+------+-----+---------+-------+

| id1 | int(11) | NO | | NULL | |

| id2 | int(11) | NO | | 222 | |

+-------+---------+------+-----+---------+-------+

rows in set (0.01 sec)

# 只向id1字段添加值,会发现id2字段会使用默认值填充

mysql> insert into t13 (id1) values (111);

Query OK, 1 row affected (0.00 sec)

mysql> select * from t13;

+-----+-----+

| id1 | id2 |

+-----+-----+

| 111 | 222 |

+-----+-----+

row in set (0.00 sec)

# id1字段不能为空,所以不能单独向id2字段填充值;

mysql> insert into t13 (id2) values (223);

ERROR 1364 (HY000): Field 'id1' doesn't have a default value

# 向id1,id2中分别填充数据,id2的填充数据会覆盖默认值

mysql> insert into t13 (id1,id2) values (112,223);

Query OK, 1 row affected (0.00 sec)

mysql> select * from t13;

+-----+-----+

| id1 | id2 |

+-----+-----+

| 111 | 222 |

| 112 | 223 |

+-----+-----+

rows in set (0.00 sec)

unique 设置某一个字段不能重复 (唯一约束)

create table t3(id int unique,username char(12) unique,password char(18));

# 联合唯一 unique(字段1,字段2)

create table t4(id int,ip char(15),server char(10),port int,unique(ip,port));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值