mysql设置约束设置范围_MySql 约束条件

约束

sql约束:约束用于限制加入表的数据的类型。是一种限制,它通过对表的行或列的数据做出限制,来确保表数据的完整性、唯一性可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。

数据类型的属性

MySQL关键字

含义

NULL

数据列可包含NULL值

NOT NULL

数据列不允许包含NULL值

DEFAULT

默认值

PRIMARY KEY

主键

AUTO_INCREMENT

自动递增,适用于整数类型

UNSIGNED

无符号

CHARACTER SET name

指定一个字符集

1、not null 约束:强制列不接受 NULL 值,强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

例:create table table_name(id int not null,name varchar(255) not null); # 强制id和name不能为空

2、unique 约束:唯一标识数据库表中的每条记录,确保表中的一列数据没有相同的值

UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

PRIMARY KEY 拥有自动定义的 UNIQUE 约束。

每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束

例:create table时在id列创建unique约束

create table table_name(id int not null,name varchar(255) not null, unique (id));

例2:为多个列定义unique

create table table_name(id int not null,name varchar(255) not null, constraint uc_personID unique (id,name))

例3:表已创建情况下,创建unique约束

alter table table_name add unique(id);

多个:alter table table_name add constraint uc_personid unique(id,name);

例4:撤销unique

alter table table_name drop index uc_personid;

3、PRIMARY KEY 约束:PRIMARY KEY 约束唯一标识数据库表中的每条记录。

主键必须包含唯一的值。

主键列不能包含 NULL 值。

每个表都应该有一个主键,并且每个表只能有一个主键。 primary key = unique + not null

例:create table时在id列创建PRIMARY KEY约束

create table table_name(id int not null,name varchar(255) not null, PRIMARY KEY(id));

例2:为多个列定义PRIMARY KEY

create table table_name(id int not null,name varchar(255) not null, constraint pk_personID PRIMARY KEY (id,name))

例3:表已创建情况下,创建PRIMARY KEY约束

alter table table_name add PRIMARY KEY(id);

多个:alter table table_name add constraint pk_personid PRIMARY KEY(id,name);

例4:撤销PRIMARY KEY

alter table table_name drop index uc_personid;

4、FOREIGN KEY 约束:一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY

外键

外键用来在两个表数据之间建立链接,它可以是一列或多列。一个表可以有一个或多个外键

外键对应得是参照完整性,一个表得外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键得某个值。

FOREIGN KEY 约束用于预防破坏表之间连接的动作。

FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

例:create table时在id列创建 FOREIGN KEY 约束

create table table_name1(id int not null,name varchar(255) not null,Id_P int, PRIMARY KEY(id),FOREIGN KEY (Id_P) REFERENCES table_name2(Id_P));

例2:为多个列定义 FOREIGN KEY

create table table_name1(id int not null,name varchar(255) not null,Id_P int, PRIMARY KEY(id) constraint fk_pertb2 FOREIGN KEY (Id_P)

REFERENCES table_name2(Id_P) )

例3:表已创建情况下,创建 FOREIGN KEY 约束

alter table table_name add ADD FOREIGN KEY (Id_P) REFERENCES table_name1(Id_P);

多个:alter table table_name add constraint pk_personid PRIMARY KEY(id,name);

例4:撤销 FOREIGN KEY

alter table table_name drop FOREIGN KEY fk_pertb2;

外键约束

mysql> create table bookcategory(

-> category_id int primary key,

-> category varchar(20),

-> parent_id int);

mysql> create table bookinfo(

-> book_id int primary key,

-> book_category_id int,

-> constraint fk_cid foreign key(book_category_id) references bookcategory(category_id));

5、CHECK 约束:用于限制列中的值的范围

如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

例:create table时在id列创建 CHECK 约束

create table table_name(id int not null,name varchar(255) not null,CHECK(id>0));

例2:为多个列定义 CHECK 约束

create table table_name(id int not null,name varchar(255) not null, constraint chk_tbname CHECK(id>0 and name='xxx'));

例3:表已创建情况下,创建 CHECK 约束

alter table table_name ADD constraint chk_tbname CHECK (Id_P>0 AND name='xxx');

例4:撤销 CHECK

alter table table_name drop constraint chk_tbname;

6、DEFAULT 约束:用于向列中插入默认值

如果没有规定其他的值,那么会将默认值添加到所有的新记录。

例:create table时在id列创建 DEFAULT 约束,类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值

create table table_name(id int not null,name varchar(255) not null DEFAULT 'lxq',timedate date DEFAULT GETDATE());

例2:表已创建情况下,创建 DEFAULT 约束

alter table table_name alter name set DEFAULT 'lxq2';

例3:撤销 DEFAULT

alter table table_name ALTER name DROP DEFAULT;

约束条件的简单运用

"""

primary key:主键,唯一标识,表都会拥有,不设置为默认找第一个 不空,唯一 字段,未标识则创建隐藏字段

foreign key:外键

unique:唯一性数据, 该条字段的值需要保证唯一,不能重复

auto_increment:自增,只能加给key的int类型字段辅助修饰

not null:不为空 - 针对一些字段,如注册时的用户名,出生人的性别等,这些需求下的字段,只不能设置为Null,必须要对其赋值

null 可为空

default:默认值 - 对有默认值意外的字段进行赋值时,有默认值的字段会被赋默认值

unsigned:无符号 - 存储的数字从0开始

zerofill:0填充 - 存整数时数据长度小于取值范围长度,会在数字左方用0填充

"""

mysql>: create table td1 (x int, y int default 0, z int default 100);

#清空表,并清空主键自增记录

truncate table 数据库.表名;

注:

1.键是用来讲的io提供存取效率

2.联合唯一

create table web (

ip char(16),

port int,

unique(ip,port)

);

3.联合主键

create table web (

ip char(16),

port int,

primary key(ip,port)

);

# eg:1

# 单列唯一

create table t20 (

id int unique

);

# 联合唯一

create table web (

ip char(16),

port int,

unique(ip,port)

);

# 如果联合两个字段,两个字段全相同才相同,否则为不同

insert into web values ('10.10.10.10', 3306), ('10.10.10.10', 3306);

# 注:

# 1.表默认都有主键, 且只能拥有一个主键字段(单列主键 | 联合主键)

# 2.没有设置主键的表, 数据库系统会自上而下将第一个规定为unique not null字段自动提升为primary key主键

# 3.如果整个表都没有unique not null字段且没有primary key字段, 系统会默认创建一个隐藏字段作为主键

# 4.通常必须手动指定表的主键, 一般用id字段, 且id字段一般类型为int, 因为int类型可以auto_increment

# eg:2

create table t21(id int auto_increment); # 自增约束必须添加给key的字段

# eg:3

create table t21(id int primary key auto_increment); # 自增要结合key,不赋值插入,数据会自动自增, 且自增的结果一直被记录保留

# eg:4

# 联合主键

create table t22(

ip char(16),

port int,

primary key(ip,port)

);

# 如果联合两个字段,两个字段全相同才相同,否则为不同

insert into web values ('10.10.10.10', 3306), ('10.10.10.10', 3306);

### 回答1: MySQL可以通过设置约束条件来限制数据的输入范围,其中0-100可以通过以下两种方式设置: 1. CHECK约束:可以通过在表的列定义中使用CHECK约束来限制输入范围。例如,可以使用以下语句来创建一个名为score的表,并在score列上设置CHECK约束,限制输入范围为0-100: CREATE TABLE score ( id INT PRIMARY KEY, name VARCHAR(50), score INT CHECK (score >= 0 AND score <= 100) ); 2. 触发器:可以通过在表上创建触发器来限制输入范围。例如,可以使用以下语句来创建一个名为score的表,并在score列上创建一个触发器,限制输入范围为0-100: CREATE TABLE score ( id INT PRIMARY KEY, name VARCHAR(50), score INT ); CREATE TRIGGER score_range BEFORE INSERT ON score FOR EACH ROW BEGIN IF NEW.score < 0 OR NEW.score > 100 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Score must be between 0 and 100'; END IF; END; ### 回答2: MySQL是一个关系型数据库管理系统,它支持各种约束条件,包括主键、唯一约束、外键等。设置约束条件的目的是为了确保数据的完整性和一致性,防止出现数据重复或破坏数据关系的情况。 对于设置约束条件0-100的情况,我们可以使用MySQL的唯一约束来实现。唯一约束保证某列的值在表中是唯一的。在设置唯一约束时,我们可以使用检查约束或使用UNIQUE关键字来实现。 使用检查约束可以在表格创建后通过ALTER TABLE语句添加约束。例如,假设我们有一个学生成绩表,其中可能存在0-100以外的成绩,我们可以使用以下SQL语句来添加检查约束: ALTER TABLE `score` ADD CONSTRAINT `score_check` CHECK (score >= 0 AND score <= 100); 这个约束条件可以确保score列的值在0-100范围内。 除此之外,我们还可以使用UNIQUE关键字来设置唯一约束。例如,我们可以创建一个学生表,其中学号必须唯一: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `student_id` varchar(10) NOT NULL UNIQUE, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 这个表将会设置一个唯一的student_id,即学生学号。这意味着无论如何添加或更新数据,student_id这一列的值都不能重复。如果添加了相同的值,MySQL将会报错。 总之,MySQL提供了丰富的约束条件,可以通过这些条件实现对数据库中数据一致性和完整性的检查和限制。为了避免出现数据破坏或重复,我们应该谨慎使用这些约束条件,特别是在关键数据的表格中。 ### 回答3: 在mysql中,我们可以通过设置约束条件(constraints)来限制表中某个字段的取值范围,如限制一个分数字段的取值只能在0-100之间。下面是如何使用mysql设置约束条件0-100的步骤: 1. 创建表时定义分数字段,并设置类型为int或float,此处假设分数字段名为score。 2. 设置score字段的约束条件为check(score>=0 and score<=100),这样就可以限制score字段的取值范围在0-100之间。设置约束条件的命令如下: ALTER TABLE 表名 ADD CONSTRAINT 约束名称 CHECK (字段名称>=0 AND 字段名称<=100); 3. 如果在已经创建的表中需要添加约束条件,同样可以使用ALTER TABLE命令,添加约束条件的命令如下: ALTER TABLE 表名 ADD CONSTRAINT 约束名称 CHECK (字段名称>=0 AND 字段名称<=100); 4. 如果需要删除约束条件,可以使用ALTER TABLE命令,删除约束条件的命令如下: ALTER TABLE 表名 DROP CONSTRAINT 约束名称; 总的来说,设置约束条件mysql中保证数据完整性和一致性的重要手段之一,这也是数据库设计和管理中必须掌握的技能。对于限制字段取值的约束条件,我们需要灵活运用,根据实际需求进行调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值