走进MySQL(8)

写在最前,本篇文章大部分来源于动力节点MySQL入门基础的提炼,并附带自己的理解。主要是为了复习此前学了又忘的数据库。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。

什么是约束?

在创建表的时候,可以给表中的一些字段加上约束,保证表数据的完整性和有效性

约束作用是为了保证:表中数据有效!

常见约束

非空约束:not null 约束的字段不能为null, 只有列级约束,但可以其他约束联合使用。

唯一性约束:unique 约束字段不能重复
如何使两个字段联合起来唯一?
在字段之后加入unique(字段1,字段2,…) 称为表级约束

想要给多个字段联合添加约束时,需要使用表级约束。

主键约束:primary key

  1. 如果字段同时被not null,unique约束,则自动变为主键。
  2. 任何一张表都有主键,没有则表无效
  3. 主键值是一条记录的唯一标识
  4. 可以多个字段组成主键,但一个表只能有一个主键
  5. 不建议使用varchar作为主键,因为主键一般都是定长的
    自然主键:主键值是一个自然数,和业务没关系
    业务主键:主键值和业务紧密关联,例如银行卡号作为主键

auto_increment 使得字段自增

外键约束:foreign key
添加外键约束,使得字段的值只能来自于其引用表的字段里面的值。

注意:相当于形成了一个父表和子表的关系。
必须父表先存在,才能在子表内有
如果父表没有,那么字表一定也没有

使用方法foreign key(字段1) references 表名(字段2)
示例:

mysql> create table teacher(
    -> classno int primary key,
    -> name varchar(255));
Query OK, 0 rows affected (0.02 sec)

mysql> create table stu(
    -> id int primary key auto_increment,
    -> cnt int,
    -> foreign key(cnt) references teacher(classno)
    -> );
mysql> select * from teacher;
+---------+------+
| classno | name |
+---------+------+
|     100 | wwww |
|     101 | qqqq |
+---------+------+

mysql> insert into stu(cnt) values(102);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`learn`.`stu`, CONSTRAINT `stu_ibfk_1` FOREIGN KEY (`cnt`) REFERENCES `teacher` (`classno`))
mysql> insert into stu(cnt) values(101);
Query OK, 1 row affected (0.01 sec)

mysql> select * from stu;
+----+------+
| id | cnt  |
+----+------+
|  2 |  101 |
+----+------+

提问:

  1. 外键必须引用主键么? 不一定,但至少具有unique约束
  2. 外键可以为空么? 可以

检查约束:check (mysql不支持,oracle支持)
重点学前四个

.sql 文件被称为sql脚本文件
编写了大量的sql语句
执行文件时,所有sql语句会全部执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值