MY SQL 实验二:

实验2 创建实验用的数据库

一、实验目的

通过实验掌握使用Mysql数据库管理系统中建立数据库和用SQL定义基本表、修改基本表和删除基本表的方法。

二、实验原理

数据库定义:

(一)创建数据库(模式)

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] database_name

数据库名 database_name

MySQL不区分数据库及模式

(二 )创建表及 MySQL 数据类型

一般分为数值型(Numeric), 字符串型(String)及 日期时间型(Date/Time) 三类

1.数值型 分为整型及小数型

  1. 整型

TINYINT: 8-bit,[-128, 127] , [0, 255]

SMALLINT: 16-bit [-32768, 32767] , [0, 65535]

MEDIUMINT: 24-bit [-8388608, 8388607] , [0, 16777215]

INT (or INTEGER): 32-bit [-2147483648, 2147483647] [0, 4294967295]

BIGINT: 64-bit [-9223372036854775808, 9223372036854775807] [0, 18446744073709551615]

BIT(n): A n-bit 列.

BOOLEAN (or BOOL): 与 TINYINT(1)相同

  1. 小数型

FLOAT: 32-bit

DOUBLE (or DOUBLE PRECISION or REAL): 64-bit

DECIMAL(n, d) 例如 DECIMAL(6, 2),-9999.99 to 9999.99.

FLOAT(n, d) or DOUBLE(n, d):

2、字符串-文本型

CHAR(n): 固定长字符, 最大255个字符。

VARCHAR(n): 变长字符串最大65535(utf8 characters range from 1-4 bytes).

TINYTEXT: 255 Bytes

TEXT: 64 KBytes

MEDIUMTEXT: 16 MBytes

LONGTEXT: 4 GBytes

3、日期时间Date/Time

DATETIME: 'YYYY-MM-DD HH:MM:SS' 年-月-日-时-分-秒

DATE: 'YYYY-MM-DD'

TIME: 'HH:MM:SS'

YEAR(4|2): 'YYYY' or 'YY'.

TIMESTAMP: 与 DATETIME 类似

4.其他类型

  1. 枚举 -enu, MySQL在存储枚举时非常紧凑,会根据列表值的数量压缩到一个或者两个字节中。

sex 字段只允许插入 male , female , unknow 中的其中之一

枚举最大可以有 65535 个成员值。

create table tt2(sex enum('男','女','未知')default '未知');

2)二进制数据Binary Data and BLOB

BINARY(n),VARBINARY(n),TINYBLOB: 255 bytes,BLOB: 64KBytes,MEDIUMBLOB: 16MBytes

LONGBOLB: 4GBytes

3) 空间数据类型 Spatial Data Types(点,线,几何图)及 enum, Set 等

(三)修改表的结构

ALTER TABLE <表名>

ADD \<新列名\> \<数据类型\> \[ 完整性约束 \]

DROP \<完整性约束名\>

ALTER COLUMN\<列名\> \<数据类型\> \]; 例如 #表test_tab增加列test alter table test_tab add(test char(10)); #表test_tab修改列test alter table test_tab modify test char(20) not null; #表test_tab修改列test默认值 alter table test_tab alter test set default 'system'; #表test_tab去掉test默认值 alter table test_tab alter test drop default; #表test_tab去掉列test alter table test_tab drop column test; 三、实验条件 windows7 操作系统, mysql5.6 数据库服务器。 四、实验内容和方法 实验数据库,老师提供数据库脚本TradeDBSQL.txt (一) 建立实验数据库 1. 启动MYSQL服务器 在命令窗口(cmd),输入mysqld --console 命令 2. 登录MYSQL系统 在另外一个命令窗口(cmd)输入mysql -u root -p 回车 密码为空 进入系统 3.在E盘创建自己的工作目录,例如db2021,将老师提供的数据库脚本文件TradeDBSQL.txt放在此目录下 运行数据库脚本 mysql\> source e:\\db2021\\TradeDBSQL.txt 将自动创建Trade数据库,创建产品、订单等8张表,并且插入数据。 系统将花一点时间自动建立数据库。 4.了解实验用数据库 show databases; - 列出所有数据库,有没有trade 数据库? use trade; 进入trade 数 status; 将显示数据库的关键信息,版本号,登录用户,端口号,特别是服务器、客户端的字符集 show tables; 显示trade 有多少张表 desc Products; 显示Products 表的结构,用此方法显示所有的表,并且打开TradeDBSQL.txt 文件,与每张表的定义进行比较。 打开数据库结构图,表名及字段用中文名的利弊。 1) Products -产品表 ProductID -产品ID, ProductName -产品名称, SupplierID -供应商ID, CategoryID -类别ID,QuantityPerUnit -单位数量 UnitPrice -单价,UnitsInStock -库存量, UnitsOnOrder -订购量, ReorderLevel -再订购量,Discontinued -中止 2) Orders -订单 OrderID -订单ID,CustomerID -客户ID, EmployeeID -雇员ID, OrderDate -订购日期, RequiredDate -到货日期,ShippedDate -发货日期, ShipVia -运货商, Freight -运货费, ShipName -货主名称, ShipAddress -货主地址, ShipCity -货主城市, ShipRegion -货主地区, ShipPostalCode -货主邮政编码, ShipCountry -货主国家 3) OrderDetails -订单明细 OrderID -订单ID, ProductID -产品ID, UnitPrice -单价, Quantity -数量, Discount -折扣 4) Suppliers - 供应商表 SupplierID -供应商ID, CompanyName -公司名称, ContactName -联系人姓名,ContactTitle -联系人职务, Address -地址, City -城市, Region -地区, PostalCode -邮政编码, Country -国家, Phone -电话, Fax -传真, HomePage -主页 5) Employees -雇员表 EmployeeID 雇员ID, LastName -姓氏, FirstName -名字, Title -职务, TitleOfCourtesy -尊称, BirthDate -出生日期, HireDate雇用日期, Address -地址, City -城市, Region -地区, PostalCode -邮政编码, Country -国家, HomePhone -家庭电话, Extension -分机, Notes -备注, ReportsTo -上级 6) Customers -客户表 CustomerID -客户ID, CompanyName -公司名称, ContactName -联系人姓名, ContactTitle -联系人职务, Address -地址, City-城市, Region -地区, PostalCode -邮政编码, Country -国家, Phone -电话, Fax -传真 7) Categories -类别表 CategoryID -类别ID, CategoryName -类别名称, Description -说明 8) Shippers -运货商表 ShipperID -运货商ID,CompanyName -公司名称,Phone -电话 4 优化数据类型 MYSQL 的 procedure analyse() 用于分析优化的数据类型定义。 select \* from Products procedure analyse() \\G; select \* from Products procedure analyse(5,256)\\G; (对于所有表进行比较) 说明: procedure analyse(5,256)不要建议含有多于5个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长; 比较优化结果与原设计的异同 (二)创建 school 数据库 1. 创建数据库 CREATE database school DEFAULT CHARACTER SET gbk ; 2. 创建表-表定义 根据下列表的信息,参照实验数据库的脚本,定义下列三张表 Student表 Sno Sname Ssex Sage Sdept 95001 李勇 男 20 CS 95002 刘晨 女 19 IS 95003 王敏 女 18 MA 95004 张立 男 19 IS Course表 Cno Cname Cpno Credit 1 数据库 5 4 2 数学 2 3 信息系统 1 4 4 操作系统 6 3 5 数据结构 7 4 6 数据处理 2 7 PASCAL语言 6 4 SC表 Sno Cno Grade 95001 1 92 95001 2 85 95001 3 88 95002 2 90 95002 3 80 3 修改基本表 alter table 1) 添加新列 在SC表中添加2个新列,名为T1和T2数据类型均为整型。参考ALTER TABLE 语法 增加新列方法 参考: ALTER TABLE 表名 ADD 列名 数据类型; 用desc sc 查看结果 2) 修改列名及数据类型 1) 改变某列的数据类型 修改SC表中T1的数据类型为 TINYINT 参考: ALTER TABLE 表名 MODIFY 列名 新数据类型 2) 改变某列的列名及数据类型 将T2名改为T22类型改为varchar(20) 参考: ALTER TABLE 表名 CHANGE 老列名 新列名 新数据类型 用desc sc 查看结果 3) 删除列 删除SC 表的T22列 参考: ALTER TABLE 表名 DROP COLUMN 列名; 4) 修改表名 重命名 将SC表名名改为SC1 参考: ALTER TABLE 表名 RENAME 新表名; 4 添加记录 insert into student values ('95001','李勇','男',20,'CS'); insert into student values ('95002', '刘晨','女',19,'IS'); insert into student values('95003', '王敏', '女',18, 'MA'); insert into student values('95004', '张立', '男',19, 'IS'); insert into Course values('1','数据库', '5',4); insert into Course values('2', '数学', '' ,2); insert into Course values('3', '信息系统', '1', 4); insert into Course values('4', '操作系统', '6', 3); insert into Course values('5', ' 数据结构', '7', 4); insert into Course values('6', '数据处理', '', 2); insert into Course values('7', 'PASCAL语言', '6', 4); insert into SC1 values('95001', '1', 92); insert into SC1 values('95001', '2', 85); insert into SC1 values('95001', '3', 88); insert into SC1 values('95002', '2', 90); insert into SC1 values('95002', '3', 80); 分别用select \* from student, select \* from course 和select \* from sc,检验三张表是否存在正确的数据。

相关推荐
Elastic 中国社区官方博客1 分钟前
Elasticsearch:Workflows 介绍 - 9.3
大数据·数据库·人工智能·elasticsearch·ai·全文检索
仍然.5 分钟前
MYSQL--- 聚合查询,分组查询和联合查询
数据库
一 乐9 分钟前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
啦啦啦_999911 分钟前
Redis-0-业务逻辑
数据库·redis·缓存
自不量力的A同学43 分钟前
Redisson 4.2.0 发布,官方推荐的 Redis 客户端
数据库·redis·缓存
Exquisite.1 小时前
Mysql
数据库·mysql
全栈前端老曹1 小时前
【MongoDB】深入研究副本集与高可用性——Replica Set 架构、故障转移、读写分离
前端·javascript·数据库·mongodb·架构·nosql·副本集
R1nG8631 小时前
CANN资源泄漏检测工具源码深度解读 实战设备内存泄漏排查
数据库·算法·cann
阿钱真强道2 小时前
12 JetLinks MQTT直连设备事件上报实战(继电器场景)
linux·服务器·网络·数据库·网络协议
逍遥德2 小时前
Sring事务详解之02.如何使用编程式事务?
java·服务器·数据库·后端·sql·spring