Mysql初学者入门指南

Mysql入门指南

Enter password: ****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.34 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> 

输入密码进入sql命令行界面,从这里就可以开始输入MySQL指令了。

不过在此之前需要了解数据库、表之间的关系,数据库包含了表,而一个数据库可以有多个表,可以理解为数据库是水桶,表是装在水桶里的球,MySQL数据库软件是软件的统称可以理解为装桶的房间。

了解数据库

从了解数据库到创建数据库,便可以开始数据库的操作了,教程并不包含MySQL的安装,以及联表查询等内容,只作为一个SQL的入门指南。

create创建数据库

首先让我们创建一个数据库class,之后的操作也将在这个这个数据库内进行。

mysql> create database class;        #创建数据库 create database 数据库名称
Query OK, 1 row affected (0.31 sec)

创建数据库后进入这个页面可以开始第一个指令show

show显示

show指令用于显示数据库的数量和名称,也可以显示数据库内表的数量和名称。

mysql> show databases;                    #显示所有数据库show databases;
+--------------------+
| Database           |
+--------------------+
| class              |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| users              |
+--------------------+
5 rows in set (0.59 sec)
use使用

使用数据库,可以理解为进入数据库,使用这个指令后,所有的操作都将在此数据库内进行,并不会干扰其他数据库,这里以进入数据库users为例。

mysql> use class;
Database changed
mysql>
#此时和进入MySQL时一样是不显示任何东西的,需要使用show指令来显示users里存在的表
mysql> show tables;     #显示所有表show tables
+-----------------+
| Tables_in_users |
+-----------------+
|mate             |
+-----------------+
2 rows in set (0.09 sec)

mysql>                   #返回主控界面**use mysql;**

这便是show在数据库和表的显示与使用。

注:每行命令后记得加上 ; 作为结束。

表的使用

数据库表的使用也是最为常见也我们主要使用的内容,也就是我们涉及到常见的增删改查。

表的数据结构

创建表并不是直接出现我们看到的数据,就像下面的表一样,数据库的表具备双层结构,既底层的数据逻辑结构和上层的数据信息结构,我们常看到的表就是上层的数据信息结构。

+----+------+------+------+
| id | name | age  | mark |
+----+------+------+------+
| 1  | 张三 | 33   | 83   |
| 2  | 李四 | 34   | 74   |
| 3  | 王五 | 35   | 55   |
| 4  | 赵六 | 36   | 96   |
| 5  | 梅七 | 37   | 77   |
| 6  | 钱八 | 38   | 88   |
| 7  | 白九 | 39   | 69   |
+----+------+------+------+
7 rows in set (0.03 sec)

我们在显示这样的表之前要先创建这个表的底层数据逻辑结构,作为表底层的逻辑约束,比如id列下只能输入数字,使用int数据类型进行限制,文本varchar类型进行限制,这就像地基和房子的关系,地基限制了房子的形状和建成方式,所以在建表以前需要打好表的地基。

让我们先来创建一个表吧,依旧是create指令,不过和建立数据库不同,建立表需要建立数据结构关系。

CREATE TABLE [IF NOT EXISTS] 表名(
	字段名 列类型 [属性] [索引] [注释],
    字段名 列类型 [属性] [索引] [注释],
    ······
    字段名 列类型 [属性] [索引] [注释],
)[表类型][字符集设置][注释]

create table student

create table student(               #创建表student
id int auto_increment,  #id这个字段被定义为整数int类型,auto increment自动增长,并且是表的主键primary key。这意味着每当插入新记录时,id 字段的值会自动增加,确保每个记录的 id 都是唯一的。
name varchar(20),                   #name字段被定义为可变长度的字符串,最多可以存储20个字符
sex varchar(2),
age int,                            
birthday date,                      #date:这个字段被定义为日期类型,用于存储出生日期,格式 YYYY-MM-DD,存储日期。
email varchar(50)
primary key(id)
);
mysql> create table student(
    -> id int auto_increment,
    -> name varchar(20),
    -> sex varchar(2),
    -> age int,
    -> birthday date,
    -> email varchar(50),
    -> primary key(id)
    -> );
Query OK, 0 rows affected (0.41 sec)

desc查看表的结构
mysql> desc student;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int         | NO   | PRI | NULL    | auto_increment |
| name     | varchar(20) | YES  |     | NULL    |                |
| sex      | varchar(2)  | YES  |     | NULL    |                |
| age      | int         | YES  |     | NULL    |                |
| birthday | date        | YES  |     | NULL    |                |
| email    | varchar(50) | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
6 rows in set (0.08 sec)

insert into插入数据(增)
#INSERT INTO 表名称 VALUES (值1, 值2,....)
mysql> insert into student values(1,'小明','男',12,'2012-2-5','379568@qq.com');
Query OK, 1 row affected (0.04 sec)

#也可以指定的列添加数据INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)如:
mysql> insert into student(id,name,sex) values(1,'小明','男');
select查看表数据(查)
select * from student;            #查看表student的数据
mysql> select * from student;
+----+------+------+------+------------+---------------+
| id | name | sex  | age  | birthday   | email         |
+----+------+------+------+------------+---------------+
|  1 | 小明 | 男   |   12 | 2012-02-05 | 379568@qq.com |
+----+------+------+------+------------+---------------+
1 row in set (0.00 sec)
mysql> select id,name,email from student;    #显示指定列的内容
+----+------+---------------+
| id | name | email         |
+----+------+---------------+
|  1 | 小明 | 379568@qq.com |
+----+------+---------------+
1 row in set (0.00 sec)
#SQL SELECT 语法
SELECT 列名称 FROM 表名称   #显示指定列的内容
SELECT * FROM 表名称        #显示表全部内容

where过滤

where是SQL一个进行过滤的指令,通常与select配合在一起使用,比如过滤指定的数据,进行条件筛选。

SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
mysql> select * from student where id>1;
+----+------+------+------+------------+----------------+
| id | name | sex  | age  | birthday   | email          |
+----+------+------+------+------------+----------------+
|  2 | 小红 ||   12 | 2012-03-07 | 3424344@qq.com |
|  3 | 小蓝 ||   12 | 2012-04-08 | 5432244@qq.com |
+----+------+------+------+------------+----------------+
2 rows in set (0.04 sec)

mysql> select * from student where id=1 or id=3;
+----+------+------+------+------------+----------------+
| id | name | sex  | age  | birthday   | email          |
+----+------+------+------+------------+----------------+
|  1 | 小明 ||   12 | 2012-02-05 | 379568@qq.com  |
|  3 | 小蓝 ||   12 | 2012-04-08 | 5432244@qq.com |
+----+------+------+------+------------+----------------+
2 rows in set (0.00 sec)
update数据更新(改)

当我们想要修改数据的时候就需要用到update指令

insert into student (id,name,sex) values(4,'小白','男') ;
mysql> select * from student where id>1;
+----+------+------+------+------------+----------------+
| id | name | sex  | age  | birthday   | email          |
+----+------+------+------+------------+----------------+
|  2 | 小红 ||   12 | 2012-03-07 | 3424344@qq.com |
|  3 | 小蓝 ||   12 | 2012-04-08 | 5432244@qq.com |
|  4 | 小白 || NULL | NULL       | NULL           |
+----+------+------+------+------------+----------------+
得到的数据会发现有几个空值,这个时候使用insert会发现因为id固定了无法插入,这个时候就要用到update了。
mysql> insert into student values(4,'小白','男',12,'2012-2-8','67877998@qq.com');
ERROR 1062 (23000): Duplicate entry '4' for key 'student.PRIMARY'
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
update student set age=12,birthday='2012-2-8',email='67877998@qq.com' where id=4;

mysql> update student set age=12,birthday='2012-2-8',email='67877998@qq.com' where id=4;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from student;
+----+------+------+------+------------+-----------------+
| id | name | sex  | age  | birthday   | email           |
+----+------+------+------+------------+-----------------+
|  1 | 小明 ||   12 | 2012-02-05 | 379568@qq.com   |
|  2 | 小红 ||   12 | 2012-03-07 | 3424344@qq.com  |
|  3 | 小蓝 ||   12 | 2012-04-08 | 5432244@qq.com  |
|  4 | 小白 ||   12 | 2012-02-08 | 67877998@qq.com |
+----+------+------+------+------------+-----------------+
4 rows in set (0.00 sec)
这个时候会发现数据更新了,修改和添加数据的时候可以使用update
注意:
update 表名称 set 字段1=1,字段2=2 where 条件;
#修改字段1和字段2的值
#如果没有where的关键字,说明修改的默认所有的记录
#如果有where的关键字,修改的是符合条件的记录

alter

alter和其他的不同可以增加新的列,修改数据结构


1、添加一个新的字段
	alter table 表名称 add 字段名称 数据类型(长度)约束;
2、修改字段的数据类型、长度或者约束
	alter table 表名称 modify 字段名称 数据类型(长度)约束;
3、删除某一个字段
	alter table 表名称 drop 字段名称;
4、修改字段的名称
	alter table 表名称 change 旧字段 新字段 数据类型(长度)约束;
5、修改表的名称
	rename table 旧表名 to 新表名;
alter table student add address varchar(20);

mysql> alter table student add address varchar(80);      #增加列
mysql> desc student;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int         | NO   | PRI | NULL    | auto_increment |
| name     | varchar(20) | YES  |     | NULL    |                |
| sex      | varchar(2)  | YES  |     | NULL    |                |
| age      | int         | YES  |     | NULL    |                |
| birthday | date        | YES  |     | NULL    |                |
| email    | varchar(50) | YES  |     | NULL    |                |
| address  | varchar(80) | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

delete删除(删)
DELETE FROM 表名称 WHERE 列名称 =#这会删除一整行的数据
delete from student where id=4;

mysql> select * from student;
+----+------+------+------+------------+-----------------+
| id | name | sex  | age  | birthday   | email           |
+----+------+------+------+------------+-----------------+
|  1 | 小明 ||   12 | 2012-02-05 | 379568@qq.com   |
|  2 | 小红 ||   12 | 2012-03-07 | 3424344@qq.com  |
|  3 | 小蓝 ||   12 | 2012-04-08 | 5432244@qq.com  |
|  4 | 小白 ||   12 | 2012-02-08 | 67877998@qq.com |
|  5 | 小李 || NULL | NULL       | NULL            |
+----+------+------+------+------------+-----------------+
5 rows in set (0.00 sec)

mysql> delete from student where id=5;
Query OK, 1 row affected (0.03 sec)

mysql> select * from student;
+----+------+------+------+------------+-----------------+
| id | name | sex  | age  | birthday   | email           |
+----+------+------+------+------------+-----------------+
|  1 | 小明 ||   12 | 2012-02-05 | 379568@qq.com   |
|  2 | 小红 ||   12 | 2012-03-07 | 3424344@qq.com  |
|  3 | 小蓝 ||   12 | 2012-04-08 | 5432244@qq.com  |
|  4 | 小白 ||   12 | 2012-02-08 | 67877998@qq.com |
+----+------+------+------+------------+-----------------+
4 rows in set (0.00 sec)
#删除所有行
#可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
DELETE FROM table_name;
或者:
DELETE * FROM table_name;
#删除表结构
drop table 表名称;
truncate 表;
		*先把整个表删掉(数据也删除了),创建一个与原来一模一样的表(表里没有数据【空表】

#删除数据库
DROP DATABASE database_name;
order by 对结果进行排序
1、语法
order by 字段 asc | desc;
​	asc      #代表升序(默认值)
​	desc     #代表降序
2、注意
order by 自己放在select的语句末尾。
select * from xx where xx order by xx;
聚集函数
1、什么是聚集函数:Excel表格。求数量,求和,平均值,最大值,最小值。
2、聚集函数操作的都是某一列的数据。
3、聚集函数
count()---求数量
例如:select count(*| count(列名)from 表;   --某一列数据行的总数
sum()  ---求某一列数据的和
例如:select sum(列名)from 表;   --某一列数据行的和
注意:没有sum(*),求的某一列,sum对数值类型起作用。
4、总结
聚集函数、是函数,不要忘记编写()
计算都是某一列的数据
聚集函数
count()           #求数量
select count(*) | count(age) from student;

sum()             #求和
select sum(age) from student;

avg()             #平均值
select avg(age) from student;

max()             #最大值
select max(age) from student;

min()             #最小值
select min(age) from student;
约束
primary key #声明某一个字段为主键,这一列的数据有如下特点:唯一、非空、被引用  ,当前主键的列,作为一条记录的标识
主键的值特点,可以把主键的值交给数据库去维护。
auto_increment #自动增长只能使用int和bigint类型
unique   #可以把某个字段声明成唯一的值
not null #可以把某个字段声明成非空的值是不能为空值。
数据类型
#数值类型
1. 整型:
   - TINYINT1字节整数,范围 -1281270255(无符号)。
   - SMALLINT2字节整数,范围 -3276832767065535(无符号)。
   - MEDIUMINT3字节整数,范围 -83886088388607016777215(无符号)。
   - INTINTEGER4字节整数,范围 -2147483648214748364704294967295(无符号)。
   - BIGINT8字节整数,范围 -92233720368547758089223372036854775807018446744073709551615(无符号)。
2. 浮点数和双精度:
   - FLOAT:单精度浮点数。
   - DOUBLE:双精度浮点数。
   - DECIMALNUMERIC:小数点前后的数字位数固定,用于精确计算。

#日期和时间类型
1. 日期和时间:
   - DATE格式 YYYY-MM-DD,存储日期。
   - TIME格式 HH:MM:SS,存储时间。
   - DATETIME格式 YYYY-MM-DD HH:MM:SS,存储日期和时间。
   - TIMESTAMPDATETIME 类似,但时间戳通常用于自动记录数据的创建和修改时间。
   - YEAR存储年份的数字,范围 19012155#字符串类型
1. 字符和文本:
   - CHAR固定长度字符串,存储大小写敏感的非二进制字符。
   - VARCHAR可变长度字符串,存储大小写敏感的非二进制字符。
   - TEXT存储大量非二进制字符数据。
   - TINYTEXTMEDIUMTEXTLONGTEXT不同长度的文本数据。
2. 二进制字符串:
   - BINARY固定长度的二进制字符串。
   - VARBINARY可变长度的二进制字符串。
   - BLOB存储二进制大对象。
   - TINYBLOBMEDIUMBLOBLONGBLOB不同长度的二进制大对象。

### 枚举和集合类型
1. 枚举(ENUM- ENUM字符串对象的集合,可以从允许的值列表中选择。
2. 集合(SET- SET多个字符串值的集合,每个值也是从允许的值列表中选择。

### 空间数据类型
- GEOMETRYPOINTLINESTRINGPOLYGON等:用于存储空间数据。

### 其他类型
- BIT位字段类型,可以存储二进制值。
- JSON用于存储 JSON 文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值