MySql—-bookstore8

要创建一个名为bookstore的数据库

create database bookstore;

切换到名为 bookstore 的数据库。

use bookstore;

用于创建一个名为book的表

create table book(
图书编号 char(20) not null,
类别 varchar(20) not null default '计算机',
书名 varchar(40) not null,
作者 varchar(10) not null,
出版社 varchar(20) not null,
出版时间 date not null,
单价 float(5,2) null,
数量 int(0) null,
折扣 float(3,2) not null,
封面图片 varchar(40) null,
primary key(图书编号));

解析每行

CREATE TABLE book (  
    -- 图书编号设置为CHAR(20)可能过长,通常ISBN为10位或13位,但考虑到其他可能的编号系统,这里保留为20位  
    图书编号 CHAR(20) NOT NULL,  
      
    -- 类别使用了VARCHAR(20),并设置了默认值'计算机'。如果类别固定且不多,也可以考虑使用ENUM类型  
    类别 VARCHAR(20) NOT NULL DEFAULT '计算机',  
      
    -- 书名设置了VARCHAR(40),这通常足够长以容纳大多数书名  
    书名 VARCHAR(40) NOT NULL,  
      
    -- 作者设置为VARCHAR(10)可能太短,因为有些作者的名字可能超过10个字符,建议增加长度  
    作者 VARCHAR(50) NOT NULL,  
      
    -- 出版社使用VARCHAR(20)应该足够了  
    出版社 VARCHAR(20) NOT NULL,  
      
    -- 出版时间使用了DATE类型,这是正确的  
    出版时间 DATE NOT NULL,  
      
    -- 单价使用了FLOAT(5,2),这意味着总共有5位数字,其中2位是小数。如果单价可能超过999.99,则需要增加总位数  
    单价 FLOAT(5,2) NULL,  
      
    -- 数量使用了INT(0),但INT类型中的数字(0)是无意义的,因为INT始终存储4字节的整数。只需使用INT即可  
    数量 INT NULL,  
      
    -- 折扣使用了FLOAT(3,2),这意味着折扣是一个百分比值,总共3位数字,其中2位是小数(即0.00到0.99)。如果需要更高的精度或范围,请调整  
    折扣 FLOAT(3,2) NOT NULL,  
      
    -- 封面图片使用了VARCHAR(40),这可能足够存储图片的文件名或URL,但如果需要存储完整的图片数据(不推荐),则需要使用BLOB类型  
    封面图片 VARCHAR(40) NULL,  
      
    -- 设置了主键为图书编号,这是正确的  
    PRIMARY KEY(图书编号)  
);

命令用于查看表的结构,包括列名、数据类型、是否允许为空、默认值、主键等信息。但是,DESC book; 这个命令并不是所有数据库系统都支持的标准SQL语法。

desc book;

查看一个表的结构时,通常使用DESCRIBE(或者简写为DESC)命令。

CREATE TABLE members (  
  用户号 char(18) NOT NULL,  
  姓名 char(10) NOT NULL,  
  性别 char(2) NOT NULL,  
  密码 char(6) NOT NULL,  
  联系电话 varchar(20) NOT NULL,  
  注册时间 DATETIME NULL DEFAULT NULL,  
  PRIMARY KEY (用户号)  
);

然后,你可以使用DESCRIBEDESC命令来查看members表的结构:

DESCRIBE members;  
-- 或者简写为  
DESC members;
desc book;
create table sell(
 订单号 int(0) not null primary key,
用户号 char(18) not null,
图书编号 char(20) not null,
订购册数 int(5) not null,
订购时间 datetime not null,
订购单价 float(5,2) not null,
是否发货 char(6)  null,
是否收货 char(6) null,
是否结清 char(6) null);
desc sell;

添加两个外键约束。这些外键分别引用了members表的用户号字段和book表的图书编号字段。同时,您还指定了当相关联的父表记录被删除或更新时,子表(sell表)应如何响应。

下面是您提供的SQL语句的解释:

  1. 第一个ALTER TABLE语句添加了一个外键约束,将sell表的用户号字段与members表的用户号字段关联起来。如果尝试删除members表中与sell表中某个用户号相关联的记录,数据库将阻止这一操作(ON DELETE RESTRICT)。同样,如果尝试更新members表中的用户号(虽然这通常不是一个好主意,因为用户号应该是唯一的并且不应该被更改),数据库也将阻止这一操作(ON UPDATE RESTRICT)。
  2. 第二个ALTER TABLE语句添加了一个外键约束,将sell表的图书编号字段与book表的图书编号字段关联起来。如果尝试删除book表中与sell表中某个图书编号相关联的记录,数据库将自动删除sell表中所有具有相同图书编号的记录(ON DELETE CASCADE)。同样,如果book表中的图书编号被更新,sell表中所有相关的图书编号也将被自动更新为新的值(ON UPDATE CASCADE)。

这里是一个重要的注意事项:在使用CASCADE选项时要特别小心,因为它可能导致级联删除或更新大量的数据。确保您了解这些操作可能带来的后果,并在生产环境中谨慎使用它们。

另外,请确保在添加外键约束之前,sell表中的用户号图书编号字段已经存在,并且它们的数据类型和父表中的相应字段的数据类型完全匹配。如果不匹配,您将无法成功添加外键约束。

这表示您想要对名为 sell


alter table sell
add foreign key(用户号)
references members(用户号)
on delete restrict
on update restrict;
alter table sell
add foreign key(图书编号)
references book(图书编号)
on delete cascade
on update cascade;

alter table 语句示例

添加列:

ALTER TABLE sell ADD COLUMN 列名 数据类型;

如果您想添加一个名为 sale_date 的日期列:

ALTER TABLE sell ADD COLUMN sale_date DATE;

修改列:修改列的数据类型:

ALTER TABLE sell MODIFY COLUMN 列名 新数据类型;

修改列的名称(在某些数据库系统中可能需要两步操作,首先重命名旧列,然后添加新列):

-- 假设您使用的是MySQL,并且想要将列名从old_name更改为new_name  
ALTER TABLE sell CHANGE old_name new_name 数据类型;

删除列:

ALTER TABLE sell DROP COLUMN 列名;

添加主键(如果表中还没有主键):

ALTER TABLE sell ADD PRIMARY KEY (列名);

但请注意,如果您之前已经为 sell 表设置了外键约束,并且该外键引用了要设置为主键的列,那么您可能需要先删除这些外键约束,然后再添加主键。

添加外键(您之前已经给出了一个示例,但这里再重复一次):

ALTER TABLE sell ADD FOREIGN KEY (用户号) REFERENCES members(用户号) ON DELETE RESTRICT ON UPDATE RESTRICT;  
ALTER TABLE sell ADD FOREIGN KEY (图书编号) REFERENCES book(图书编号) ON DELETE CASCADE ON UPDATE CASCADE;

删除外键(假设您知道外键约束的名称,这在某些数据库中是必需的):

ALTER TABLE sell DROP FOREIGN KEY 外键约束名称;

修改表名(这实际上是重命名表):

RENAME TABLE sell TO new_sell_name;

Views: 5

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇