mysql中sql语句id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,是什么意思

嘿,你提到的字段id是SMALLINT UNISIGNED类型,听起来很有趣。

我们必须关注这一点。
如果使用UNISIGNED,值范围就变成0到6 5 5 3 5 ,对吧?所有负数都消失了。
为什么要使用优信杰?我觉得你这里存储的ID都是非负的,比如订单号、产品号等,使用unsigned可以让表示空间增加一半。
理论上性能会稍微好一些?虽然实际影响可能并没有那么大。

然后是AUTO_INCRMENT,这个用的比较频繁。
每输入一个新行,就会自动加1 ,确实省事了。
第一次输入数据时,默认从 1 开始,此后自动递增。
这个东西特别适合用在主开关上,简单明了。

但是如果使用SMALLINT,我们就得仔细权衡了。
SMALLINT 范围是 -3 2 7 6 8 到 3 2 7 6 7 (有符号)。
如果在它前面加上UNISIGNED,就会发生冲突。
您确定您的数据库支持这种组合吗?我认为某些数据库可能不支持 SAMLINT UNISIGNED,或者可能出现意外行为。
您想使用 MEDIUMINT UNISIGNED 还是直接使用 INT PUNISIGNED? INT的范围是从0到4 2 9 4 9 6 7 2 9 5 ,这个范围相当大。

还有NOT NULL,这个要加,主键不能为空,没有什么问题。

简而言之,您的设计中的 UNSIGNED SMALLINT 部分可能存在一些问题。
建议改成INT UNISIGNED或者MEDIUMINT PUNISIGNED,可能会更安全。
如果你特别确定你拥有的数据量不是很大,你也可以使用SMALLINT UNISIGNED,但是最好检查一下你所使用的数据库系统对于这种类型混合的指导方针。

无论如何,这取决于你。

在oracle数据库中插入数据时,怎样允许插入空值!我要sql语句。 不为空的字段是不是不允许为空

哎,你说的太混乱了……看着一堆SQL命令,看得我头疼。
让我们换一种说法。

上周一位客户问我如何在Oracle中使用NOTNULL,我给了他一个例子。
假设你创建表的时候定义了这样一个表:
sql 创建表用户( 标识符主键号, 用户名 VARCHAR2 (5 0) NOT NULL, 电子邮件 VARCHAR2 (1 00) NULL );
这里看到用户名后面加了NOT NULL,那么插入数据时这个字段必须有值,不能留空。
如果你尝试这个:
sql INSERT INTO users (id, username) VALUES (1 , NULL);
Oracle会直接给你报错,说用户名不能为空。
很清楚,对吧?
但是如果email后面不写NOT NULL,则默认允许NULL,插入NULL也没有问题:
sql INSERT INTO 用户(id、用户名、电子邮件)VALUES (1 , 'zhangsan', NULL);
如果您已经创建了一个表,但突然发现某个字段不能为空,则需要将其更改为允许空字段。
例如,用户名最初不能为空,但现在我想将其设为空。
该怎么办?使用 ALTER TABLE:
sql 用户 ALTER TABLE MODIFY 用户名 VARCHAR2 (5 0) NULL;
这次用户名字段可能为空。
现在你可以像这样插入:
sql INSERT INTO users (id, username) VALUES (2 , NULL);
这里有一个小细节:如果想在 INSERT 语句中指定某个字段为 null,直接写 NULL 即可。
例如:
sql -
假设电子邮件地址仍然可以为空。
INSERT INTO 用户(id、用户名、电子邮件)VALUES (3 , 'lisi', NULL);
你见过这个吗?如果一个字段可以为空,如果你不写任何东西或者NULL,那么默认情况下它会是空的。
如果某个字段最初设置为非空,则在 INSERT 期间必须为其分配实际值,否则会报告错误。

那么,让我们总结一下:
1 如果建表时希望某个字段为空,可以在类型后添加NULL(例如VARCHAR2 (5 0) NULL)。
2 .该字段最初不能为空。
如果想将其清空,请使用 ALTER TABLE...MODIFY...NULL。
3 、插入数据时如果希望某个字段为空,直接在VALUES中写NULL即可,如VALUES(1 , NULL)
是不是觉得这样清晰多了?如果您还有不明白的地方,请不要犹豫,直接问我。
这里我可以再举一个例子。

如何给Oracle已有数据的表增加字段

上周,有同事问我,如何向Oracle数据库中的现有表添加新字段?我告诉他这个问题可以用ALTERTABLE命令解决。
正如你所说,这个命令可以直接向现有表添加新字段,而无需重新创建表,非常方便。

他们问我具体语法,我说,比如你有WAVE_INFO表,你想添加两个新字段,一个叫NAME,另一个叫PATH,你可以这样写:
sql 添加变量 WAVE_INFO(名称 NVARCHAR2 (5 0) 非空,路径 NVARCHAR2 (2 00) 非空);
这里NAME和PATH都是NVARCHAR2 类型,长度分别为5 0和2 00个字符,并且不允许为空,这样保证了数据的完整性和一致性。

他还问,添加字段的时候要注意什么?我想说,首先,你必须确保数据库中有足够的空间。
如果表中的数据量很大,还可能需要考虑数据库锁定和性能问题。
有时,您可能需要在操作之前和之后备份表。

然后,他就很担心了。
添加字段后,此操作是永久性的且无法撤消。
我说是的,一旦执行ALTERTABLE语句,新字段就会永久添加到表中,所以操作前一定要考虑清楚。

最后问如何验证字段是否添加成功。
我只是想说,你可以使用DESCRIBE WAVE_INFO之类的语句来查看表结构,或者在表中您可以使用 SELECT COLUMN_NAME FROM USER_TAB_COLUMNS WHERE TABLE_NAME='WAVE_INFO' 查询字段列表。
这样您就可以确认新字段是否已添加到 WAVE_INFO 表中。

无论如何,决定权在你手中。
在操作之前多做一些检查总是好的。