MySQL8的很好的教程,能够完成教材SQL的作业。参考链接:http://c.biancheng.net/view/2625.html
创建数据库关系图和一般的表相同,就是当数据都输入后,在foreign部分添加关联即可。
例如关联SNO和CNO
分别关联相应值然后apply即可。
最难的问题:SQL中check约束!
例如,grade字段需要限制0~100,CONSTRAINT testtable_chk_1
CHECK ((GRADE
< 101))。
具体语法使用可看下文:
1.只有从MySQL 8.0.16引入了CHECK约束,参考资料:https://my.oschina.net/u/4591256/blog/4529476
2.CHECK 约束:用于限制列中的值的范围
在一些情况下,我们需要字段在指定范围的输入,例如:性别只能输入 ‘男’或者’女’,余额只能大于0等条件……
除了在程序上控制以外,我们还能使用 CHECK 约束来规范数据。
然而:mysql所有的存储引擎均不支持check约束,MySQL会对check子句进行分析,但是在插入数据时会忽略,
因此check并不起作用,实现对数据约束有两种方法:
》1.在mysql种约束,如使用enum类型或者触发器等。
》2.在应用程序里面对数据进行检查再插入。
上文来自:MySql – check 约束
3.MySQL 8.0.16 于 2019 年 4 月 25 日发布,终于带来了我们期待已久的 CHECK 约束功能,而且对于所有的存储引擎都有效。CREATE TABLE 语句允许以下形式的 CHECK 约束语法,可以指定列级约束和表级约束:
[CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]
其中,可选的 symbol 参数用于给约束指定一个名称。如果省略该选项,MySQL 将会产生一个以表名开头、加上 chk 以及一个数字编号(1、2、3 …)组成的名字(table_name_chk_n)。约束名称最大长度为 64 个字符,而且区分大小写。
expr 是一个布尔表达式,用于指定约束的条件;表中的每行数据都必须满足 expr 的结果为 TRUE 或者 UNKNOWN(NULL)。如果表达式的结果为 FALSE,将会违反约束。
可选的 ENFORCED 子句用于指定是否强制该约束:
如果忽略或者指定了 ENFORCED,创建并强制该约束;
如果指定了 NOT ENFORCED,创建但是不强制该约束。这也意味着约束不会生效。
CHECK 约束可以在列级指定,也可以在表级指定。
上文来自:MySQL 8.0 新特性之检查约束(CHECK)