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 主表记录被副表引用,
是不可以被删除的。







