Rumah > pangkalan data > tutorial mysql > MySQL怎么使用check约束

MySQL怎么使用check约束

(*-*)浩
Lepaskan: 2020-09-15 17:05:19
asal
20873 orang telah melayarinya

MySQL使用check约束的方法:1、如果要设置CHECK约束的字段范围小,并且比较容易列举全部的值,可以将该字段的类型设置为enum类型或set类型。2、如果需要设置CHECK约束的字段范围大,且列举全部值比较困难,使用触发器来代替约束实现数据的有效性了。

MySQL怎么使用check约束

在一些情况下,我们需要字段在指定范围的输入,

例如:性别只能输入 '男'或者'女',余额只能大于0等条件,

例如:可以要求 authors 表的 postcode 列只允许输入六位数字的邮政编码。

我们除了在程序上控制以外,我们还能使用 CHECK 约束 来规范数据。

然而:
mysql所有的存储引擎均不支持check约束,MySQL会对check子句进行分析,但是在插入数据时会忽略,因此check并不起作用。

解决这个问题的两种方式:

1、如果要设置CHECK约束的字段范围小,并且比较容易列举全部的值,就可以考虑将该字段的类型设置为枚举类型 enum()或集合类型set()。

比如性别字段可以这样设置,插入枚举值以外值的操作将不被允许。

CREATE TABLE `Student` (
  `Sno` char(8) NOT NULL,
  `Sname` varchar(10) NOT NULL,
  `Sex` enum('男','女') NOT NULL DEFAULT '男',
  `Age` tinyint(4) NOT NULL DEFAULT '20',
  `Phonenumber` char(12) DEFAULT NULL,
  `Sdept` varchar(20) NOT NULL,
  PRIMARY KEY (`Sno`),
  UNIQUE KEY `Phonenumber` (`Phonenumber`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Salin selepas log masuk

2、如果需要设置CHECK约束的字段范围大,且列举全部值比较困难,比如整数或者某一区间,那就只能使用触发器来代替约束实现数据的有效性了。

DELIMITER $
create trigger studentcheck before insert on Student for each row
begin
if new.Age<15 or new.Age>30 then set new.Age=20;end if;
end $
DELIMITER ;
Salin selepas log masuk

测试:

mysql> insert into Student(Sno,Sname,Sex,Age,Phonenumber,Sdept) values(&#39;5&#39;,&#39;Joe&#39;,&#39;m&#39;,0,&#39;12345243912&#39;,&#39;CS&#39;);
ERROR 1265 (01000): Data truncated for column &#39;Sex&#39; at row 1
mysql> insert into Student(Sno,Sname,Sex,Age,Phonenumber,Sdept) values(&#39;5&#39;,&#39;Joe&#39;,&#39;男&#39;,0,&#39;12345243912&#39;,&#39;CS&#39;);
Query OK, 1 row affected (0.00 sec)

mysql> select * from Student;
+-----+-------+-----+-----+-------------+-------+
| Sno | Sname | Sex | Age | Phonenumber | Sdept |
+-----+-------+-----+-----+-------------+-------+
| 4   | nancy | m   |   0 | 12345243965 | CS    |
| 5   | Joe   | 男  |  20 | 12345243912 | CS    |
+-----+-------+-----+-----+-------------+-------+
2 rows in set (0.00 sec)
Salin selepas log masuk

可以看出,现在Sex必须在“男”和“女”中选择,否则插入失败;当年龄不合规范时,由于触发器的存在,会将其自动设置为默认的20。

由此可以解决check约束无效的问题。

Atas ialah kandungan terperinci MySQL怎么使用check约束. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan