Author:老九
计算机专业
可控之事 沉重冷静 不可控之事 乐观面对
85180586@qq.com
😄 😆 😵 😭 😰 😅 😢 😤 😍 ☺️ 😎 😩
👍 👎 💯 👏 🔔 🎁 ❓ 💣 ❤️ ☕️ 🌀 🙇 💋 🙏 💦 💩 ❗️ 💢
————————————————
版权声明:本文为CSDN博主「浦上青天」的原创文章
文章目录
知识点
数据库约束
not null
- 指定某列的存储不能为null值
createtable student (id intnotnull,name varchar(20));
Query OK,0rows affected (0.01 sec)
mysql>desc student;+-------+-------------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+-------+-------------+------+-----+---------+-------+| id |int(11)|NO||NULL||| name |varchar(20)| YES ||NULL||+-------+-------------+------+-----+---------+-------+2rowsinset(0.00 sec)
unique
- 保证某列必须有唯一的值,插入重复的值就会报错
default
- 规定给列赋值时的默认值
createtable student(id int,name varchar(20)default'匿名');
primary key 主键
- 主键约束,是not null 与unique的结合,确保某列的赋值不能为null,并且是唯一的
auto_increment
- 自增特点: 1.如果表中没有记录,自增从1开始 2.如果有数据,从上一条记录往下自增 3.插入再删掉数据,自增的值不会重复利用,会按删掉的那条开始自增
createtable student (id intprimarykeyauto_increment,name varchar(20));
Query OK,0rows affected (0.01 sec)
mysql>desc student;+-------+-------------+------+-----+---------+----------------+| Field |Type|Null|Key|Default| Extra |+-------+-------------+------+-----+---------+----------------+| id |int(11)|NO| PRI |NULL|auto_increment|| name |varchar(20)| YES ||NULL||+-------+-------------+------+-----+---------+----------------+2rowsinset(0.00 sec)
mysql>insertinto student values(null,'张三');
Query OK,1row affected (0.00 sec)
mysql>select*from student;+----+--------+| id | name |+----+--------+|1| 张三 |+----+--------+1rowinset(0.00 sec)
foreign key 外键
- 外键约束,在表一中的数据必须在表二中存在,要参照完整性准则
- 外键约束描述的是两张表的两个列之间的“依赖关系”
- 外键约束会影响表的删除,例如下面的实例的class表被关联,所以它不能被轻易删除
mysql>createtable class (-> id intprimarykey,-> name varchar(20)notnull->);
Query OK,0rows affected (0.04 sec)
mysql>createtable student (-> id intprimarykey,-> name varchar(20)notnull,-> email varchar(20)default'unknow',-> QQ varchar(20)unique,-> classId int,foreignkey(classId)references class(id)->);
Query OK,0rows affected (0.03 sec)
mysql>desc class;+-------+-------------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+-------+-------------+------+-----+---------+-------+| id |int(11)|NO| PRI |NULL||| name |varchar(20)|NO||NULL||+-------+-------------+------+-----+---------+-------+2rowsinset(0.02 sec)
mysql>desc student;+---------+-------------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+---------+-------------+------+-----+---------+-------+| id |int(11)|NO| PRI |NULL||| name |varchar(20)|NO||NULL||| email |varchar(20)| YES || unknow ||| QQ |varchar(20)| YES | UNI |NULL||| classId |int(11)| YES | MUL |NULL||+---------+-------------+------+-----+---------+-------+5rowsinset(0.00 sec)
check
- 指定一个条件,通过条件来对值进行判定
- 但是mysql并不支持
createtable test_user (
id int,
name varchar(20),
sex varchar(1),check(sex ='男'or sex='女'));
表的设计
一对一
- 一对一设计表就比如学生表和账户表,一个账户对应到一个学生,一个学生也只有一个账户
- 表示方法 1.可以把这两个实体用一张表来表示 2.可以用两张表来表示,其中一张表包含了另一个表的id
一对多
- 一个学生应该处于一个班级中,一个班级可以包含多个学生
- 表示方法: 1.在班级表中,新增一列,表示这个班级里的学生id都有啥(mysql没有数组类型,redis可以) 2.班级表不变,学生表中,新增一列classId
多对多
- 多对多设计表就好比学生表和课程表,一个学生可以选多个课程,一个课程也可以被多个学生选择
- 表示方法 : 使用一个关联表,来表示两个实体之间的关系
多对多建表实例
-- 学生表
mysql>createtable test_student (-> id intprimarykey,-> name varchar(10)default'unknow'->);
Query OK,0rows affected (0.03 sec)-- 选课表
mysql>createtable test_course (-> id intprimarykey,-> name varchar(20)default'unknow'->);
Query OK,0rows affected (0.02 sec)-- 成绩表
mysql>createtable test_score (-> studentId int,-> courseId int,-> score int,->foreignkey(studentId)references test_student(id),->foreignkey(courseId)references test_course(id)->);
Query OK,0rows affected (0.02 sec)
mysql>desc test_student;+-------+-------------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+-------+-------------+------+-----+---------+-------+| id |int(11)|NO| PRI |NULL||| name |varchar(10)| YES || unknow ||+-------+-------------+------+-----+---------+-------+2rowsinset(0.00 sec)
mysql>desc test_coures;
ERROR 1146(42S02): Table'java_5_27.test_coures' doesn't exist
mysql>desc test_course;+-------+-------------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+-------+-------------+------+-----+---------+-------+| id |int(11)|NO| PRI |NULL||| name |varchar(20)| YES || unknow ||+-------+-------------+------+-----+---------+-------+2rowsinset(0.00 sec)
mysql>desc test_score;+-----------+---------+------+-----+---------+-------+| Field |Type|Null|Key|Default| Extra |+-----------+---------+------+-----+---------+-------+| studentId |int(11)| YES | MUL |NULL||| courseId |int(11)| YES | MUL |NULL||| score |int(11)| YES ||NULL||+-----------+---------+------+-----+---------+-------+3rowsinset(0.00 sec)
插入数据到实例实现多对多
mysql>insertinto test_student values(1,'listen');
Query OK,1row affected (0.01 sec)
mysql>insertinto test_course values(1,'数学');
Query OK,1row affected (0.00 sec)
mysql>insertinto test_student values(2,'Faker');
Query OK,1row affected (0.00 sec)
mysql>insertinto test_course values(2,'数学');
Query OK,1row affected (0.00 sec)
mysql>insertinto test_score values(1,1,90);
Query OK,1row affected (0.00 sec)
mysql>insertinto test_score values(1,2,99);
Query OK,1row affected (0.00 sec)
mysql>insertinto test_score values(2,1,50);
Query OK,1row affected (0.00 sec)
mysql>insertinto test_score values(2,2,60);
Query OK,1row affected (0.00 sec)
mysql>select*from test_student;+----+--------+| id | name |+----+--------+|1| listen ||2| Faker |+----+--------+2rowsinset(0.00 sec)
mysql>select*from test_course;+----+--------+| id | name |+----+--------+|1| 数学 ||2| 语文 |+----+--------+2rowsinset(0.00 sec)
mysql>select*from test_score;+-----------+----------+-------+| studentId | courseId | score |+-----------+----------+-------+|1|1|90||1|2|99||2|1|50||2|2|60|+-----------+----------+-------+4rowsinset(0.00 sec)
先赞后看,养成习惯!!!^ _ ^♥♥♥
每天都更新知识点哦!!!
码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘记关注我哦!
版权归原作者 浦浦浦浦浦 所有, 如有侵权,请联系我们删除。