主键约束(唯一标识) ****非空*** ****唯一*** ****被引用****(学习外键时) * 当表的某一列被指定为主键后,该列就不能为空,不能有重复值出现。...主键自增长 * 因为主键列的特性是:必须唯一、不能为空,所以我们通常会指定主键类为整型,然后设置其自动增长,这样可以保证在插入数据时主键列的唯一和非空特性。...非空约束 * 因为某些列不能设置为NULL值,所以可以对列添加非空约束。...唯一约束 * 车库某些列不能设置重复的值,所以可以对列添加唯一约束。...所以如果在wife表中有一条记录的wid为1,那么wife表中的其他记录的wid就不能再是1了,因为它是主键。 同时在husband.hid中必须存在1这个值,因为wid是外键。
2.空属性 两个值:null(默认的)和not null(不为空) 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。...站在正常的业务逻辑中: 如果班级没有名字,你不知道你在哪个班级 如果教室名字可以为空,就不知道在哪上课 所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。...default的列,才可以在插入值的时候,对列进行省略 4.列描述 列描述:comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。...具体来说,它将列a的数据类型更改为int(5),并且设置了两个额外的属性:unsigned和zerofill。 这条语句为什么会出现两个a呢?...唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。 关于唯一键和主键的区别: 我们可以简单理解成,主键更多的是标识唯一性的。
唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。 唯一性约束允许列值为空。 在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同。...主键约束对应着表中的一列或者多列(复合主键) 如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。...# 6.4 特点 (1)从表的外键列,必须引用 / 参考主表的主键或唯一约束的列 为什么?.../delete 掉子表的匹配记录 Set null方式 :在父表上 update/delete 记录时,将子表上匹配记录的列设为 null,但是要注意子表的外键列不能为 not null No...DEFAULT 约束 # 8.1 作用 给某个字段 / 某列指定默认值,一旦设置默认值,在插入数据时,如果此字段没有显式赋值,则赋值为默认值。
例如:学生表、课程表、选课表:选课表的学生和课程要分别参考学生表和课程表,学生表和课程表是 主表,选课表是从表。 1.4 特点 从表的外键列,必须引用/参考主表的主键或唯一约束的列 为什么?...如果要删除数据,需要先删除从表中依赖该记录的数据,然后才可以删除主表的数据 在“从表”中指定外键约束,并且一个表可以建立多个外键约束 从表的外键列与主表被参照的列名字可以不相同,但是数据类型必须一样,逻辑意义一致...掉子表的匹配记录 Set null方式 在父表上update/delete记录时,将子表上匹配记录的列设为null,但是要注意子表的外键列不能为not null No action方式 如果子表中有匹配的记录...,一旦设置默认值,在插入数据时,如果此字段没有显式赋值,则赋值为默认值。...例如:在表中插入第一 条记录,同时指定id值为5,则以后插入的记录的id 值就会从6开始往上增加。 添加主键约束时,往往需要设置字段自动增加属性。
站在正常的业务逻辑中: 如果班级没有名字,你不知道你在哪个班级。 如果教室名字为空,就不知道在哪上课。 所以我们在设计数据库表的时候,一定要在表中进行限制,满足上面条件的数据就不能插入到表中。...对于default而言,当用户忽略这一列的时候,如果设置了default,则使用默认值;如果没有设置default,则报错。 而对于age列: 下来再来看这个: 为什么还是让插入了呢?...而如果为我们没有在创建表的时候显示声明默认值,MySQL会优化,自动加上默认值为NULL。 四....并且建表之后添加主键需要保证在表中需要设置主键的那列元素不能冲突。...主要是因为方框内的设定,意思是下一次插入没有指定则就是1002。 那是不是对于每个空表,插入没有指定的值的时候都是从1开始呢?其实我们可以在创建表的时候就指定: 这样就指定初始为500。
第三个是表名称,一般情况下如果要获取所有的表的话,可以直接设置为null,如果设置为特定的表名称,则返回该表的具体信息。...(可能为空) String tableSchemaName = rs.getString("TABLE_SCHEM"); //表模式(可能为空),在oracle中获取的是命名空间...* 1 (columnNullable) - 该列允许为空 * 2 (columnNullableUnknown) - 不确定该列是否为空.../** * ISO规则用来确定某一列的是否可为空(等同于NULLABLE的值:[ 0:'YES'; 1:'NO'; 2:''; ])...* YES -- 该列可以有空值; * NO -- 该列不能为空; * 空字符串--- 不知道该列是否可为空
一、约束条件相关语句 1、主键约束(主键约束要求主键列的数据唯一,不允许为空) #创建库 mysql> create database test1; #进入到库中 mysql> use test1; #...2、非空约束(不允许列的值为空) mysql> create table tab3( -> id int(6) not null, # not null :不允许为空...可以看到其被标识为了主键,但是在创建时并没有指定它是主键,而是这一列的属性基本满足了主键的要求,如唯一、不可以为空。...5、设置自增值(一般用于id列,自增列必须设置为主键) 注:mysql只允许设置初始值,而不允许设置自增值,也就是说,可以设置为第一个值为5,然后依次递增,如:5、6、7.....但不可以设置其一次递增...现在将t3表的name列添加为t1表的name列的外键(其中t3_t1_name为自定义的约束名称): mysql> alter table tab3 add constraint tab3_tab1_
唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。 唯一性约束允许列值为空。 在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同。...主键约束对应着表中的一列或者多列(复合主键) 是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。 MySQL的主键名总是PRIMARY ,就算自己命名了主键约束名也没用。...6. 4 特点 ( 1 )从表的外键列,必须引用/参考主表的主键或唯一约束的列 为什么?...Set null方式:在父表上update/delete记录时,将子表上匹配记录的列设为null,但是要注意子 表的外键列不能为not null No action方式:如果子表中有匹配的记录,则不允许对父表对应候选键进行...DEFAULT约束 8. 1 作用 给某个字段/某列指定默认值,一旦设置默认值,在插入数据时,如果此字段没有显式赋值,则赋值为默认值。
约束条件与数据类型的宽度一样,都是可选参数,主要分为以下几种: # NOT NULL :非空约束,指定某列不能为空; # UNIQUE : 唯一约束,指定某列或者几列组合不能重复 # PRIMARY...DEFAULT 我们约束某一列不为空,如果这一列中经常有重复的内容,就需要我们频繁的插入,这样会给我们的操作带来新的负担,于是就出现了默认值的概念。...ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 #也可以创建表时指定auto_increment的初始值,注意初始值的设置为表选项,应该放到括号外...update/delete记录时,同步update/delete掉子表的匹配记录 . set null方式 在父表上update/delete记录时,将子表上匹配记录的列设为null 要注意子表的外键列不能为...Set default方式 父表有变更时,子表将外键列设置成一个默认的值 但Innodb不能识别
本文详细记录如何通过命令的方式修改MySQL的表结构,例如新增列、删除列等;不止学会了,你还学懂了,收藏吃灰~ 开始之前 上一篇文章创建了一些表,ER图如下。...,以及每个字段对应的名称、数据类型、默认值、空值约束、键约束等信息; 这里 Key为MUL主要是因为这两个字段有外键约束,约束其与另一个表的对应字段要对应; 查看某个表的某一列的结构 mysql>...修改列 这里以修改备注列的值不允许为空,默认值为空备注为场景; mysql> alter table score modify column remarks varchar(1000) not null...,column_name表示需要修改的列名,column_type表示该列原有的数据类型,NOT NULL表示设置该列为非空约束,DEFAULT '默认值'表示设置该列的默认值为默认值。...主键索引:索引列中的值必须是唯一的,不允许有空值。 普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值。 唯一索引:索引列中的值必须是唯一的,但是允许为空值。
表的约束,实质上就是用数据类型去约束字段,但是数据类型的约束手法很单一,比如,我们在设置身份证号这个字段,数据类型唯一起的约束是它属于char类型或者varchar类型,不能是浮点型也不能是日期时间类型...--注意:只有设置了default的列,才可以在插入值的时候,对列进行省略。...要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是1。为什么是这样呢?...举例: ①在创建表的时候直接在字段上指定主键,如表tt15,id为学生学号,为主键。查看表结构的时候,发现取值Key一列上,id被添加上了PRI,表示主键的意思。...唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较。 关于唯一键和主键的区别: 我们可以简单理解成,主键更多的是标识唯一性的。
“1”,它依然是20的长度 c、给表建立主键,看到好多表没主键,这在查询和索引定义上将有一定的影响 d、避免表字段运行为null,如果不知道添加什么值,建议设置默认值,特别int类型,比如默认值为0,在索引查询上...e、建立索引,聚集索引则意味着数据的物理存储顺序,最好在唯一的,非空的字段上建立,其它索引也不是越多越好,索引在查询上优势显著,在频繁更新数据的字段上建立聚集索引,后果很严重,插入更新相当忙。...注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 9.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引 10.如果mysql估计使用全表扫描要比使用索引快...“1”,它依然是20的长度 c、给表建立主键,看到好多表没主键,这在查询和索引定义上将有一定的影响 d、避免表字段运行为null,如果不知道添加什么值,建议设置默认值,特别int类型,比如默认值为0,在索引查询上...e、建立索引,聚集索引则意味着数据的物理存储顺序,最好在唯一的,非空的字段上建立,其它索引也不是越多越好,索引在查询上优势显著,在频繁更新数据的字段上建立聚集索引,后果很严重,插入更新相当忙。
(特点:非空、唯一); FOREIGN KEY(foreign key): 表示该字段为该表的外键,是与之联系的某表的主键。...添加主键的语法: 1.在创建数据表的时候设置主键; (1)单字段主键; 语法:字段名 数据类型 PRIMARY KEY mysql> create table hahaha2 -> ( ->...2.3使用外键: 外键用来在两个数据表之间建立连接,它可以是一列,也可以是多列; 语法: 在创建表的时候添加 字段1 数据类型 [完整性约束], 字段2 数据类型 [完整性约束], 字段N...注意; 1.关联的父表列,一定是父表的主键列 2.关联的父表如果为联合主键是,先关联联合主键中的第一个字段 3.关联父表时,被关联的外键的数据类型要和父表主键的数据类型一致,否则关联失败 4.关联父表时...5.要避免书写错误 6.如果两个表之间有外键关联,如果我们想要删除父表,必须先解除外键的关系,或者先删除掉子表, 否则无法删除父表 2.4使用非空约束 非空约束指字段的值不能为空 语法: 在创建表时
(特点:非空、唯一); FOREIGN KEY(foreign key): 表示该字段为该表的外键,是与之联系的某表的主键。...添加主键的语法: 1.在创建数据表的时候设置主键; (1)单字段主键; 语法:字段名 数据类型 PRIMARY KEY mysql> create table hahaha2 -> ( ->...: 外键用来在两个数据表之间建立连接,它可以是一列,也可以是多列; 语法: 在创建表的时候添加 字段1 数据类型 [完整性约束], 字段2 数据类型 [完整性约束], 字段N 数据类型 [完整性约束...CONSTRAINT 外键名 FOREIGN KEY (字段) REFERENCES 父表名 (父表主键列) 注意; 1.关联的父表列,一定是父表的主键列 2.关联的父表如果为联合主键是,先关联联合主键中的第一个字段...5.要避免书写错误 6.如果两个表之间有外键关联,如果我们想要删除父表,必须先解除外键的关系,或者先删除掉子表, 否则无法删除父表 2.4使用非空约束 非空约束指字段的值不能为空 语法: 在创建表时
唯一性索引 这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一 可以为空必须为1 只能空一次 主键 主键是一种唯一性索引,但它必须指定为...在 MySQL中全文索引的索引类型为 FULLTEXT,全文索引可以在 ARCHAR或者TEXT类型的列上创建 单列索引与多列索引 索引可以是单列上创建的索引,也可以是在多列上创建的索引...表的主键、外键必须有索引 数据量超过300行的表应该有索引 经常与其他表进行连接的表,在连接字段上应该建立索引 唯一性太差的字段不适合建立索引 更新太频繁地字段不适合创建索引 经常出现在 Where子句中的字段...主表中的外键是另一张表的主键。 候选键:除了主键以外的都是候选键。 要想能快速查找某一条你想要的数据,必须要要创建主键(一般在开始创建表的时候就会设置)。 ? 七、如何创建索引?...全文索引就是为这种场景设计的。 你可能会说,用 like + % 就可以实现模糊匹配了,为什么还要全文索引?like + % 在文本比较少时是合适的,但是对于大量的文本数据检索,是不可想象的。
avg() //返回一列的平均值 sum() //返回一列的总和 Mysql索引底层数据结构 【1】索引的本质:索引是帮助MySQL高效获取数据的排好序的数据结构。...1)说明 1.叶节点具有相同的深度,叶节点的指针为空 2.所有索引元素不重复 3.节点中的数据索引从左到右递增排列 2)图示 3)理由 【1】层级依旧会出现很大的情况,如果数据量是1k...默认的事务隔离级别是可重复读【因为MVCC多版本并发控制机制】,用Spring开发程序时,如果不设置隔离级别默认用Mysql设置的隔离级别,如果Spring设置了就用已经设置的隔离级别。...Innodb引擎SQL执行的BufferPool缓存机制 【1】图示 【2】说明(为什么Mysql不能直接更新磁盘上的数据而设置这么一套复杂的机制来执行SQL?) ...4)正是通过这套机制,才能让我们的MySQL数据库在较高配置的机器上每秒可以抗下几干甚至上万的读写请求。
列设置了 not null;而 other 列默认允许为空。...002就可以设置 zerofill 3.5 主键(primary key) primary key:用于标识表中的唯一记录,不允许重复 或 为空。...唯一键:更多地用于业务逻辑上的唯一性约束,允许字段为空,并且多个空值不会影响唯一性比 示例场景:在员工管理系统中,身份证号码可以作为主键,确保员工的唯一标识;员工工号可以设置为唯一键,确保工号在公司业务上不会重复...外键 用于定义 主表 和 从表 之间的关系: 外键约束主要定义在从表上 主表则必须是有主键约束或 unique 约束 当定义外键后,要求外键列数据必须在主表的主键列存在或为 NULL 在从表中,设置外键约束...外键 用于定义 主表 和 从表 之间的关系: 外键约束主要定义在从表上 主表则必须是有主键约束或 unique 约束 当定义外键后,要求外键列数据必须在主表的主键列存在或为 NULL 在从表中,设置外键约束
安装环境: 操作系统版本:RHEL 6.5 版本:MYSQL 5.5 约束条件的作用: 限制如何给字段赋值,创建表的时候如果没有设置的话,就是mysql建表的默认设置包括表结构的后四列。...1、NULL 是否允许空值 在不设置的时候,默认允许字段值为空 mysql> desc yueshu; +-------+--------------------+------+-----+----...------------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) 查询字段值是否为空 mysql> select *...,缺省为NULL.向表中插入新的记录时,若不给字段赋值,就使用默认值给字段赋值。...建表时,没有设置字段的默认值,mysql吧字段的默认值设置为空 例子: mysql> create table yueshu( -> name varchar(20) not null,
空属性 两个值:null(默认的)和not null(不为空) 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。...其中class_name和class_room具有非空约束,not null 意味着这一列的值不允许为空,必须提供值,在添加数据的时候必须插入数据,但是other不需要....如果没有明确指定一列需要插入,就用default;如果建表中,对应列默认没有设置default,无法直接插入。...char(1) 表示这是一个固定长度为1的字符类型。not null 指定这一列的值不允许为空。default '男' 指定了默认值为 ‘男’,即性别默认为男性。...主键 主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空,一张表中最多只能有一个主键;主键所在的列通常是整数类型。不意味着一个表中的主键只能添加给一列,于是有了复合主键。
字段名); #在已经创建好的数据库表中增加主键 格式3: alter table 数据库表名 drop primary key; #在已经创建好的数据库表中删除主键 注意: 非空 not null 唯一...,所有不存在重复的问题 五、非空约束 非空约束就是:数据库表中的字段的值,不能为null 5.1、非空约束格式 字段名 字段类型 not null #在create table 语句中设置字段值不能为...自增长只能用在主键上 非空与唯一约束可以设置在N个字段上 六、默认值 默认值就是:当我们在增加记录的时候如果不去设置值,那么自动的会用默认值补齐,字段默认的默认值是null 6.1、默认值格式 字段名...字段类型 default 默认值 #在create table 语句中设置字段的默认值,不设置默认值为null 6.2、默认值应用 案例: 创建一个新的表t3,表里包含字段名(id,name) create...7.3、为什么要使用外键约束 新的问题? 假如我们在员工表中增加一条记录 员工表中的记录dep_id中的3,在部门表中并没有这个id的记录。我们也将这条记录加入了进去。
领取专属 10元无门槛券
手把手带您无忧上云