2.MySQL数据库和表的基本操作

1.客户端

MySQL是一种客户端服务器结构,服务器是主体真正用来存储和管理数据的
MySQL客户端通过SQL语句访问MySQL服务器
①客户端通过网络的方式访问服务器,服务器再通过网络把响应发回到客户端,客户端发的是sql语句,服务器返回的是操作结果.
在这里插入图片描述
客户端编写语句敲回车,是在把sql发给服务器,由服务器执行,再把执行结果返回给客户端,在这个过程必须有网络干预
②MySQL客户端和MySQL服务器可以在一台主机上,也可以不在一台主机上
③必须要先保证服务器已经启动了。连接数据库之前必须保证服务器是正确运行的(开始菜单里搜服务找到Mysql查看是否正在运行)连接数据库之前必须保证服务器是正确运行的
输入密码的时候要切换到英文模式,密码输入错误是闪退

2数据库基本操作

MySQL服务器是一个数据库软件,在运行的过程中可以维护多个“逻辑”上的数据库。(一个逻辑上的数据库就是若干个表的集合,)
列如:实现一个学生管理系统,需要创建一个学生数据库;实现一个作业管理系统也需要创建一个作业数据库,(这里的数据库就是上述“逻辑”上的数据库).
Mysql中绝大部分SQL语句都需要带;
SQL:结构化查询语言(Structured Query Language)

2.1show databases; 查看数据库

查看当前数据库有哪些

2.2create database [数据库名]; 创建数据库;

数据库名只能是数字、字母、下划线,不能有其他字符,数据库名之间不能有空格

2.3use [数据库名]; 使用数据库

在有多个数据库情况下,通过“使用”操作,选中某个数据库,接下来的命令都是针对选中的数据库
cmd中的粘贴复制:选中内容,enter复制,鼠标右键粘贴

2.4drop databse [数据库名]; 删除数据库

非必要不要使用该操作,删除之后一般找不回

–空格[注释内容]

3表基本操作

3.1 create table 表名; 创建表

①[]括号里面写表的列名以及每一列的数据类型,每一列都重新起一行;
字段(列名)写在前,数据类型写在后
②创建表的时候,表名或者列名不能和SQL中的关键字重复,否则就会报错,
解决问题的方法:把名字冲突的部分用反引号 ·引起来(反引号esc的下方1的左边)
③常见类型
int 整数
double 小数
decimal 更精确的小数,decimal(3, 1):小数1位,小数位和整数位总共3位
varchar 字符串
text 更长的字符串

mysql> create table student(
    -> id int,
    -> name varchar(20),
    -> score decimal(3,1),
    -> email varchar(50)
    -> );
Query OK, 0 rows affected (0.07 sec)

mysql> -- 创建表student含字段id,name,score,email

3.2show tables; 查看表

查看当前数据库里有那些表

3.3 desc [表名]; 查看表结构

mysql> desc student;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | int(11)      | YES  |     | NULL    |       |
| name  | varchar(20)  | YES  |     | NULL    |       |
| score | decimal(3,1) | YES  |     | NULL    |       |
| email | varchar(50)  | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
4 rows in set (0.05 sec)

方法二:show columns from[表名];
describe(desc)[表名];是show columns from[表名]; 的快捷方式

3.4插入数据

(a) insert into [表名] values (对应的字段内容); 全列插入
①对应的字段内容要注意:插入的字段数目和类型需要和表结构中要求的一致。
(列如下面1就是student表中第一列id中的int型,98.5就是第三列score中要求的类型数据decimal(3,1))
②插入的数据要用引号引起来,单引号双引号都可以


mysql> insert into student values (1,'test','98.5','test.qq.com');
Query OK, 1 row affected (0.05 sec)

(b) insert into [表名] (指定列[中间用,隔开]) values (插入的内容[中间用,隔开]); 指定列插入
①插入的数目和类型都要对应,指定的列要在表头中存在
②没有插入的列会自动被填充成NULL

<mysql> insert into student values (1,'test','98.5','test.qq.com');

© insert into [表名] (指定列)values (插入的指定列对应内容),(插入指定列对应内容); 同时插入多组数据用,把多组values数据值隔开

<mysql> insert into student(id,name) values (3,'tang'),(4,'li');

(d)插入检索出的数据

<mysql> insert into customers(
cust_id,
cust_contact,
cust_email,
cust_name,
cust_address)
select cust_id,
cust_contact,
cust_email,
cust_name,
cust_address
from custnew;
--使用insert select 从custnew 将所有数据导入到customers中

①该插入对列名没有要求,可以使用相同的列名也可以使用不同的
②select 中(custnew)第一列会插入到insert (customers)第一列中,第二列插入到第二列中,和位置有关系
③插入数据不是从0开始,先清空表
truncate table [表名];

3.5 drop table [表名]; 删除表

尽量不要使用

3.6 查看数据

(1)select * from [表名]; 查看数据(查找所有列)
查看当前表中的所有数据
①*是一个通配符,意思是把所有的列都查找出来
此查找方式仅限于在测试环境中使用,千万不能在生产环境的服务器上执行这样的sql语句;因为生产环境的服务器压力本来就很大,同时生产环境的服务器(数据库)数量非常多,一旦执行此语句,可能会给生产环境的服务器造成很大的负担,生产环境的服务器如果挂了,会给用户造成恶劣影响,从而给公司带来经济损失;操作生产环境一定要谨慎
②办公环境:公司发的笔记本或者台式机
开发环境:服务器(Linux) 64G 16核CPU
生产环境/线上环境,256G 28核 ,(对外,普通用户可以用)生产环境称为线上环境
测试环境:服务器(Linux)
其他三个统称为线下环境

mysql> select * from student;
+------+-------+-------+-------------+
| id   | name  | score | email       |
+------+-------+-------+-------------+
|    1 | test  |  98.5 | test.qq.com |
|    2 | zhang |  NULL | NULL        |
|    3 | tang  |  NULL | NULL        |
|    4 | li    |  NULL | NULL        |
+------+-------+-------+-------------+
4 rows in set (0.00 sec)

(b)select [列名] from [表名]; 指定列查找

mysql> select name from student;
+-------+
| name  |
+-------+
| test  |
| zhang |
| tang  |
| li    |
+-------+

©select [列名1],[列名2] from[表名];多列查找

select name,score from student;

3.7运行结果

Query OK, 2 rows affected (0.04 sec)
Records: 2  Duplicates: 0  Warnings: 0

Query OK, 2 rows affected (0.00 sec)
表示:成功了,并提示你两行内容收到了影响; 0.04指的是执行时间,单位秒
Records: 2 Duplicates: 0 Warnings: 0
[0.06 sec] = 60ms 从计算机视觉来看这个时间是特别特别慢的

3.8针对查到的列进行一定的表达式计算

(1)查找姓名和所有成绩之和

mysql> select name,chinese + math + english from exam_result;--查找姓名和所有的三门课程之和
+-----------+--------------------------+
| name      | chinese + math + english |
+-----------+--------------------------+
| 张三      |                    200.1 |
| 李四      |                    204.0 |
| 王丹丹    |                    222.9 |
| 张图      |                    228.5 |
| 张九九    |                    199.7 |
| 尚是      |                    180.5 |
| 滴滴      |                    204.8 |
| 张武      |                    223.7 |
| 长都      |                    230.4 |
| 李武      |                     NULL |
+-----------+--------------------------+

(2)查询字段指定别名
把语文,数学,英语之和的列叫total
别列指定了别名,其中as可以省略

mysql> select name,chinese + math + english as total from exam_result;
+-----------+-------+
| name      | total |
+-----------+-------+
| 张三      | 200.1 |
| 李四      | 204.0 |
| 王丹丹    | 222.9 |
| 张图      | 228.5 |
| 张九九    | 199.7 |
| 尚是      | 180.5 |
| 滴滴      | 204.8 |
| 张武      | 223.7 |
| 长都      | 230.4 |
| 李武      |  NULL |
+-----------+-------+

©查找姓名,在语文成绩上加十分mysql> select name,english + 10 from exam_result;

+-----------+--------------+
| name      | english + 10 |
+-----------+--------------+
| 张三      |         86.3 |
| 李四      |         66.3 |
| 王丹丹    |         75.8 |
| 张图      |        102.5 |
| 张九九    |         42.8 |
| 尚是      |         87.7 |
| 滴滴      |         66.3 |
| 张武      |         76.6 |
| 长都      |         74.3 |
| 李武      |        108.0 |
+-----------+--------------+
10 rows in set (0.00 sec)

经过表达式计算出现 108.6与原来的列数据类型不一致,这个时候是尽可能保证结果正确,数据类型可以变化

3.9删除一行

可以按照id删也可也按照名字删
即现在需要删掉第一行,使用第一行中id列的数值能删掉,使用name列也能删掉

mysql> delete  from exam_result where name = '李武';
Query OK, 1 row affected (0.01 sec)

3.10去重

去重之前的表

(a)删除math一列的重复值

mysql> select distinct math from exam_result;-- 针对数学一列去重
+------+
| math |
+------+
| 77.9 |
| 89.7 |
| 78.5 |
| 60.0 |
| 98.9 |
| 54.9 |
| 88.5 |
| 87.5 |
+------+
8 rows in set (0.04 sec)

(b)去重操作也能指定多列去重,此时就是要求指定的列都完全相同才会合并在一起

mysql> select distinct chinese ,math from exam_result;-- 假设第一行和第三行的语文,数学均相同的才能去重
+---------+------+
| chinese | math |
+---------+------+
|    45.9 | 77.9 |
|    58.0 | 89.7 |
|    78.6 | 78.5 |
|    76.0 | 60.0 |
|    68.0 | 98.9 |
|    47.9 | 54.9 |
|    60.0 | 88.5 |
|    78.6 | 87.5 |
+---------+------+
8 rows in set (0.00 sec)

(语文和数学都一样的那一行才能被去重,)
①去重操作.得到的结果表的行数和原来的可能不一样,
②大部分的select操作的结果无法和原来的表的记录一一对应
select得到的结果也相当于一张表(Mysql构造的一个临时表)
③使用distinct的时候,必须把对应的列都放到distinct之后
④所有的select操作对原来的表都不会造成影响,只是把查找出来的结果里出现的重复值删了,基于原来的表生成结果表
要想修改使用insert,update,delete等操作

3.11order by 指定列进行

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值