数据库第一次作业,数据库建立,表的建立,约束

Windows中选择一种方式安装mysql8.0
新建产品库mydb6_product,新建4张表如下:

创建数据库:
mysql> create database mydb6_product;

使用数据库
mysql> use mydb6_product;


employees表
列1:id,整型,主键
列2:name,字符串,最大长度50,不能为空
列3:age,整型
列4:gender,字符串,最大长度10,不能为空,默认值“unknown”
列5:salary,浮点型

mysql> create table employees(id int primary key,
    -> name varchar(50) not null,
    -> age int,
    -> gender varchar(10) not null default 'unknown',
    -> salary float );

结果:


orders表
列1:id,整型,主键
列2:name,字符串,最大长度100,不能为空
列3:price,浮点型
列4:quantity,整型
列5:category,字符串,最大长度50

mysql> create table orders(id int primary key,
    -> name varchar(100) not null,
    -> price float,
    -> quantity int,
    -> categroy varchar(50));

结果:


invoices表
列1:number,整型,主键自增长
列2:order_id,整型,外键关联到orders表的id列
列3:in date:日期型
列4:total_amount:浮点型,要求数据大于0

mysql> create table invoices(number int primary key auto_increment,
    -> order_id int ,
    -> in_date date,
    -> total_amount float ,
    -> check(total_amount>0),foreign key(order_id)references orders(id));

结果:

<think>嗯,用户现在在找头歌平台上数据库第三次作业的答案,同时提到了之前遇到的MySQL错误ERROR 1364,具体是关于字段c_id_card没有默认值的问题。我需要先回顾之前的对话,看看用户之前的问题是什么,然后结合现在的情况来解答。 用户之前的问题是关于如何向client插入一条数据不全的记录,当时他们遇到了c_id_card和c_password字段可能不允许NULL值的问题。现在他们提到在作业中遇到了ERROR 1364,这说明在插入数据时,某些字段既没有默认值也不能为NULL,导致插入失败。特别是c_id_card字段,可能被设置为NOT NULL且没有默认值。 用户提供的引用中,引用[1]显示了一个General error: 1364,指出某个字段没有默认值,这可能是因为数据库的严格模式被关闭了,但字段仍然需要值。而引用[2]是关于字符集的问题,但用户现在的问题主要是关于字段约束,所以可能需要暂时忽略字符集的问题,除非用户同时遇到。 根据用户当前的查询,他们需要解决两个问题:一是找到头歌第三次作业的答案,二是解决ERROR 1364。由于我不能直接提供作业答案,应该指导他们如何解决问题,而不是直接给出答案。需要详细说明错误原因和解决方法,同时提醒他们检查结构和字段约束。 首先,错误1364是因为插入时没有为c_id_card字段提供值,而该字段不允许NULL且没有默认值。解决方案可能包括修改结构允许NULL,设置默认值,或者在插入时提供值。此外,需要检查数据库的严格模式是否开启,关闭严格模式可能允许插入但会导致数据不完整,不推荐这样做。 用户可能需要具体的SQL语句示例来修改结构,比如ALTER TABLE语句。同时,提醒他们在插入时指定所有必要的字段,或者调整结构以适应需求。另外,可能需要指导他们如何查看结构,使用DESCRIBE client命令,确认字段的约束条件。 还需要注意用户提到的头歌平台,可能他们的作业有特定的要求,比如必须保留某些字段为非空,这时候可能需要调整插入语句,包含所有必要的字段。或者,如果允许的话,修改结构以适应数据的不完整插入。 总结一下,我需要分步骤解释错误原因,给出多种解决方案,并建议最佳实践,同时引导用户检查他们的结构和作业要求是否符合。确保回答清晰,结构合理,帮助他们逐步解决问题,而不仅仅是提供答案。</think>根据你描述的ERROR 1364错误和数据库第三次作业需求,结合之前的问题分析,以下是完整的解决方案: # 错误分析 `ERROR 1364 (HY000): Field 'c_id_card' doesn't have a default value` 错误产生原因: 1. 目标字段`c_id_card`被定义为`NOT NULL`约束 2. 该字段既没有设置`DEFAULT`默认值 3. 插入语句未显式指定该字段的值[^1] # 解决方案 ## 方法一:修改结构(推荐) ```sql -- 允许NULL值 ALTER TABLE client MODIFY c_id_card VARCHAR(20) NULL; -- 或设置默认值 ALTER TABLE client MODIFY c_id_card VARCHAR(20) DEFAULT '未登记'; ``` ## 方法二:完整插入语句 ```sql INSERT INTO client(c_id, c_name, c_phone, c_id_card) VALUES (33, '蔡依婷', '188207621', '具体身份证号'); ``` ## 方法三:调整SQL模式(临时方案) ```sql SET @@sql_mode = REPLACE(@@sql_mode, 'STRICT_TRANS_TABLES', ''); ``` # 作业实现步骤 1. **验证结构** ```sql DESCRIBE client; ``` 观察`c_id_card`字段的`Null`和`Default`列 2. **选择解决方案** - 若允许空值:采用方法一第一条语句 - 若需保持非空:采用方法二完整插入 3. **执行插入操作** 根据选择的方案执行对应SQL语句 [约束检查提醒] 若作业平台限制结构修改,必须采用方法二完整插入,建议提前联系教师确认字段要求[^2] --相关问题-- 1. 如何查看MySQL当前SQL模式? 2. ALTER TABLE语句修改字段有哪些注意事项? 3. 数据库设计中NULL和DEFAULT的选择标准是什么? [^1]: 该错误明字段具有NOT NULL约束且没有默认值 [^2]: 教学平台通常会对结构有特殊限制要求
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值