首页 > 其他分享 >字段约束条件

字段约束条件

时间:2022-11-24 20:14:49浏览次数:48  
标签:约束条件 insert varchar name int key id

字段约束条件

无符号、零填充

unsigned  # 无符号
    id int unsigned
zerofill  # 零填充
    id int(3) zerofill  # 存入数字不足三位时以0填充至三位

非空


create table t1(id int,name varchar(16));
insert into t1(id) values(1);  # 只存入某一个字段的数据可以直接指定
insert into t1(name) values('jason');
insert into t1(name id) values('kevin',2);  # 存入表内数据顺序可以自己指定
结果:
    +------+-------+
    | id   | name  |
    +------+-------+
    |    1 | NULL  |
    | NULL | jason |
    |    2 | kevin |
    +------+-------+

添加约束条件非空
create table t2(id int,name varchar(16) not null);
insert into t2(id) values(1);  # 报错 ERROR 1364 (HY000): Field 'name' doesn't have a default value
insert into t2(name) values('jason');
insert into t2 values(2,''); # 
insert into t2 values(3,null);  # ERROR 1048 (23000): Column 'name' cannot be null
结果:
    +------+-------+
    | id   | name  |
    +------+-------+
    | NULL | jason |
    |    2 |       |
    +------+-------+
# 所有字段类型在不加约束条件的情况下默认都可以为空,即null
# 非空约束条件下不输值和输null都是一样报错,如果输的值为空格或者说只要输入的值不是null就可以

默认值 default

create table t3(id int default 888,
               name varchar(16) default '匿名');
insert into t3 values();
insert into t3 values(2,'jason');
结果:
    +------+--------+
    | id   | name   |
    +------+--------+
    |  888 | 匿名   |
    |    2 | jason  |
    +------+--------+
# 在不输入信息的情况下,执行了insert语句,以默认值替代

唯一值 unique

单列唯一:表示在某个字段下数据值不重复、
create table t4(id int unique,name varchar(16) unique);
insert into t4 values(1,'jason'),(2,'jason');  
# ERROR 1062 (23000): Duplicate entry 'jason' for key 'name'

联合唯一:某个字段可能有重复,但是多个字段组合起来的结果不重复
create table t5(id int,ip varchar(32),
               port int,unique(ip,port));
insert into t5 values(1,'127.0.0.1',8080),(2,'127.0.0.1',8081),
					(3,'192.268.110.110',8080);
insert into t5 values(4,'127.0.0.1',8080);
# ERROR 1062 (23000): Duplicate entry '127.0.0.1-8080' for key 'ip'
+------+-----------------+------+
| id   | ip              | port |
+------+-----------------+------+
|    1 | 127.0.0.1       | 8080 |
|    2 | 127.0.0.1       | 8081 |
|    3 | 192.268.110.110 | 8080 |
+------+-----------------+------+

主键 primary key

1.但从约束层面上看主键相当于not null + unique 非空且唯一
create table t6(id int primary key,name varchar(16));
insert into t6(name) values('jason');  # ERROR 1364 (HY000): Field 'id' doesn't have a default value
insert into t6 values(1,'jason');
insert into t6 values(2,'kevin');
表结构:
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | NO   | PRI | NULL    |       |
| name  | varchar(16) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
在这个表结构中我们可以看到id已经被设为主键了

2.InnoDB存储引擎规定了所有的表都必须有且只有一个主键(主键是组织数据的重要条件并且主键可以加快数据的查询速度)
	1.当表中没有主键也没有其他非空切唯一的字段的情况下
    	InnoDB会采用一个隐藏的字段作为表的主键 隐藏意味着无法使用 基于该表的数据查询只能一行行查找 速度很慢
	2.当表中没有主键但是有其他非空且唯一的字段 那么会从上往下将第一个该字段自动升级为主键
    create table t7(id int not null unique,name varchar(16) not null unique);
    +-------+-------------+------+-----+---------+-------+
    | Field | Type        | Null | Key | Default | Extra |
    +-------+-------------+------+-----+---------+-------+
    | id    | int(11)     | NO   | PRI | NULL    |       |
    | name  | varchar(16) | NO   | UNI | NULL    |       |
    +-------+-------------+------+-----+---------+-------+
    我们可以看到id被设置为主键

自增

create table t8(id int primary key auto_increment,name varchar(16));
insert into t8(name) values('jason'),('kevin'),('oscar'),('jerry');
+----+-------+
| id | name  |
+----+-------+
|  1 | jason |
|  2 | kevin |
|  3 | oscar |
|  4 | jerry |
+----+-------+
该约束条件不能单独出现 并且一张表中只能出现一次 主要就是配合主键一起使用
'''
自增特性
	自增不会因为数据的删除而回退 永远往下自增
	如果中间自己设置了一个更大的数,那么后续基于这个数字继续往下自增
	
	如果想重置某张表的主键值 可以使用
		truncate t9;  清空表数据并重置主键
'''

外键

外键的作用

用于标识数据与数据之间的关系(主要用于不同表之间数据的关联)
为什么需要外键(以员工信息表为例)
    员工信息表内可能有 id name age male e_maile phone address department 等字段
    如果我们将所有的数据全放在一张表中,首先会造成存取数据的冗余,其次会导致数据的扩展性极差
    如果我们将拆分成不同的表格归类整理,会解决上述问题,但是会造成不同的表之间数据没了关系
什么是外键
    外键即外键字段
    为了将不同的表数据连接起来,我们使用外键字段,就是在某张表中再加一个字段用于标识另一张表中的数据

表关系的判断

表关系一共可以分为四种 一对一 一对多 多对多 没有关系
1.一对一
    一张表中的一条数据只能对应另一张表中的一条数据,另一张表中的数据也只能对应这张表中的一条数据,就像商品表与商品库存表,一个商品只能有一个库存,一个商品库存也只能有一个商品

2.一对多
    这里我们以商品表和供货商表举例
    一个商品只能有一个供货商,一个供货商可以提供多个商品
    这种一方只能对应一个,另一方能对应多个的关系就是一对多的关系

3.多对多
    以书籍和作者为例
    一本书可以署名多个作者,一名作者也可以写多本书
    这种双方都是多对多的关系就称之为多对多

外键字段的建立

1.一对一
    外键字段建立在任何一方都可以,但是建议建立在使用频率较高的一方
    create table goods(id int primary key auto_increment,name varchar(32),
                      detail_id int unique,
                       # 级联更新级联删除,另一张表修改以后主键所在的表自动跟着修改
                      foreign key(detail_id) references repertory(id)  
                      on update cascade
                      on delete cascade);
    create table repertory(id int primary key auto_increment,name varchar(32),num int);
2.一对多
    create table commodity(id int primary key auto_increment,
                          name varchar(32),
                           dep_id int,
                          foreign key(dep_id) references supplier(id)
                          on update cascade
                          on delete cascade);
    create table supplier(id int primary key auto_increment,
                         sup_name varchar(32));
3.多对多
    多对多比较特殊,它不能直接在表中创建外键字段,需要有第三张表,用这张表来存储那两张表之间的关系
    create table book(id int primary key auto_increment,
                     title varchar(32),price float(5,2));
    create table author(id int primary key auto_increment,
                       name varchar(32));
    # 创建第三张表用来存储两张表之间数据的关系
    create table book_author(id int primary key auto_increment,
                            author_id int,
                            foreign key(author_id) references author(id)
                            on update cascade
                            on delete cascade,
                            book_id int,
                            foreign key(book_id) references book(id)
                            on update cascade
                            on delete cascade);

标签:约束条件,insert,varchar,name,int,key,id
From: https://www.cnblogs.com/zyg111/p/16923053.html

相关文章

  • Mysql:字段约束条件:无符号、零填充、非空、默认值、唯一值、主键、自增、外键前戏、
    目录无符号、零填充非空默认值唯一值主键自增外键前戏关系的判断一对多关系外键字段的建立多对多关系一对一关系无符号、零填充'''关键字unsigned无需正负号'''crea......
  • MySQL之字段约束条件
    无符号、零填充非空默认值唯一值主键自增外键今日内容详细无符号、零填充unsigned idintunsignedzerofill idint(5)zerofill非空(notnull)createta......
  • 字段约束条件
    目录字段约束条件1.无符号、零填充2.非空3.默认值4.唯一值5.主键6.自增7.外键1).外键前戏2).外键字段的创建表关系之一对多表关系之多对多表关系之一对一字段约束条件1.......
  • MySQL数据库——字符编码、配置文件、存储引擎、数据类型、约束条件
    MySQL数据库——字符编码、配置文件、存储引擎、数据类型、约束条件一、字符编码与配置文件1、查看MySQL相关信息\s查看相关信息 当前用户、版本、编码、端口号 MySQ......
  • MySQL字段约束条件
    今日内容概要主题:字段约束条件无符号、零填充非空默认值唯一值主键自增外键今日内容详细无符号、零填充unsigned#取消正负号 idintunsignedzerof......
  • MySQL 3 字段约束条件
    今日内容详细字段约束条件无符号、零填充unsigned idintunsignedzerofill idint(5)zerofill非空createtablet1( idint, namevarchar(16));insertint......
  • MySQL数据库——字段约束条件
    MySQL数据库——字段约束条件一、无符号、零填充1、unsigned(无符号) idintunsigned2、zerofill idint(5)zerofill二、非空'''设置非空notnull所有字段类......
  • python之路35 MySQL 3 字段的约束条件
    字段约束条件无符号、零填充unsignedidintunsignedzerofillidint(5)zerofill非空createtablet1(idint,namevarchar(16));insert......
  • 字段约束条件之非空、默认值、唯一值、主键、自增、外键
    目录字段约束条件无符号、零填充非空默认值唯一值主键自增外键前戏关系的判断一对多关系外键字段的建立多对多关系一对一关系字段约束条件无符号、零填充unsigned idi......
  • MYSQL 字段约束条件
    字段的约束条件创建表:createtablet19(idint,namevarchar(32));往表中添加数据:insertintot19(name,id)values('tom',1);#可以自定义字段顺序......