DB Lab1
1. Ubuntu20.04下MySQL的安装
电脑已有Ubuntu20.04环境,在PPT给出的安装教程 指导下完成安装。同时安装Navicat,与虚拟机中的MySQL连接。安装过程比较顺利。
2. 创建University数据库
DDL: Data Definition Language,表结构层的对表操作 create、drop、alter等等
DML: Data Manipulation Language,表中数据层的,对表中数据增删改 insert、update、delete等等
DQL: Data Query Language,表中数据查询 select等等
2.1 DDL--操作数据库
- 创建数据库db1
- 直接创建 create databse db1;
- 创建并检查是否存在 create databse if not exists db1;
 
- 直接创建 
# 2. 修改字符集,默认是utf8 改成utf8mb4
mysql> alter database db1 default character set utf8mb4;
Query OK, 1 row affected (0.01 sec)
# 3. 查看xxx数据库的定义信息
mysql> show create database db1;
+----------+---------------------------------------------------------------+
| Database | create Database                                                                                                               
+----------+---------------------------------------------------------------+
| db1      | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+---------------------------------------------------------------+
1 row in set (0.00 sec)
# 4. 查看数据库-->显示了自己创建的db1数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| db1                |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)
# 5. 使用数据库db1
mysql> use db1
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
# 6. 查看正在使用数据库-->正在使用db1数据库
mysql> select database();
+------------+
| database() |
+------------+
| db1        |
+------------+
1 row in set (0.00 sec)
# 7. 删除数据库
mysql> drop database db1;
Query OK, 1 row affected (0.06 sec)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)
2.2 DDL--操作表
首先创建好University数据库,create database University;
使用这个数据库 use University; ,再进行下面的操作。
数据类型
本次实验直接/间接接触到的数据类型(常用的)。
| 整数类型 | detail | 字节数 | 
|---|---|---|
| TINYINT | -127到127 27-1 | 1 | 
| INT(num) | 整数 | 4 | 
| BIGINT | 大整数 | 8 | 
| 浮点数类型 | detail | 字节数 | 
|---|---|---|
| FLOAT | 单精度浮点数 | 4 | 
| DOUBLE | 双精度浮点数 | 8 | 
| DECIMAL(M,D),DEC | M指总位数(小数点前+小数点后),D指小数位数。不指定M与D时默认为(10,0) | M+2 | 
| 字符串类型 | detail | 字节数 | 
|---|---|---|
| CHAR(M) | 固定长度字符串,会删除尾部空格 | M | 
| CARCHAR(M) | 变长度字符串,不删除尾部空格 | L+1字节 L<=M and 1<=M<=255 | 
| TEXT | 变长小字符串,不删除尾部空格 | L+2字节 L<2 and 16 | 
具体操作指令
- 创建表
- 普通创建  create table 表名 (字段名1 字段类型1, 字段名2 字段类型2…);
- 创建 新表newtable与 oldtable表 结构相同 create table newtable like oldtable;
 
- 普通创建  
- 查看表:
- 查看正在使用数据库中所有的表 show tables;
- 查看表结构 desc 表名;
 
- 查看正在使用数据库中所有的表 
- 删除表: drop table 表名;
- 修改表名: rename table 原表名 to 新表名;
- 修改表内的列
- 增加列 alter table 表名 add 列名 类型;
- 修改某一列的类型 alter table 表名 modify 列名 新类型;
- 修改某一列列名 alter table 表名 change 原列名 新列名 类型;
- 删除一列 alter table 表名 drop 列名;
 
- 增加列 
# 1. 创建表,同时这里用primary key进行限定主键
mysql> create table department
    -> (
    -> dept_name VARCHAR(20),
    -> building VARCHAR(15),
    -> budget numeric(12, 2),
    -> primary key(dep_name)
    -> );
Query OK, 0 rows affected (0.06 sec)
mysql> desc department;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| dep_name | varchar(20)   | NO   | PRI | NULL    |       |
| building | varchar(15)   | YES  |     | NULL    |       |
| budget   | decimal(12,2) | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
2.3 DML、DQL--操作表内数据,增删改+查
- DQL--查看数据
- 查看表中所有数据 selct * from 表名;
- 查看表中部分字段数据 selct 字段1,字段2... from 表名;
- 清除重复值 select distinct 字段1,字段2... from 表名;
 
- 查看表中所有数据 
- 插入数据
- 指定字段添加一条数据,没指定的部分默认为Null。这里字段与值的顺序是一一对应的。
 insert into 表名 (字段1,字段2...) values (值1,值2...);
- 直接对应全部字段添加一条数据,要完整且一对一对应表中定义的字段。
 insert into 表名 values (值1,值2...);
- 批量添加 在1的基础上,多条数据之间使用逗号。批量插入数据的最佳方式,避免与数据库建立多次连接,增加服务器负荷。
 
- 指定字段添加一条数据,没指定的部分默认为Null。这里字段与值的顺序是一一对应的。
mysql> insert into department values ('Biology','Watson', 90000);
mysql> insert into
    -> department (dep_name, building, budget)
    -> values
    -> ('Elec.Eng','Taylor',85000),
    -> ('Finance','Painter',120000),
    -> ('History','Painter',50000),
    -> ('Music','Packard',80000),
    -> ('Physics','Watson',70000);
Query OK, 5 rows affected (0.01 sec)
Records: 5  Duplicates: 0  Warnings: 0
mysql> select * from department;
+----------+----------+-----------+
| dep_name | building | budget    |
+----------+----------+-----------+
| Biology  | Watson   |  90000.00 |
| Comp.Sci | Taylor   | 100000.00 |
| Elec.Eng | Taylor   |  85000.00 |
| Finance  | Painter  | 120000.00 |
| History  | Painter  |  50000.00 |
| Music    | Packard  |  80000.00 |
| Physics  | Watson   |  70000.00 |
+----------+----------+-----------+
7 rows in set (0.00 sec)
- 删除数据 delete from 表名 [where 字段名=值]
限定
- 设置primary key 主键
- 可以 字段名 类型 primary key,这样设置
- 也可以在最后 primary key(字段名),
 
- 可以 
- 删除primary key主键 alter table 表名 drop primary key;
- 设置foreign key外键,这个被关联的必须是对应table的PK主键(非空且唯一)。
 这个table的主键被关联之后,不能被修改or删除。
 这样两个table-department+course之间的dept_name就是相互关联的。foreign key(在建表的字段名) references 已有表名(要关联的已有表的字段名)
  
完善University数据库时遇到的问题
MySQL中的大小写问题
类似create、alter、insert这一类的命令是大小写不敏感的。
但是在不同OS系统上,表名、列名有不同的规则,需要用统一的标准进行约束。例如在虚拟机上create database University; 与 create database university; 就是创建了两个不同的数据库。
Cannot add or update a child row: a foreign key constraint fails
原因分析: 1. 数据类型不匹配; 2. 存储引擎不同; 3. 插入数据不匹配;
解决方法 : 先临时关闭外键约束,增添完数据之后再打开
set foreign_key_checks=0; # 关闭外键约束
set foreign_key_checks=1; # 打开外键约束
optional部分作答
- 
向department中添加一条数据; 
  
- 
删除刚刚添加的这条数据; 
  
- 
自行设计问题,查询相关数据;同时注意到查询结果的表格栏索引就是自己命令行写的顺序; - 使用单关系查询
- 使用多关系查询
  
  
 

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号