sql - “CREATE TABLE”中的正则表达式
问题描述
我有以下问题:我想用他的 id 和 name 创建一个表 Client。我还想检查名称字段是否仅包含字母。这是我的查询:
CREATE TABLE CLIENT(
ID NUMBER PRIMARY KEY,
FIRST_NAME CHAR(10) CONSTRAINT NAME_CHECK CHECK(REGEXP_LIKE(FIRST_NAME, '^[A-Za-z]*$'))
);
该脚本工作正常,正在创建表。但是下面的 INSERT 语句
INSERT INTO CLIENT
VALUES(1, 'BOB');
不起作用。这是错误文本:
INSERT INTO CLIENT
VALUES(1, 'BOB')
Error report -
ORA-02290: check constraint (TASK8.NAME_CHECK) violated
我确信这个错误的原因很明显,但我就是不明白。我以前从未遇到过正则表达式的问题。
提前致谢
解决方案
我的猜测是问题是空格。 CHAR()
数据类型会自动用空格填充到长度。
出于这个原因,可变长度字符串比固定长度字符串更常用。在 Oracle 中,这将是一种VARCHAR2()
类型:
CREATE TABLE CLIENT (
ID NUMBER PRIMARY KEY,
FIRST_NAME VARCHAR2(10) CONSTRAINT NAME_CHECK CHECK (REGEXP_LIKE(FIRST_NAME, '^[A-Za-z]*$'))
);
我可以添加更多注释:
- 在这种情况下,我是主键的忠实粉丝
clientId
,client_id
而不是通用的id
. 这允许大多数外键引用使用完全相同的名称。 - 10 个字符对于名字来说太短了。
推荐阅读
- python - 比较具有不同键的嵌套字典
- php - Laravel 从 2 个表中选择
- asp.net - 将文件从 Angular 5/6 上传到 WebApi c#
- android - 机器学习套件 - Android - 文本识别 - 文本方向
- php - Is it possible to replace a word before a phrase using regular expression in php?
- javascript - Javascript includes() is not a function
- json - Flutter 构建多张卡片
- java - 我在下面收到空指针异常
- php - php从数组中一一获取值
- python - 如果它们没有一个接一个地去,则更改重复的列表项