然后既然parent_id是外键字段,就不要设置default null
因为你的 log_level 表的 level_lv 不是主键。 也没有 唯一约束。
所以不能创建外键。
解决办法:
给 level_lv 加一个 唯一约束。
下面是一个例子:
-- 创建测试主表. 无主键.CREATE TABLE test_main2 (
id INT NOT NULL,
value VARCHAR(10)
)
-- 创建测试子表.
CREATE TABLE test_sub2 (
id INT NOT NULL,
main_id INT,
value VARCHAR(10),
PRIMARY KEY(id)
)
-- 插入测试主表数据.
INSERT INTO test_main2(id, value) VALUES (1, 'ONE')
INSERT INTO test_main2(id, value) VALUES (2, 'TWO')
-- 插入测试子表数据.
INSERT INTO test_sub2(id, main_id, value) VALUES (1, 1, 'ONEONE')
INSERT INTO test_sub2(id, main_id, value) VALUES (2, 2, 'TWOTWO')
mysql> ALTER TABLE test_sub2
-> ADD CONSTRAINT main_id_cons2
-> FOREIGN KEY (main_id)
-> REFERENCES test_main2(id)
ERROR 1005 (HY000): Can't create table 'test.#sql-608_1' (errno: 150)
默认情况下,无法创建外键
需要创建 unique 约束
mysql> ALTER TABLE test_main2
-> CHANGE COLUMN id id INT UNIQUE
Query OK, 2 rows affected (0.17 sec)
Records: 2 Duplicates: 0 Warnings: 0
unique 约束创建完毕后,外键创建成功。
mysql> ALTER TABLE test_sub2
-> ADD CONSTRAINT main_id_cons2
-> FOREIGN KEY (main_id)
-> REFERENCES test_main2(id)
Query OK, 2 rows affected (0.14 sec)
Records: 2 Duplicates: 0 Warnings: 0
navicat和MySQL是一个管理和被管理的关系。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。
Navicat是一套快速、可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。它的设计符合数据库管理员、开发人员及中小企业的需要。
MySQL应用环境
对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。
Linux作为 *** 作系统,Apache 或Nginx作为 Web 服务器,MySQL作为数据库,PHP/Perl/Python作为服务器端脚本解释器。
由于这四个软件都是免费或开放源码软件(FLOSS),因此使用这种方式不用花一分钱(除开人工成本)就可以建立起一个稳定、免费的网站系统,被业界称为“LAMP“或“LNMP”组合。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)