MySQL建表的约束条件,浅谈notnull和default的关系

在MySQL中,创建表时必须定义字段名称、字段类型和约束。
约束包括主键、唯一、非空、默认等。
约束的作用是保证数据的完整性、准确性、唯一性。
主要有三个约束:主键、唯一性、非空值、默认值。
在创建表语句中,我们看到以下示例:createtableemployees(employeenumbervarchar(4)primarykey,namevarchar(10)notnull,ageintdefalut18);这里使用工号作为主键,姓名字段不为空,默认年龄为18岁。
插入数据时,例如:Insertintoemployeesvalue("0001","张三",30);即可成功完成数据插入。
接下来我们将详细讨论notnull和default这两个约束。
notnull约束意味着该字段不能接受NULL值。
例如,如果我们尝试插入:Insertintoemployeesvalue("0002",null,22);由于名称字段的notnull限制,这将失败。
虽然空字符串“”在某些上下文中可以被忽略,但它并不等同于MySQL中的null。
所以如果你想插入一个空值,你应该使用空值而不是空字符串。
默认约束用于设置默认值。
如果未指定字段值,数据库将使用此默认值。
在创建表的时候,我们可以指定年龄字段的默认值为18。
如果尝试插入一个值:Insertintoemployees(员工编号,姓名)(“0004”,“王五”),年龄字段值为如果不指定,数据库会自动填充默认值18。
值得注意的是,虽然notnull和default约束可以在同一字段上同时使用,但它们不能交互使用。
如果插入数据时指定了字段值,则notnull约束将不起作用。
如果未指定字段值,则应用默认约束。
例如:createtableemployees2(员工编号varchar(4)primarykey,namevarchar(10)notnulldefault"unknown",ageint);如果指定了名称值,则尝试插入数据时,如果指定了名称值,则不会生成错误;已指出但未指定。
如果您提供年龄值,则会报告错误(输入空值),因为只有在未指定字段值时才会使用默认值。
如果未指定名称字段值,则自动填写默认值“未知”。
因此,notnull和default约束是独立的,可以同时在字段上使用,但它们不能交互使用。
它们对数据的插入和修改设置了重要的限制,确保了数据的有效性和准确性。

怎么在mysql的字段中设置默认值

--SQL:CREATETABLEtest(i_aintNOTNULLDEFAULT1,ts_btimestampNOTNULLDEFAULTNOW(),c_cchar(2)NOTNULLDEFAULT'1');--以下SQL无效--time_dtimeNOT使用NULLDEFAULTCURTIME()、--date_edateNOTNULLDEFAULTCURDATE()、--datetime_fdatetimeNOTNULLDEFAULTNOW()汇总int类型。
默认值也必须是整数,并且默认值后面没有()括号。
Char类型:默认值使用单引号。
DATETIME类型:NOW()函数以“YYYY-MM-DDHH:MM:SS”形式返回当前日期和时间。
这可以直接存储在DATETIME字段中。
不支持使用系统默认值。
DATE类型:CURDATE()以“YYYY-MM-DD”格式返回今天的日期。
这可以直接存储在DATE字段中。
不支持使用系统默认值。
TIME类型:CURTIME()以“HH:MM:SS”格式返回当前时间。
这可以直接存储在TIME字段中。
不支持使用系统默认值。
参考资料mysql表字段的默认值使用SQL语句创建表时,如果为表字段提供默认值,将会出现错误。
示例:mssql中的CREATETABLEdnt_forums(aaintNOTNULLDEFAULT(''),bbdateNOTNULLDEFAULT(getdate()),ccchar(50)NOTNULLDEFAULT(null)}如何修改上述SQL语句以在mysql中使用?必须是整数类型并且默认后面没有括号(),日期类型不支持使用系统默认值,因为系统时间可以通过()来获取。
CREATETABLEdnt_forums(aaintNOTNULLDEFAULT2,bbtimestampNOTNULLDEFAULTnow(),ccchar(50)NOTNULLDEFAULT'');