在线生成个人网站免费,做网站需服务器吗,云南网站制作公司,wordpress 首页编辑本节目标#xff1a; NOT NULL - 指示某列不能存储 NULL 值。 UNIQUE - 保证某列的每行必须有唯一的值。 DEFAULT - 规定没有给列赋值时的默认值。 PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列#xff08;或两个列多个列的结合#xff09;有唯一标 识 NOT NULL - 指示某列不能存储 NULL 值。 UNIQUE - 保证某列的每行必须有唯一的值。 DEFAULT - 规定没有给列赋值时的默认值。 PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列或两个列多个列的结合有唯一标 识有助于更容易更快速地找到表中的一个特定的记录。 FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。 CHECK - 保证列中的值符合指定的条件。对于 MySQL 数据库对 CHECK 子句进行分析但是忽略 CHECK子句。 1. 数据库约束 1.2 NULL约束 创建表时可以指定某列不为空 输入 DROP TABLE IF EXISTS student; CREATE TABLE student ( id INT NOT NULL , sn INT , name VARCHAR ( 20 ), qq_mail VARCHAR ( 20 ) ); 1.3 UNIQUE唯一约束 指定 sn 列为唯一的、不重复的 -- 重新设置学生表结构 DROP TABLE IF EXISTS student; CREATE TABLE student ( id INT NOT NULL , sn INT UNIQUE, name VARCHAR ( 20 ), qq_mail VARCHAR ( 20 ) ); Duplicate 的中文意思是“重复的”或“复制的”。在数据库术语中常用来表示唯一性约束 UNIQUE constraint被违反即试图插入或创建一个已经存在的值或记录。 1.4 DEFAULT默认值约束 指定插入数据时 name 列为空默认值 unkown -- 重新设置学生表结构 DROP TABLE IF EXISTS student; CREATE TABLE student ( id INT NOT NULL , sn INT UNIQUE, name VARCHAR ( 20 ) DEFAULT unkown , qq_mail VARCHAR ( 20 ) ); 1.5 PRIMARY KEY主键约束要求非空唯一 指定 id 列为主键 对于整数类型的主键常配搭自增长 auto_increment 来使用。插入数据对应字段不给值时使用 最大值1 。 -- 重新设置学生表结构 DROP TABLE IF EXISTS student; CREATE TABLE student ( id INT NOT NULL PRIMARY KEY, sn INT UNIQUE, name VARCHAR ( 20 ) DEFAULT unkown , qq_mail VARCHAR ( 20 ) ); 不为空 不能重复 不允许一个表中存在多个身份标识 但是数据库允许把多个列共同作为一个主键(联合主键) 主键需要分配一个唯一的值,如何进行分配呢? mysql 提供了一个 自动分配 主键值 方式,“自增主键”auto_increment 插入数据时,可以不指定id列的值,让数据库自动分配.就会按照1,2,3,4 ...... 也能手动指定其他数值. 在mysql中,给每个表都记录了一个“自增主键的最大值” 后续继续插入数据,无论之前的最大值是否仍然存在 都是根据之前保存的最大值,继续往后分配的. 自增主键只能针对像int/bigint整数使用 是有可能会使用字符串作为主键的. 部分情况下,都是用数字作为主键. 1.6 FOREIGN KEY外键约束 外键用于关联其他表的 主键 或 唯一键 语法foreign key ( 字段名 ) references 主表 ( 列 ) 案例 -- 创建班级表有使用 MySQL 关键字作为字段时需要使用 来标识 DROP TABLE IF EXISTS classes; CREATE TABLE classes ( id INT PRIMARY KEY auto_increment, name VARCHAR ( 20 ), desc VARCHAR ( 100 ) ); -- 重新设置学生表结构 创建学生表 student 一个学生对应一个班级一个班级对应多个学生。使用 id 为主键 classes_id为外键关联班级表 id DROP TABLE IF EXISTS student; CREATE TABLE student ( id INT PRIMARY KEY auto_increment, sn INT UNIQUE, name VARCHAR ( 20 ) DEFAULT unkown , qq_mail VARCHAR ( 20 ), classes_id int , FOREIGN KEY (classes_id) REFERENCES classes(id) 本表的列 被引用的表和列 ); 此时,外键约束就出现了 再次往student 中插入数据,就务必要确保 插入的数据的classes_ld的值,得在classes表中存在. 学生表的 classld 列,引用自 班级表的classld 列 班级表中的 数据,约束了/制约了学生表的数据 制约 被制约的一方 父表 子表 如果父表中的某个记录,被子表引用了,此时就不能删除/修改父表中的 对应记录了. 父表是约束了子表,子表也会对父表反向进行约束. 主键本身也是有“唯一性要求的” 频繁触发查询,此处数据库就会对主键约束,给出特殊的处理. 加快查询四度 数据库会针对 主键 列创建索引 如果不指定主键,是一个unique,也能达成类似的效果 1.7 CHECK约束了解 MySQL 使用时不报错但忽略该约束 2. 表的设计 三大范式 2.1 一对一 设计表的做法: a)搞一个表,同时包含学生和账号的信息. student account (studentld, name, accountName, password ..... ) b)搞两个表,使用id来进行联系. student(studentld, name , accountld) account(accountld, accountName, password) student(studentld, name ) account(accountld, accountName, password , studentld) 2.2 一对多 一个账号只能属于一个学生 可以使用同一张表,也可以使用两张表(通过一个id,联系) b)一对多关系 一个学生只能属于一个班级 一个班级可以包含多个学生 这个方案在MySQL中是不可行的.但是在有的数据库中(Redis是可行的) 学生表(学生id,学生姓名 ... ,班级 id) 1 张三 100 2 李四 101 3 王五 100 班级表(班级id,班级名称) 100 java100 101 java101 班级表(班级id,班级名称,学生id列表) 100 java100 1,3 101 java101 2 相当于“数组”类型 mysql不支持这样的类型 2.3 多对多
引入关联表,通过关联表把多对多关系表示出来 学生-课程表(学生id,课程id) 1 100 张三选择了语文 1 101 张三选择了数学 1 102 张三选择了英语 2 100 李四选择了语文 2 101 王五选择了教学 如果您觉得有失偏颇请您在评论区指正如果您觉得不错的话留个好评再走吧 您的鼓励就是对我最大的支持!