(Mysql 三)mysql的约束

r


constraint(约束)语句的用法:(选用)

如用 constraint 创建设置主键约束:

create table aaa( a_id int ,name  varchar(18),constraint con_name1  primary  key(id));  //创建aaa表,并把 id 设置为主键约束,并且约束名为 con_name

    //约束名在数据库中是唯一的,如果不指定,会自动生成一个

用 constraint 创建 设置uniique唯一约束:

create table bbb( b_id int ,name  varchar(18),constraint  con_name2 unique( id ));


用 constraint 创建表 设置外键约束:

create table ccc(c_id  int,name varchar(18),constraint  con_name3  foreign key( c_id )  references  bbb( b_id ));

//创建 ccc表,并把c_id设置为 bbb表的外键,注意,bbb表中的b_id必须为bbb表中的主键,否则 ccc表无法设置为b_id的外键


一,NOT NULL约束

有NOT NULL约束的字段,表明改字段在插入数据的时候不能为空。

上图红色框表示:

id字段 是不允许为 空的,因为 id字段 施加了 NOT NULL 约束。

而name字段是允许 为空的,因为 name字段没有施加 NOT NULL约束。


修改字段为 NOT NULL:

修改 aaa表 的name字段为 NOT NULL


二,unique约束(唯一约束)

有 unique约束的字段的数据都不能重复,都可以为 空。

例如:身份证号码,是不能重复的,可以用unique约束,那么该字段的数据就不可以重复

如果 Key的位置为 UNI,而 Null的位置为 NO,则Key会变成 PRI(主键约束)

即主键约束 = unique约束 + NOT NULL

上图表示:

Key中的 UNI表示该字段是 unique约束的


unique约束设置方法: 

alter table aaa  MODIFY id int unique;   //设置aaa表的 id字段为 unique 约束。


unique约束在创建表时设置:

create table  aaa (id int unique,name varchar(18));     //创建aaa表,且其id字段为unique约束


三,主键(PRIMARY KEY)约束

主键作用和unqie约束差不多,都是其约束的字段数据不能重复

主键约束和unique约束的区别:

1.主键约束的字段的数据不能为空,而unique约束可以为空。

2.一张表只能有一个主键约束,而一张表可以有多个unique约束。换言之主键约束只能一个字段拥有。

3.设置主键约束的目的是为了给外键使用

上图的PRI表示该字段为主键约束。


设置主键约束的方法:

(1)通过创建表设置:

create  table  aaa (id int ,name varchar(18),primary key(id)); //创建aaa表 并把字段id 设置为aaa表的主键


(2)创建表后设置:

alter table aaa MODIFY  id  int  primary key;  //设置aaa表的 id字段为主键


*组合主键:

create  table  aaa (id int ,name varchar(18),primary key(id,name));  

 //把aaa表中的字段id和name设置为组合主键,作用是,不允许两个数据的id和name同时相同


四,外键约束

前提:

使用外键必须用 innodb引擎,不过这是mysql默认的引擎,也不需要额外修改


外键的作用:

          限制一列或多列中的值必须被包含在另一表的外键列中。

          有了合适的外键约束后,如果读者试图插入新行或修改行而导致父表中的外键列并无可匹配值,那么服务器会抛出一个错误。

 注意:若要给A表弄一个外键约束,外键的内容是B表的某一列,那在B表的该列必须被先设置为唯一约束(主键约束也行)


举一个例子:(一个学生表,有sex列和name列,sex列里的值必须在另一个表 sex表中的sex列中有)

1.先创建 sex表。并把sex表的sex列列为 unique唯一约束:


mysql> alter table sex add constraint uni unique(sex);
Query OK, 0 rows affected (0.21 sec)
Records: 0  Duplicates: 0  Warnings: 0


mysql> desc sex;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| sex   | varchar(20) | YES  | UNI | NULL    |       |
+-------+-------------+------+-----+---------+-------+
1 row in set (0.00 sec)


2.为学生表(students)的sex列添加外键,外键指向sex表的sex列:

mysql> alter table students add constraint forkey foreign key(sex) references sex(sex);
表示修改 students 表,为该表的sex列添加外键约束,外键约束的内容指向sex表的sex列。


3.sex表的内容

mysql> select * from sex;
+------+
| sex  |
+------+
| F    |
| M    |
+------+


4.若往students表中添加数据的sex列的值不是 F 或 M,则会报错


五,默认值约束

如上图,当 name字段没被输入数据时,会默认被置成 "No name"

创建方法:

create table aaa(id int,name varchar(18 ) default  “No name”);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值