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. 整型:
- TINYINT:1字节整数,范围 -128 到 127 或 0 到 255(无符号)。
- SMALLINT:2字节整数,范围 -32768 到 32767 或 0 到 65535(无符号)。
- MEDIUMINT:3字节整数,范围 -8388608 到 8388607 或 0 到 16777215(无符号)。
- INT 或 INTEGER:4字节整数,范围 -2147483648 到 2147483647 或 0 到 4294967295(无符号)。
- BIGINT:8字节整数,范围 -9223372036854775808 到 9223372036854775807 或 0 到 18446744073709551615(无符号)。
2. 浮点数和双精度:
- FLOAT:单精度浮点数。
- DOUBLE:双精度浮点数。
- DECIMAL 或 NUMERIC:小数点前后的数字位数固定,用于精确计算。
#日期和时间类型
1. 日期和时间:
- DATE格式 YYYY-MM-DD,存储日期。
- TIME格式 HH:MM:SS,存储时间。
- DATETIME格式 YYYY-MM-DD HH:MM:SS,存储日期和时间。
- TIMESTAMP与DATETIME 类似,但时间戳通常用于自动记录数据的创建和修改时间。
- YEAR存储年份的数字,范围 1901 到 2155。
#字符串类型
1. 字符和文本:
- CHAR固定长度字符串,存储大小写敏感的非二进制字符。
- VARCHAR可变长度字符串,存储大小写敏感的非二进制字符。
- TEXT存储大量非二进制字符数据。
- TINYTEXT、MEDIUMTEXT、LONGTEXT不同长度的文本数据。
2. 二进制字符串:
- BINARY固定长度的二进制字符串。
- VARBINARY可变长度的二进制字符串。
- BLOB存储二进制大对象。
- TINYBLOB、MEDIUMBLOB、LONGBLOB不同长度的二进制大对象。
### 枚举和集合类型
1. 枚举(ENUM)
- ENUM字符串对象的集合,可以从允许的值列表中选择。
2. 集合(SET)
- SET多个字符串值的集合,每个值也是从允许的值列表中选择。
### 空间数据类型
- GEOMETRY、POINT、LINESTRING、POLYGON等:用于存储空间数据。
### 其他类型
- BIT位字段类型,可以存储二进制值。
- JSON用于存储 JSON 文档。