doctorName VARCHAR(50) CHECK(LEN(doctorName ) > 0)
我应该在前面的声明中指定NOT NULL吗? 不允许使用NULL值,因为它不会通过CHECK约束...那么在这种情况下指定NOT NULL的目的是什么?
答案 0 :(得分:4)
您必须指定def winners():
f2 = open("world_cup_champions.txt","r+")
total_wins = {}
years = {}
lines = []
country_list = []
for line in f2:
lines.append(line.strip())
# Skip the first line with [1:]
for line in lines[1:]:
values = line.split(',')
country = values[1]
year = values[0]
if country not in total_wins:
total_wins[country] = 1
years[country] = [year]
country_list.append(country)
else:
total_wins[country] += 1
years[country].append(year)
for country in country_list:
wins = total_wins[country]
year_list = years[country]
print(" " + country.ljust(14)),
print(" " + str(wins)),
print(year_list)
def main():
print("FIFA World Cup Winners")
print()
print(" Country".ljust(14) + " Wins".center(9) + "Years".rjust(14))
print("{:15} {:5}".format("="*8, "="*5))
winners()
if __name__ == "__main__":
main()
:
NOT NULL
或检查约束:
doctorName VARCHAR(50) NOT NULL CHECK(LEN(doctorName ))
第一个比较可取,因为doctorName VARCHAR(50) CHECK(LEN(doctorName ) > 0 AND doctorName IS NOT NULL)
是内置在SQL中的,因此优化程序可以利用它。
为什么这是必需的?如果名称为NOT NULL
,则比较返回NULL
。 NULL
约束的工作方式不同于CHECK
子句和WHERE
表达式。仅当表达式的计算结果为FALSE时,CASE
约束才会失败。因此,TRUE和CHECK
都满足约束条件。另一方面,NULL
子句和WHERE
表达式将CASE
视为FALSE,而不是TRUE。
Here是一个db <>小提琴示例,显示NULL
约束未捕获NULL
值。