数据库层面基本操作
显示当前的数据库
show databases;
里面包含了:
information_schema,
mysql,
niceff....等数据库
创建数据库
create database 数据库名;
直接创建
create database if not exists 数据库名;
使用数据库
use 数据库名;
使用use + 数据库名,进入到当前数据库:
删除数据库
drop database 数据库名;drop database if exists 数据库名;
删除数据库是一个非常危险的行为,一定要谨慎再谨慎(删除表同样危险),数据库一旦删除,里面的表和数据也会被全部删除.
常用数据类型
int:整型
decimal(M, D):浮点数类型
varchar(SIZE):字符串类型
timestamp:日期类型
表的操作
如果需要对某一个数据库里面的表进行操作,首先需要使用改数据库,也就是使用use + 数据库名的形式
创建表
create table 表名(field1 dataType, field2 dataType, field3 dataType, ..........);例如:
也可以使用comment增加字段说明:
查看表的结构
desc 表名;
desc为describe的缩写,意为描述.
注意:describe为MySQL中的关键字,如果使用describe 表名的结构会创建失败
删除表
drop table 表名;drop table if exists 表名;
注释
在SQL中可以使用“--空格+描述”来表示注释说明
例如:
练习
有一个商店的数据,记录客户及购物情况,有以下三个表组成:
- 商品goods(商品编号goods_id,商品名goods_name, 单价unitprice, 商品类别category, 供
应商provider)
- 客户customer(客户号customer_id,姓名name,住址address,邮箱email,性别sex,身份证
card_id)
- 购买purchase(购买订单号order_id,客户号customer_id,商品号goods_id,购买数量nums)
create database datas default character set utf8;
use datas;
create table if not exists goods
(
goods_id int comment '商品编号',
goods_name varchar(32) comment '商品名称',
unitprice int comment '商品价格',
category varchar(50) comment '商品类别',
provider varchar(50) comment '供应商'
);
create table if not exists customer
(
customer_id int comment '客户号',
name varchar(50) comment '姓名',
address varchar(100) comment '住址',
email varchar(50) comment '邮箱',
sex varchar(20) comment '性别',
card_id varchar(20) comment '身份证'
);
create table if not exists purchase
(
order_id varchar(20) comment '订单号',
customer_id int comment '客户号',
goods_id varchar(20) comment '商品号',
nums int comment '购买数量'
);
表的增删改查
表的增删改查也称作CRUD:
CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写
增
使用insert into语句:
insert into 表名 values(value1, value2, value3, ..... );
首先新建一个表:
如下:
单行插入
insert into 表名 values( value1, value2, value3, ..... );
写入的参数必须和创建表的时候的数据参数顺序一致;
全列插入
insert into 表名 values( value1, value2, value3, ..... ), ( value1, value2, value3, .....);
写入的参数必须和创建表的时候的数据参数顺序一致;
指定参数顺序插入
insert into 表名(valueA, valueB, valueC,......) values(valueA, valueB, valueC,......)
name 为varchar类型的数据,id为int类型的数据,所以在插入记录的时候,首先需要按顺序输入name的参数,然后输入id的参数.
多行和单行插入的性能对比
由于MySQL是一个'客户端服务器'结构的程序, 在MySQL中使用insert into语句的时候,会向服务器发送一次请求, 那么如果是多行输入, 只需要一次请求就可以插入多行记录, 如果是单行输入,那么多行记录就只能向服务器请求多次, 所以多行插入的性能消耗是比单行出入少的.
时间类型的插入
在ret数据库中创建一个表,表名为homework:
往这个homework里面插入数据(记录),使用特定格式字符串:
形如:
'2023-02-20 17:21:00'
自定义输入时间
例如:
insert into homework values(1,'2023-02-20 17:21:00');
设置为当前时间
假如我想直接输入当前的时间,该怎么做? MySQL提供了一个特殊的函数: now()
例如:
insert into homework values(2, now());
查
使用select语句
全列查找
select*from 表名;
'*' 表示所有列,这种符号在计算机当中称为'通配符', 通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符
例如:
话说回来,MySQL是一个'客户端服务器'结构的程序, 如果当select* 时数据量过大, 单个数据通道的传输的数据量就会变大, 这就会沾满硬盘带宽或者影响网络的使用.
指定列查询
select 列名1,列名2,列名3...... from 表名;
例如:
表达式查询
(以下查找都是基于列与列之间的计算)
创建一个表(exam_result):
插入:
(1, '张三', 67, 98, 56),
(2, '李四', 87.5, 78, 77),
(3, '王五', 88, 98.5, 90)
不包含字段
一个字段
如果要对chinese + 10 的方式进行查询,如下
select name, chinese + 10 from exam_result;
结果如上.
多个字段
或者查询chinese,matzh,english的综合成绩:
select name, chinese + math + english from exam_result;
查询对原数据是否有影响
但是我们当前存储的结果是否发生改变?
再次全列查找,发现原始的数据是没有发生改变的.
MySQL是一个'客户端服务器'结构的程序, 此时用户输入的sql, 通过请求发送给服务器,服务器解析并执行sql, 把查询的结果从硬盘上读取出来,然后用网络的形式响应, 返还给用户, 客户端再把这些数据以临时表的形式展现出来.所以不会改变原来的数据.
有时候这种chinese + math + english的表达式在理解上可能不够直观,需要进行简化:可以在查询的时候指定别名,指定别名相当于给这个chinese + math + english取了一个小名,让它理解起来更加容易.
使用:全名 as 小名的方式
select chinese + math + english as 小名
select chinese + math + english as total from exam_result;
当小名为中文的时候,不需要加上单引号或者双引号.
MySQL数据库操作-2