约束关键字、自增长
2021/6/29 23:20:48
本文主要是介绍约束关键字、自增长,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
约束
约束用于确保数据库的数据满足特定的商业规则
在mysql中,约束包括:not null、unique、primary key、foreign、check
primary key
一张表最多只能有一个主键,但可以有复合主键
复合主键的插入要完全一样才会报错
CREATE TABLE t1 (id INT PRIMARY KEY, `name` VARCHAR(32), email VARCHAR(32));
not null
unique
如果没有指定not null,则 unique 字段可以有多个null
表可以有多个unique
CREATE TABLE t1 (id INT PRIMARY KEY UNIQUE NOT NULL, `name` VARCHAR(32) UNIQUE, email VARCHAR(32) NOT NULL );
foreign key
外键定义主表和从表之间的关系:外键约束在从表上,主表必须要有主键约束或unique约束,
当定义外键后,外键列数据必须在主表的主键列存在或是null
例子:班级表,学生表
先建主表,再建从表 CREATE TABLE my_class ( id INT PRIMARY KEY, `name` VARCHAR(32) NOT NULL DEFAULT ''); 外键约束在从表上,主表必须要有主键约束或unique约束 CREATE TABLE my_stu ( id INT PRIMARY KEY, `name` VARCHAR(32) NOT NULL DEFAULT '', class_id INT, FOREIGN KEY (class_id) REFERENCES my_class(id)); 插入的外键再主表里面必须存在 INSERT INTO my_class VALUES (1,'qqq'), (2,'www'), (3,'eee'); INSERT INTO my_stu VALUES (11,'ldt',1), (12,'lds',1), (21,'lda',2), (22,'ldd',2), (31,'ldf',3), (32,'ldg',3);
1.外键指向的表的字段,要求是 primary key 或者是 unique
2.表的类型是 innodb ,这样的表才支持外键
3.外键字段的类型要和主键字段的类型一致
4.外键字段的值,必须在主键字段中出现过,或者外键是null(前提是外键字段允许会 null)
5.一但建立主外键关系,数据就不能随意删除
check
用于强制数据必须满足某些条件(数值在1000-2000内),oracle和sql server 都支持check,但mysql5.7不支持check,只做语法校验,但不会生效。
mysql8生效
CREATE TABLE my_check( id INT PRIMARY KEY, `name` VARCHAR(32), sex VARCHAR(6) CHECK (sex IN('man','woman')), sal DOUBLE CHECK (sal>1000 AND sal<2000)); INSERT INTO my_check VALUES(1,'lds','asd',1);
总案例:
商店的数据库shop_db,记录客户机购物情况,三个表组成
商品goods
(商品号,商品名,单价,商品类别,供应商)
客户customer
(客户号,姓名,住址,电邮,性别,身份证)
购买purchase
(订单号,客户号,商品号,购买数)
建表要求:
1.每个表的主外键
2.客户的姓名不能为 null
3.电邮不能能重复
4.性别男女
5.单价在1-9999之间
CREATE TABLE goods( goods_id INT PRIMARY KEY, goods_name VARCHAR(64) NOT NULL DEFAULT '', unitprice DECIMAL(10,2) NOT NULL DEFAULT 0 CHECK (unitprice >= 1.0 AND unitprice <= 9999.99), category INT NOT NULL DEFAULT 0, provider VARCHAR(64) NOT NULL DEFAULT ''); CREATE TABLE customer( customer_id CHAR(8) PRIMARY KEY, `name` VARCHAR(64) NOT NULL DEFAULT '', address VARCHAR(64) NOT NULL DEFAULT '', email VARCHAR(64) UNIQUE NOT NULL, sec ENUM('m','w') NOT NULL, -- 枚举类型 card_id CHAR(18)); CREATE TABLE purchase( order_id INT UNSIGNED PRIMARY KEY, customer_id CHAR(8) NOT NULL DEFAULT '', -- 外键 goods_id INT NOT NULL DEFAULT 0, -- 外键 nums INT NOT NULL DEFAULT 0, FOREIGN KEY (customer_id) REFERENCES customer(customer_id), FOREIGN KEY (goods_id) REFERENCES goods(goods_id)); DESC goods; DESC customer; DESC purchase;
自增长
在某张表中,存在一个id列(整数),该列从1开始,自动增加
CREATE TABLE my_temp (id INT PRIMARY KEY AUTO_INCREMENT, email VARCHAR(32) NOT NULL DEFAULT ''); INSERT INTO my_temp VALUES (NULL,'123'), (NULL,'234') SELECT * FROM my_temp
细节:
1.一般自增长配和primary key使用
2.自增长也可以单独使用(不用主键,但要配合一个unique)
3.自增长修饰整数,小数也行但不会用
4.自增长默认从1开始,但可以修改开始值
5.自增长可以指定特定值,但会之后会从特定值继续,但不会这样用。
这篇关于约束关键字、自增长的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)