先选择数据库,在上机1的基础上完成
因为换机房了,所以上午创建的数据库bookstore没有了。那咋办?重新建呗!
一句话就够啦!(这时候就不用考虑字符集的问题啦,直接采用默认的就行!)
当然先看看数据库有哪些?别建冲突了!
show databases;
若没有bookstore数据库,那就创建吧!
create database bookstore;
use bookstore;
然后,开始创建表啦!
CREATE TABLE book
(
图书编号 char(10) NOT NULL,
类别 varchar(8) NOT NULL DEFAULT '计算机',
书名 varchar(40) NOT NULL ,
出版时间 date NOT NULL ,
单价 float(5,2) NULL ,
数量 int
);
然后查看表
show tables;
看一下表的描述
desc book;
也可以这样用:
desc bookstore.book;
上面已经创建了book表,相比于教材中的book表的字段也多,类型呢,有的还不一样,咋办呢?
用alter table来修改呀!
ALTER TABLE book
CHANGE COLUMN 类别 图书类别 varchar(20) NOT NULL DEFAULT '计算机',
ADD COLUMN 作者 char(10) NOT NULL ,
ADD COLUMN 出版社 varchar(20) NOT NULL ,
MODIFY COLUMN 数量 int(5),
ADD COLUMN 折扣 float(3,2) ,
ADD COLUMN 封面图片 blob;
观察上述两个图片,一样吗?一样,但是呢?发现有的字段顺序不一样,那咋办呢?
即将“作者”和”出版社”放到“书名”列的后面;
使用了以下代码,测试一下吧
ALTER TABLE book
MODIFY 作者 char(10) NOT NULL
AFTER 书名;
实际上,大家发现,想通过命令调整表结构,确实相当麻烦,有没有更好的方法呢?
其实有呀,啥?思考一下!
对,删除原有的表,重新创建,当然这样的前提是表中没有数据的前提下,若有数据,就十分麻烦啦!
use bookstore;
show tables;
drop table book;
show tables;
再执行一遍重新创建表的sql
USE Bookstore;
CREATE TABLE book (
图书编号 char(10) NOT NULL PRIMARY KEY,
图书类别 varchar(20) NOT NULL DEFAULT '计算机',
书名 varchar(40) NOT NULL ,
作者 char(10) NOT NULL ,
出版社 varchar(20) NOT NULL ,
出版时间 date NOT NULL ,
单价 float(5,2) NOT NULL ,
数量 int(5),
折扣 float(3,2) ,
封面图片 blob
) ENGINE=InnoDB;
然后,再观察即可
use bookstore;
show tables;
desc books;
使用LIKE关键字创建一个与参照表相同结构的新表,但内容不会复制,因此创建的新表是一个空表。
那以book表为例,复制一个book表的副本,不用复制数据,如何做呢?
CREATE TABLE book_copy1 LIKE book;
然后,show tables;看一下,是不是有一个book_copy1表呢?
使用AS关键字可以复制表的内容,但索引和完整性约束是不会复制的。
CREATE TABLE book_copy2 AS (SELECT * FROM Book);
当然,你想看看copy2的这个表里是否有数据,用以下命令可以搞定,但是,因为原来的book中就没有数据,所以这里也没有数据喔!
select * from book_copy2;
不要急,慢慢来!一定可以的!
先完成题目的前半部分,涉及到完整性约束的地方先不完成
拓端tecdat 2024-01-11
拓端tecdat 2023-07-21
拓端tecdat 2023-03-06