马哥教育74期Linux云计算SRE-第06周作业

1. 完成将server和client端的mysql配置默认字符集为utf8mb4;

UTF8不是完整的:如果要存放一些生僻字,比方说什么表情包之类的,真正用的话应该用UTF8MB4;早期MySQL版本默认为latin1,从MySQL8.0开始默认字符集已经为utf8mb4
配置server默认的字符集:

vim /etc/my.cnf
[mysqld]
character-set-server=utf8mb4

配置mysql客户端默认的字符集:

vim /etc/my.cnf
#针对mysql客户端
[mysql]
default-character-set=utfmb4

#针对所有mysql客户端
[client]
default-character-set=utf8mb4

2. 掌握如何获取SQL命令的帮助,基于帮助完成添加testdb库,字符集utf8, 排序集合utf8_bin

获取SQL命令使用帮助:
官方帮助:

https://dev.mysql.com/doc/refman/8.0/en/sql-statements.html

范例:查看SQL帮助:

mysql> help contents
You asked for help about help category: "Contents"
For more information, type 'help <item>', where <item> is one of the following
categories:
   Account Management
   Administration
   Components
   Compound Statements
   Contents
   Data Definition
   Data Manipulation
   Data Types
   Functions
   Geographic Features
   Help Metadata
   Language Structure
   Loadable Functions
   Plugins
   Prepared Statements
   Replication Statements
   Storage Engines
   Table Maintenance
   Transactions
   Utility

mysql> help Data Types
You asked for help about help category: "Data Types"
For more information, type 'help <item>', where <item> is one of the following
topics:
   AUTO_INCREMENT
   BIGINT
   BINARY
   BIT
   BLOB
   BLOB DATA TYPE
   BOOLEAN
   CHAR
   CHAR BYTE
   DATE
   DATETIME
   DEC
   DECIMAL
   DOUBLE
   DOUBLE PRECISION
   ENUM
   FLOAT
   INT
   INTEGER
   LONGBLOB
   LONGTEXT
   MEDIUMBLOB
   MEDIUMINT
   MEDIUMTEXT
   SET DATA TYPE
   SMALLINT
   TEXT
   TIME
   TIMESTAMP
   TINYBLOB
   TINYINT
   TINYTEXT
   VARBINARY
   VARCHAR
   YEAR DATA TYPE

mysql> help bit
Name: 'BIT'
Description:
BIT[(M)]

A bit-value type. M indicates the number of bits per value, from 1 to
64. The default is 1 if M is omitted.

URL: https://dev.mysql.com/doc/refman/8.0/en/numeric-type-syntax.html

基于帮助完成添加testdb库,字符集utf8, 排序集合utf8_bin:

mysql> help create database
Name: 'CREATE DATABASE'
Description:
Syntax:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [create_option] ...

create_option: [DEFAULT] {
    CHARACTER SET [=] charset_name
  | COLLATE [=] collation_name
  | ENCRYPTION [=] {'Y' | 'N'}
}

CREATE DATABASE creates a database with the given name. To use this
statement, you need the CREATE privilege for the database. CREATE
SCHEMA is a synonym for CREATE DATABASE.

URL: https://dev.mysql.com/doc/refman/8.0/en/create-database.html



mysql> create database testdb character set utf8 collate utf8_bin;
Query OK, 1 row affected, 2 warnings (0.01 sec)

3.总结mysql常见的数据类型。

数据类型参考链接:

https://dev.mysql.com/doc/refman/8.0/en/data-types.html

1.数值类型:

  • 整数类型:tinyint,smallint,mediumint,int,bigint
  • 浮点数类型:float,double,decimal

2.字符串类型:

  • 定长字符串类型:char
  • 变长字符串类型:varchar,text

3.时间日期类型:

  • date,time,datetime,timestamp,year

4.枚举类型(常用于存储有限个可能值的情况)
-enum

5.集合类型(可以包含一组字符串值,并且SET列值的数量是可变的)

  • set

6.二进制类型:

  • blob(存储二进制数据,最大长度为65,535字节),bit(存储位字段值,并在列级别上进行操作)

以下是数据类型示例:
数值类型:
tinyint:-128~127
int:-2147483648~2147483647
bigint:-9223372036854775808~9223372036854775807
字符串类型:

  • varchar:变长,最大长度65535字符
  • text:变长,最大长度65535字节
  • char:定长,最大长度255字符

时间日期类型:

  • data:日期,范围:'1000-01-01'~'9999-12-31'
  • time:时间,范围:'-83:59:59'~'838:59:59'
  • datetime:日期时间,范围'1000-01-0100:00'~'9999-12-3123:59:59'
  • timestamp:时间戳,范围:'1970-01-0100:00:01'UTC~'2038-01-1903:14:07'UTC
  • year:年份,范围:1901~2155

枚举类型:

  • enum('A''B''C'):存储A,B,C等三个值中的一个。
  • set('A''B''C'):存储A,B,C等三个值中的任意个组合。

4. 创建一个主机表host,放在testdb中,要求字段 1) 主键自增id 无符号, tinyint. 2) hostname可变字符长度256,可为空。。3)ip 可变字符长度256,可为空。4)账号,可变字符长度256,可为空。5)密码,可变字符长度256,可为空。6)创建时间,时间类型,非空。7)更新时间,时间类型,默认当前时间。8)区域,只能在华南,华北,华东,三个区域之一。9)端口,无符号整数,可为空。10)外网地址,可变字符长度256,可为空。11)内网地址,可变字符长度256,可为空。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| testdb             |
+--------------------+
5 rows in set (0.00 sec)

mysql> use testdb
Database changed

mysql> CREATE TABLE host (
    ->   id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ->   hostname VARCHAR(256) DEFAULT NULL,
    ->   ip VARCHAR(256) DEFAULT NULL,
    ->   account VARCHAR(256) DEFAULT NULL,
    ->   password VARCHAR(256) DEFAULT NULL,
    ->   create_time TIMESTAMP NOT NULL,
    ->   update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    ->   region ENUM('华南', '华北', '华东'),
    ->   port SMALLINT UNSIGNED DEFAULT NULL,
    ->   public_ip VARCHAR(256) DEFAULT NULL,
    ->   private_ip VARCHAR(256) DEFAULT NULL
    -> );
Query OK, 0 rows affected (0.04 sec)

mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| emp              |
| host             |
+------------------+
2 rows in set (0.00 sec)

mysql> describe host;
+-------------+----------------------------------+------+-----+-------------------+-----------------------------------------------+
| Field       | Type                             | Null | Key | Default           | Extra                                         |
+-------------+----------------------------------+------+-----+-------------------+-----------------------------------------------+
| id          | tinyint unsigned                 | NO   | PRI | NULL              | auto_increment                                |
| hostname    | varchar(256)                     | YES  |     | NULL              |                                               |
| ip          | varchar(256)                     | YES  |     | NULL              |                                               |
| account     | varchar(256)                     | YES  |     | NULL              |                                               |
| password    | varchar(256)                     | YES  |     | NULL              |                                               |
| create_time | timestamp                        | NO   |     | NULL              |                                               |
| update_time | timestamp                        | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP |
| region      | enum('华南','华北','华东')       | YES  |     | NULL              |                                               |
| port        | smallint unsigned                | YES  |     | NULL              |                                               |
| public_ip   | varchar(256)                     | YES  |     | NULL              |                                               |
| private_ip  | varchar(256)                     | YES  |     | NULL              |                                               |
+-------------+----------------------------------+------+-----+-------------------+-----------------------------------------------+
11 rows in set (0.00 sec)

5. 给testdb.host表中添加多条数据。

mysql> insert into testdb.host (hostname,ip,account,password,create_time,region,port) values ('rock8.7','10.0.0.2','root','654321','2023/5/26','华南','999'),('rock8.7','10.0.0.3','root','','2023/5/26','华东','909'),('rock8.7','10.0.0.1','root','123456','2023/5/26','华北','888');
Query OK, 3 rows affected, 3 warnings (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 3

mysql> select * from host;
+----+----------+----------+---------+----------+---------------------+---------------------+--------+------+-----------+------------+
| id | hostname | ip       | account | password | create_time         | update_time         | region | port | public_ip | private_ip |
+----+----------+----------+---------+----------+---------------------+---------------------+--------+------+-----------+------------+
|  1 | rock8.7  | 10.0.0.2 | root    | 654321   | 2023-05-26 00:00:00 | 2023-05-26 18:56:11 | 华南   |  999 | NULL      | NULL       |
|  2 | rock8.7  | 10.0.0.3 | root    |          | 2023-05-26 00:00:00 | 2023-05-26 18:56:11 | 华东   |  909 | NULL      | NULL       |
|  3 | rock8.7  | 10.0.0.1 | root    | 123456   | 2023-05-26 00:00:00 | 2023-05-26 18:56:11 | 华北   |  888 | NULL      | NULL       |
+----+----------+----------+---------+----------+---------------------+---------------------+--------+------+-----------+------------+
3 rows in set (0.00 sec)

6. 根据表扩展出几个语句,完成总结DDL, DML的用法,并配上示例。

DDL,中文名为数据定义语言,主要用来定义数据库中的对象,包括数据库,表,视图,索引等,DDL语句不涉及到具体的数据操作,而只是去描述数据的结构和约束,比如:创建表,修改表,删除表,显示等; 用到的语句:create,alter,drop,show
DDL常用语句范例:
创建表:

create table student (id int not null,
name varchar(20) not null,
age int,
primary key(id)
);

修改表:

alter table student add score int default 80;

创建索引:

create index idx_student_score on student(score);

删除表:

drop table student;

查看当前使用的排序规则

show variables like 'collation%';

DML,中文名为数据操作语言,主要是用来操作数据库中的数据,对数据进行增删改查等操作,包括插入数据,更新数据,删除数据,查询数据等。
用到的语句:insert,update,delete,select
DML常用语句范例:
插入数据:

insert into student(id,name,age,score) values (1,'shuai',18,90);

更新数据:

update student set score=95 where id=1;

查询数据:

select * from student where score >=80;

删除数据:

delete from student where id =1;

7. 导入hellodb库,总结DQL, alias, where子句,gruop by, order by, limit, having使用示例。

导入hellodb数据库:

mysql -u root -p 123456 < hellodb.sql  #-u参数是指定MySQL数据库的用户名,这里指定为root;
                                        -p参数是指定MySQL数据库的密码;
                                        <符号用来指示将hellodb.sql中的SQL语句导入到MySQL数据库中         

DQL使用示例:
使用alias语句重命名列名:

select id as userid,username as name form user;  #通过as语句为id和username列分别起了新的别名为userid和name

使用where语句过滤结果:

select * form user where id=10;  #通过where语句过滤出所有id等于10的用户数据

使用group by分组:

select sex,count(*)from user group by sex;  #按照性别分组,然后统计每个性别对应的用户数量

使用order by排序:

select * from user order by id desc;  #按照id降序排序,从大到小显示用户数据

使用limit限制结果集:

select * from user limit 10;  #这里限制只显示前10条用户数据

使用having过滤分组后的结果:

select sex,count(*) from  user group by sex having count(*)>50;  #这里按照性别统计用户数量,然后通过having语句过滤出数量大于50的性别数据。

9. 总结select语句处理顺序。

SELECT语句处理的顺序可以分为以下步骤:

  1. FROM子句:从指定的表或视图中选择数据
  2. JOIN子句:将两个或多个表连接起来,形成一个虚表
  3. WHERE子句:对虚表中的记录进行筛选,只返回满足条件的记录
  4. GROUP BY子句:按指定的字段对记录进行分组,返回每组的汇总信息
  5. HAVING子句:对分组后的结果再次筛选,只返回满足条件的分组
  6. SELECT子句:选择需要返回的字段,并进行计算或转换
  7. ORDER BY子句:按指定的字段对结果进行排序
  8. LIMIT子句:限制返回结果的数量
    注意:在执行SQL查询时,实际执行的顺序可能会进行优化,具体执行顺序可能并不严格遵循上述步骤。
posted @ 2023-06-05 11:15  YueShuai6  阅读(77)  评论(0)    收藏  举报