您的位置:首页 > 教育 > 培训 > seo网站推广电话_安能物流网站_无限制搜索引擎排名_福清seo

seo网站推广电话_安能物流网站_无限制搜索引擎排名_福清seo

2025/11/14 17:15:12 来源:https://blog.csdn.net/m0_75186846/article/details/142886321  浏览:    关键词:seo网站推广电话_安能物流网站_无限制搜索引擎排名_福清seo
seo网站推广电话_安能物流网站_无限制搜索引擎排名_福清seo

目录

一、空属性约束 null

二、默认值 default

2.1 基本语法

2.2 not null 与 default

三、列描述 comment

四、零填充 zerofill

五、主键 primary key

六、自增值 auto_increment

七、唯一键 unique key

八、外键 foreign key

8.1 基本语法

8.2 外键例子

8.2.1 创建 customs 表 

8.2.2 创建 orders 表

外键约束的说明:

示例数据插入

总结


通过约束,让未来插入数据库表中的数据是符合预期的,保证数据的完整性与可预期性。

一、空属性约束 null

可以为某一列选择必填(not null)与非必填(null)

create table 表名 (列名 列属性 [null || not null]);

mysql> create table test1( -> col1 int null, -> col2 int not null);
Query OK, 0 rows affected (0.24 sec)

在插入时,

二、默认值 default

2.1 基本语法

如果插入数据时未插入该列,mysql会自动填充建表时设置的默认值(default)

create table 表名 (列名 列属性 [default(N)]);

mysql> create table test2( 
-> col1 int default(100), 
-> col2 int default(50), 
-> col3 int); 
Query OK, 0 rows affected (0.19 sec)

在插入时, 有默认值未被插入的列被初始化为默认值 有默认值且被插入的列可以正常赋值 无默认值且未被插入的列被初始化为NULL,见下图

只对col3进行插入,可以看到col1与col2被赋初始值:

对有默认值的列进行赋值可以覆盖默认值:

2.2 not null 与 default

若设为not null列但是同时有default时,不进行插入数据是否会报错?

不能插入非法信息但可以不进行插入,not null列会使用default填充

default与not null互相补充:前者用户省略该列时,若设置默认值则使用默认值,否则直接报错;后者当用户需要插入时不允许用户插入NULL。

三、列描述 comment

简单来说,列描述是给另一个开发者阅读的,以让其理解该列设置的意义

语法:comment'列描述内容 '

四、零填充 zerofill

当不满足规定长度时,会用零填充高位并自动将该列设置为unsigned

语法:int(N)

当将列num1修改为int(10)后,表中的数据不满10位的高位用0填充:

查看表中数据时是等宽列:

五、主键 primary key

标识表中列的唯一性,如生活中的身份证号、学号,如果设置主键则自动添加not null约束

语法: create table 表名( 列名 数据类型 primary key);

去除主键:alter table 表名 drop primary key;

新加主键:alter table 表名 add primary key (列名);

不允许向主键列添加重复值:

如果向原来没有主键的表新加主键,则需要先删除重复值:

主键可以指定多列属性,只有当多列与历史数据都相同是才会ERROR:

语法:primary key(col1, col2)

六、自增值 auto_increment

自增长的值,默认从1开始,自增列必须是主键列!

建表语句auto_increment = xx; (从xx开始自增)

七、唯一键 unique key

主键:主键的主要目的是唯一标识表中的每一行,通常作为表之间进行外键关联时的基础。
唯一键:唯一键的主要目的是保证表中的某些列的数据唯一性,不一定用作行标识。


在上面的例子中,id 是主键,保证每个用户有唯一的标识。而 username 是唯一键,保证用户名不能重复。

八、外键 foreign key

8.1 基本语法

外键用于定义主表和从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null。

语法:foreign key (字段名) references 主表(列)

8.2 外键例子

假设有两个表:orders(订单表)和 customers(顾客表)。每个订单都属于一个顾客,因此可以在 orders 表中创建一个外键,指向 customers 表的主键 customer_id

8.2.1 创建 customs 表 

首先创建一个 customers 表,包含顾客的唯一标识 customer_id 和顾客的名称: 

mysql> CREATE TABLE customers (->     customer_id INT PRIMARY KEY,      -- 主键->     customer_name VARCHAR(100) NOT NULL-> );
Query OK, 0 rows affected (0.12 sec)

8.2.2 创建 orders 表

接下来创建一个 orders 表,其中 order_id 是订单的唯一标识,而 customer_id 则通过外键约束与 customers 表中的 customer_id 相关联:

mysql> CREATE TABLE orders (->     order_id INT PRIMARY KEY,         -- 主键->     order_date DATE NOT NULL,->     customer_id INT,                  -- 外键字段,指向 customers 表的主键
FERENCES customers (customer_id) ON DELETE CASCADE             -- 级联删除,如果顾客被删除,相关订单也会被删除ON UPDATE CASCADE             -- 级联更新,如果顾客 ID 更新,订单表的关联也会更新
);->     FOREIGN KEY (customer_id)         -- 定义外键约束->         REFERENCES customers (customer_id) ->         ON DELETE CASCADE             -- 级联删除,如果顾客被删除,相关订单也会被删除->         ON UPDATE CASCADE             -- 级联更新,如果顾客 ID 更新,订单表的关联也会更新-> );
Query OK, 0 rows affected (0.37 sec)

外键约束的说明:

  • customer_id 是外键:它引用了 customers 表的 customer_id
  • ON DELETE CASCADE:如果在 customers 表中删除某个顾客,其对应的所有订单也会被删除
  • ON UPDATE CASCADE:如果 customers 表中的某个顾客 ID 被更新,对应的 orders 表中的 customer_id 也会同步更新

示例数据插入

1. 向 customers 表插入顾客数据:

mysql> INSERT INTO customers (customer_id, customer_name)-> VALUES (1, 'Alice'), (2, 'Bob');
Query OK, 2 rows affected (0.07 sec)
Records: 2  Duplicates: 0  Warnings: 0

2. 向 orders 表插入订单数据:

mysql> INSERT INTO orders (order_id, order_date, customer_id)-> VALUES (101, '2024-10-12', 1), ->        (102, '2024-10-13', 2);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0

在这里,order_id 101 属于 customer_id 1 的顾客(Alice),order_id 102 属于 customer_id 2 的顾客(Bob)。

总结

通过外键约束,orders 表中的 customer_idcustomers 表中的 customer_id 建立了关联。如果你删除某个顾客,相关的订单也会被删除;如果更新顾客的 ID,订单中的 customer_id 也会相应更新。这就是外键约束的强大之处,能够确保数据的完整性和一致性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com