MySQL
MySQL

嘿,这只海豚好看吗?是的,这是一只自由开放的海豚——MySQL
我们假定大家已经下载并成功安装好了MySQL数据库,学会了基本的查表与建表操作。那么今天,就让我们走进六大约束的学习吧。

1&2&3

4&5
$ 课前回顾
1. 开启MySQL服务
net start mysql80
复制
2. 登录进入MySQL数据库
mysql -uroot -p
复制
3. 查看数据库的内容
show databases;
复制
4. 创建一个数据库(名称可自定义)
create database sorry_for_delay;
复制
5. 选中所创建的数据库
use sorry_for_delay;
复制
6. 创建数据表
CREATE TABLE class2008(
name VARCHAR(20),
sex CHAR(1),
birth DATE,
privence VARCHAR(20)
);
复制
7. 查看库中的数据表
show tables;
复制
8. 查看数据表的全部具体内容
select * from sorry_for_delay;
复制
9. 数据表的描述(与今天的内容息息相关)
desc sorry_for_delay;
复制

$ 六大约束
好了,正式开搞!(注:所以代码行均可向右滑动查看)
可以看到使用describe命令后,出现了上图的表。Null \ Key \ Default \ Extra 等字样。这些与我们接下来的约束息息相关!
#
主键约束
它能够唯一确定一张表中的一条记录,
也就是我们通过给某个字段添加约束,
就可以使得该字段不重复且不为空.
(primary key)
create table user1(
id int primary key,--主键约束id不可重复且不可为空。
name varchar(20)
);
复制
联合主键
(即id与name不可以完全一样
,但可以某一个相同)
create table user1(
id int ,
name varchar(20),
password varchar(20),
primary key(id,name)--即id与name不可以完全一样
);
复制
修改主键约束的相关操作
(使用alter命令)
--修改表结构,添加主键约束
alter table user4 add primary key(id);
--删除主键约束
alter table user4 drop primary key;
--使用modify修改字段,添加主键约束
alter table user4 modify id int primary key;
复制
#
自增约束
只要联合主键值加起来不重复即可
create table user3(
id int primary key auto_increment,
name varchar(20)
);
复制
两次只插入name zhangsan,
id会按顺序自动生成。
mysql> insert into user3 (name) values('zhangsan');
Query OK, 1 row affected (0.05 sec)
mysql> select * from user3;
+----+----------+
| id | name |
+----+----------+
| 1 | zhangsan |
| 2 | zhangsan |
+----+----------+
2 rows in set (0.00 sec)
复制
#
唯一约束
约束修饰字段的值不可以重复
create table user5(
id int,
name varchar(20)
);
alter table user5 add unique(name);
复制
或者在创建的时候添加
--在创建user6的时候添加
create table user6(
id int,
name varchar(20),
unique(name)
);
复制
或者创建时在字段后添加
create table user6(
id int,
name varchar(20) unique
);
复制
运用alter命令进行修改操作
--如何删除唯一约束
alter table user7 drop index name;
--modify添加
alter table user7 modify name varchar(20) unique;
----总结;
------1、建表的时候添加
------2、可以使用alter……add……
------3、alter……modify……
------4、删除alter……drop……
复制
#
非空约束
修饰的字段不能为空
create table user8(
id int,
name varchar(20) not null
);
复制
这时调用desc命令时显示
(注意NULL!)
mysql> desc user8;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | NO | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.05 sec)
复制
#
默认约束
当我们插入字段值的时候
如果没有传值,就使用默认值
(这里age默认为10)
create table user10(
id int,
name varchar(20) ,
age int default 10
);
复制
这是调用desc命令时
(注意Default!)
mysql> desc user10;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| age | int | YES | | 10 | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.05 sec)
复制
例如使用下面的insert命令,
就会调用默认值
insert into user10(id, name) values(1,'zhangsan');
复制
#
外键约束
外键约束相较而言比较麻烦,
因为它涉及到了两个表,
父表与子表。
例如班级信息表与学生信息表。
我们也以此为例展开讲解。
(注意students表中的最后一句)
create table classes(
id int primary key,
name varchar(20)
);
--学生表
create table students(
id int primary key,
name varchar(20),
class_id int,
foreign key(class_id) references classes(id)
);
复制
我们来看一下分别调用desc命令
的结果(注意key中的区别)
mysql> desc classes;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
mysql> desc students;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| class_id | int | YES | MUL | NULL | |--key中有了MUL
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
复制
我们再分别向其中添加数据
insert into classes values(1,'一班');
insert into classes values(2,'二班');
insert into classes values(3,'三班');
insert into classes values(4,'四班');
insert into students values(1001,'zhangsan',1);
insert into students values(1002,'lisi',2);
insert into students values(1003,'wangwu',3);
insert into students values(1004,'zhaliu',4);
复制
若添加主表中(班级表)没有的5班,
则会提示下列错误。
mysql> insert into students values(1005,'zaliu',5);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test01`.`students`, CONSTRAINT `students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`))
复制
注意
1 主表中没有的数据值,
在副表中是不可以使用的
2 主表记录被副表引用,
是不可以被删除的。

