环保局网站建设,wordpress导入项目,域名对行业网站的作用,自动发广告的软件●#x1f9d1;个人主页:你帅你先说. ●#x1f4c3;欢迎点赞#x1f44d;关注#x1f4a1;收藏#x1f496; ●#x1f4d6;既选择了远方#xff0c;便只顾风雨兼程。 ●#x1f91f;欢迎大家有问题随时私信我#xff01; ●#x1f9d0;版权#xff1a;本文由[你帅… ●个人主页:你帅你先说. ●欢迎点赞关注收藏 ●既选择了远方便只顾风雨兼程。 ●欢迎大家有问题随时私信我 ●版权本文由[你帅你先说.]原创CSDN首发侵权必究。 为您导航表的约束空属性默认值zerofill主键自增长唯一键外键表的约束
真正约束字段的是数据类型但是数据类型约束很单一需要有一些额外的约束更好的保证数据的合法性从业务逻辑角度保证数据的正确性。比如有一个字段是email要求是唯一的。 表的约束很多这里主要介绍如下几个:null/not null,default, comment, zerofillprimary key auto_incrementunique key。
空属性
两个值null默认的和not null(不为空)。 数据库默认字段基本都是字段为空但是实际开发时尽可能保证字段不为空因为数据为空没办法参与运算。 在这里千万不要把空属性和C/C的联系起来它们之间没有任何关系这里的空和0也不是等价的。
默认值
默认值: 某一种数据会经常性的出现某个具体的值可以在一开始就指定好在需要真实数据的时候用户可以选择性的使用默认值。
mysql create table t1 (name varchar(20) not null, age tinyint unsigned default 0, sex char(2) default 男);
Query OK, 0 rows affected (0.03 sec)
mysql insert into t1(name) values(张三);此时发现虽然没有插入年龄和性别但表中已自动填入默认值。
zerofill
前面我们在创建表时经常会写int(11)不知道你有没有思考过这个11是什么含义整型不是4字节吗这个11又代表什么呢其实没有zerofill这个属性括号内的数字是毫无意义的。
mysql create table t2(a int(11) unsigned zerofill
);
Query OK, 0 rows affected, 2 warnings (0.03 sec)mysql insert t2 value(5);
Query OK, 1 row affected (0.01 sec)看到这边你也就能理解了括号里的数字代表位宽。
主键
主键:primary key用来唯一的约束该字段里面的数据不能重复不能为空一张表中最多只能有一个主键。主键所在的列通常是整数类型。
mysql create table t3 (id int unsigned primary key ,name varchar(20) not null);
Query OK, 0 rows affected (0.03 sec)mysql insert t3 values(1,张三);
Query OK, 1 row affected (0.01 sec)
//值相同时不能插入
mysql insert t3 values(1,张三);
ERROR 1062 (23000): Duplicate entry 1 for key t3.PRIMARY
//主键值相同时也不能插入,保证了主键的唯一性
mysql insert t3 values(1,李四);
ERROR 1062 (23000): Duplicate entry 1 for key t3.PRIMARYmysql insert t3 values(2,李四);
Query OK, 1 row affected (0.00 sec)
//当表创建好以后但是没有主键的时候可以再次追加主键
alter table 表名 add primary key(字段列表)
//删除主键
alter table 表名 drop primary key;
//复合主键
mysql create table tt14(id int unsigned, course char(10), score tinyint unsigned default 60,primary key(id, course) -- id和course为复合主键
);自增长
auto_increment:当对应的字段不给值会自动的被系统触发系统会从当前字段中已经有的最大值1操作得到一个新的不同的值。通常和主键搭配使用作为逻辑主键。 自增长的特点:
任何一个字段要做自增长前提是本身是一个索引key一栏有值自增长字段必须是整数一张表最多只能有一个自增长
mysql create table t4(id int unsigned primary key auto_increment,name varchar(10) not null default
);
Query OK, 0 rows affected (0.02 sec)mysql insert t4(name) value(张三);
Query OK, 1 row affected (0.00 sec)mysql insert t4(name) value(李四);
Query OK, 1 row affected (0.00 sec)mysql insert t4(name) value(王五);
Query OK, 1 row affected (0.00 sec)mysql show create table t4 \G;
*************************** 1. row ***************************Table: t4
Create Table: CREATE TABLE t4 (id int unsigned NOT NULL AUTO_INCREMENT,name varchar(10) NOT NULL DEFAULT ,PRIMARY KEY (id)
) ENGINEInnoDB AUTO_INCREMENT4 DEFAULT CHARSETutf8mb3
1 row in set (0.00 sec)
//我们发现表里面会保存auto_incremen下一次自增长的值这就是自增长的原理。唯一键
一张表中有往往有很多字段需要唯一性数据不能重复但是一张表中只能有一个主键唯一键就可以解决表中有多个字段需要唯一性约束的问题。 唯一键的本质和主键差不多唯一键允许为空而且可以多个为空空字段不做唯一性比较。 这样来看似乎主键和唯一键的区别就在于是否允许为空。 我们可以来验证一下
mysql create table t5( id int primary key not null, name varchar(20)
);
Query OK, 0 rows affected (0.03 sec)mysql desc t5;
-----------------------------------------------
| Field | Type | Null | Key | Default | Extra |
-----------------------------------------------
| id | int | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
-----------------------------------------------
2 rows in set (0.00 sec)
//我们惊奇的发现mysql直接把不为空的唯一键处理成了主键为什么要有唯一键 实际上这很好理解我们身上不可能只有一个属性具有唯一性在一个学校里面你的学号是唯一的我们可以设为主键但你的QQ号、微信号、身份证号难道就不是唯一的吗所以唯一键是用来约束非主键属性的列属性。
外键
外键用于定义主表和从表之间的关系:外键约束主要定义在从表上主表则必须是有主键约束或unique约束。当定义外键后要求外键列数据必须在主表的主键列存在或为null。 语法
foreign key (字段名) references 主表(列)mysql create table class( id int primary key, name varchar(30) not null
);
Query OK, 0 rows affected (0.04 sec)
mysql create table stu ( id int primary key, name varchar(30) not null , class_id int, foreign key (class_id) references class(id)
);
Query OK, 0 rows affected (0.03 sec)mysql insert class values(1, 大数据1班),(2, 大数据2班);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0//不存在班级号为3的班级,故插入失败
mysql insert stu values(100, 张三,3);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (mydb.stu, CONSTRAINT stu_ibfk_1 FOREIGN KEY (class_id) REFERENCES class (id))//存在班级号为2的班级,插入成功
mysql insert stu values(100, 张三,2);
Query OK, 1 row affected (0.01 sec)外键和外键约束的区别: 外键是用来实现表和表之间关系的字段。 而外键约束实际上是让mysql去帮我们维护表之间的逻辑关系。 例如有一个学生表和一个班级表学生表有一个外键是班级编号班级表里有1和2两个编号当你想向学生表里插入班级编号为3的信息时无法插入这就是外键约束。 喜欢这篇文章的可以给个一键三连点赞关注收藏