SQL 怎么添加非空约束?

用的是mysql比如我想在student这个表的code列中增加notnull的约束还有就是....可不可以用ADDCONSTRAINT增加约束?ginger_zy的方法... 用的是mysql

比如我想在student这个表的code列中增加not null的约束

还有就是....可不可以用ADD CONSTRAINT增加约束?
ginger_zy的方法mysql里显示qurey OK
但describe student看实际属性并没有修改...咋整?
展开
 我来答
璇璇璇璇旋璇
高粉答主

2020-12-19 · 每个回答都超有意思的
知道答主
回答量:615
采纳率:0%
帮助的人:10.2万
展开全部

1、首先需要连接sql server,如下图所示。

2、接下来需要右键单击表,如下图所示。

3、接下来需要选择设计,如下图所示。

4、接下来需要点击字段,如下图模亩搏所示。

5、接下来需要选耐薯择非空约束,如下图所示。

6、接下来需要点击添加按钮,如下图所示。

7、最后编写表达式即可,如旦祥下图所示。

爱可生云数据库
2020-10-12 · MySQL开源数据库领先者
爱可生云数据库
爱可生,金融级开源数据库和数据云服务整体解决方案提供商;优秀的开源数据库技术,企业级数据处理技术整体解决方案提供商;私有云数据库云服务市场整体解决方案提供商。
向TA提问
展开全部
NULL 对外部程序来说,具体为不知道、不确切的、无法表述的值。所以在很多家公司的源派开发规范里都明确规灶裂培定了,必须为 NOT NULL。
其实用到 NULL 的场景都可以转换为有意义的字符或者数值,一是有利用数据的易读性以及后期的易维护性;二是降低 SQL 语句的编写难度。
关于 NULL 的特性如下:
1. 参与 NULL 字段拼接的结果都为 NULL,预期的可能会有差异
预想把字段 r1 做个拼接,再插入到新的表 t3 里,结果 t3 表的记录全为 NULL,跟预期不符。
mysql> show create table t1\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`r1` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> show create table t2\G
*************************** 1. row ***************************
Table: t2
Create Table: CREATE TABLE `t2` (
`r1` varchar(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> create table t3 like t1
Query OK, 0 rows affected (0.04 sec)
mysql> insert into t3 select concat(r1,'database') from t1 limit 2;
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t3;
+------+
| r1 |
+------+
| NULL |
| NULL |
+------+
2 rows in set (0.00 sec)
那正确的方法如下,对 NULL 用函数 IFNULL 特殊处理。
mysql> insert into t3 select concat(ifnull(r1,''),'database') from t1 limit 2;
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t3;
+----------+
| r1 |
+----------+
| database |
| database |
+----------+
2 rows in set (0.00 sec)
2. 对于包含 NULL 列的求 COUNT 值也不准确
t1 和 t2 的记录数是一样的,但是字段 r1 包含了 NULL,这导致结果忽略了这些值。
mysql> select count(r1) as rc from t1;
+-------+
| rc |
+-------+
| 16384 |
+-------+
1 row in set (0.01 sec)
mysql> select count(r1) as rc from t2;
+-------+
| rc |
+-------+
| 32768 |
+-------+
1 row in set (0.03 sec)
这时候我们可能想到了,正确的方法是用 NULL 相关隐唯函数处理,
mysql> select count(ifnull(r1,'')) as rc from t1;
+-------+
| rc |
+-------+
| 32768 |
+-------+
1 row in set (0.03 sec)
或者是直接用 COUNT(*) 包含了所有可能的值
mysql> select count(*) as rc from t1;
+-------+
| rc |
+-------+
| 32768 |
+-------+
1 row in set (0.02 sec)
当然了不仅仅是 COUNT,除了 NULL 相关的函数,大部分对 NULL 处理都不友好。
所以其实从上面两点来看,NULL 的处理都得特殊处理,额外增加了编写 SQL 的难度。
3. 包含 NULL 的索引列
对包含 NULL 列建立索引,比不包含的 NULL 的字段,要多占用一个 BIT 位来存储。
示例
key_len 分别为 43 和 42,t1 比 t2 多了一个字节,那这里可能有人要问了,不是说占了一个 BIT 位吗?那为什么多了一个字节?可以关注我上一篇文章(第02期:MySQL 数据类型的艺术 - 大对象字段)关于 BIT 的详细描述。
mysql> pager grep -i 'key_len'
PAGER set to 'grep -i 'key_len''
mysql> explain select * from t1 where r1 = ''\G

key_len: 43
1 row in set, 1 warning (0.00 sec)
mysql> explain select * from t2 where r1 = ''\G

key_len: 42
1 row in set, 1 warning (0.00 sec)
4. 各存储引擎相关的对 NULL 的处理
在 MySQL 8.0 发布后,仅有 InnoDB、MyISAM 和 Memory 支持对包含 NULL 列的索引,其他引擎不支持。比如 NDB。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
凌天菱sQ
2019-08-04 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:32%
帮助的人:1179万
展开全部
楼主可以这样悔物试耐册试,我用过很昌前宏多次的绝对可以
首先update
dbo.t_user
set
user_password=''
where
user_password
is
null
然后在设置非空
alter
table
dbo.t_user
alter
column
user_password
varchar(20)
not
null
这样就可以让字段
user_password
不允许null
这样就可以把user_password
字段改成
varchar(20)
not
null

如果楼主想要不能空的约束,那个就要做触发器了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Drank倾城99
2019-07-30
知道答主
回答量:8
采纳率:0%
帮助的人:5673
展开全部
alter table 表名 modify 要修改的字段名 类型 not null;
例如:
alter table t1 modify age int not null;
这个不仅可以修改约束,还可以修改类宴灶型等。碰祥巧笑键
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
任好慕jx
推荐于2017-11-23 · TA获得超过1516个赞
知道小有建树答主
回答量:1027
采纳率:66%
帮助的人:470万
展开全部
alter table student
add constraint codenn check(code is not null);;

或者是把这一没卖列设置裤链为唯一索引。枯纯逗或是主键。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式