mysql约束_MySQL约束条件

eda27b5781188d349b7b301997127c97.png

约束条件

  • not null 不能为空
mysql> create table t2(id int not null,name varchar(11) not null);  -- 创建表t2,设置id和name的约束条件
Query OK, 0 rows affected (0.01 sec)

mysql> insert t2 values(1,'egon');  -- 可正常插入数据
Query OK, 1 row affected (0.00 sec)

mysql> create table t3(id int,name varchar(11));  -- 我们再次建个无约束条件的t3
Query OK, 0 rows affected (0.01 sec)

mysql> insert t2 values();  -- 向t2插入空白报错
ERROR 1364 (HY000): Field 'id' doesn't have a default value
mysql> insert t3 values();  -- 向t3插入空白可以正常插入,这里需要mysql是严格模式
Query OK, 1 row affected (0.00 sec)
  • not null default 111>>不能为空,且默认值为111
mysql> create table t1(id int not null default 123);  -- 创建表t1,设置约束条件不能为空,且默认值为123
Query OK, 0 rows affected (0.01 sec)

mysql> insert t1 values();  -- 这时我们插入空的时候,是可以正常插入的,因为有默认值了
Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;  -- 我们查看发现id是123,说明当我们新增的值为空的时候,会自动传入设置的默认值
+-----+
| id  |
+-----+
| 123 |
+-----+
1 row in set (0.00 sec)
  • unique>>不能重复,单列唯一
mysql> create table t4(id int unique);  -- 新建表t4,设置约束条件为unique,不能重复
Query OK, 0 rows affected (0.01 sec)

mysql> insert t4 value(111);  -- 我们插入一个id为111
Query OK, 1 row affected (0.00 sec)

mysql> insert t4 value(111);  -- 再次插入111的id,它提示我们111已经有了
ERROR 1062 (23000): Duplicate entry '111' for key 'id'

mysql> insert t4 value(11);  -- 当我们插入11的时候可以正常插入,说明表t4,不能插入重复的值
Query OK, 1 row affected (0.00 sec)
  • nuique(字段1,字段2)>>联合唯一
mysql> create table t5(id int,ip varchar(15),port int,unique(ip,port));  -- 创建新表t5,设置约束为值
       唯一,但是是ip+port一起算唯一即可
Query OK, 0 rows affected (0.02 sec)

mysql> insert t5 values(1,12,123);  -- 插入id都是1,ip和port有区别
Query OK, 1 row affected (0.00 sec)

mysql> insert t5 values(1,12,123);  -- 插入id都是1,ip和port重复,报错
ERROR 1062 (23000): Duplicate entry '12-123' for key 'ip'

mysql> insert t5 values(1,12,124);  -- 插入ip重复,port不同,正常
Query OK, 1 row affected (0.00 sec)

mysql> insert t5 values(1,13,123);  -- 插入ip不同,port重复,也正常
Query OK, 1 row affected (0.00 sec)

mysql> select * from t5;
+------+------+------+
| id   | ip   | port |
+------+------+------+
|    1 | 12   |  123 |
|    1 | 12   |  124 |
|    1 | 13   |  123 |
+------+------+------+
3 rows in set (0.00 sec)
  • not null 和unique的化学反应>>被识别成主键
  • primary key>>主键
    • 主键没有着明确的概念定义,其实是索引的一种,并且是唯一性索引的一种,且必须定义为“PRIMARY KEY”,主键不能重复,一个表只能有一个主键
    • Mysql中规定自增列必须为主键,在插入时,如果自动增长列没有输入值,则插入的值为自动增长后的值;如果输入的值为0或者null,则插入的值也为自动增长后的值;如果插入某个确定的值,且该值在前面没有出现过,则可以直接插入
    • 主键一定是唯一性索引,唯一性索引并不一定就是主键
    • 一个表中可以有多个唯一性索引,但只能有一个主键
    • 主键列不允许空值,而唯一性索引列允许空值
    • 索引可以提高查询的速度
    • 主键的约束效果是not null + unique
    • innodb表有且只有一个主键,但是该主键可以是联合主键
后续建表必写:id int primary key auto_increment

mysql> create table t6(id int primary key auto_increment,name varchar(11));
Query OK, 0 rows affected (0.01 sec)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值