约束关键字、自增长

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.自增长可以指定特定值,但会之后会从特定值继续,但不会这样用。



这篇关于约束关键字、自增长的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程