sql基础操作

文章目录


前言

本文主要描写了sql的一些基础指令

一、数据库操作

1.1查看数据库------查看当前有哪些库

  • 查看数据库通过 SHOW DATABASES;语句实现,其语法是:SHOW DATABASES;

1.2新建数据库

  • 创建数据库通过 CREATE DATABASE 语句实现,其语法是:
  • CREATE DATABASE [ IF NOT EXISTS ] db_name
  • DEFAULT\] CHARACTER SET \[=\] charset_name;

  • 如果数据库存在,且没有指定IF NOT EXISTS,则会出现错误。
  • 数据库名要求
  • 数字、字母、下划线,但不能使用纯数字
  • 不要使用特殊字符和mysql关键字

1.3打开数据库

• 打开数据库是通过 USE 语句实现,其语法是:

• USE db_name;


1.4删除数据库

  • 删除数据库通过 DROP DATABASE 语句实现,其语法是:
  • DROP DATABASE [ IF EXISTS ] db_name;
  • 说明:如果数据库不存在,且没有指定IF EXISTS时,则会出现错误

1.5练习

  • 查看已有库
  • 创建stu 数据库
  • 打开stu 数据库
  • 删除stu 数据库
sql 复制代码
#查看已有库
show database;
#创建stu 数据库
create database stu;
#打开stu 数据库
use stu;
#删除stu 数据库
drop database if exists stu;

二、数据类型

数据类型可以分为:

  • 数值型
  • 字符型
  • 日期时间
  • 其他常用类型

2.1数值型数据

2.1.1INT/INTEGER

  • INT/INTEGER [(M)] [UNSIGNED] [ZEROFILL] ,占4个字节
  • 有符号范围:-2147683648 到2147683647 (约±21亿)
  • 无符号范围:0到4294967295 (约43亿)
  • M 表示最大显示宽度,当与扩展属性 ZEROFILL 组合时才有意义,此时左边自动补零。

2.1.2FLOAT

  • FLOAT称为单精度浮点(single-precision),其表示方法如下:
  • FLOAT [(M,D)] [UNSIGNED] [ZEROFILL]
  • M表示数字的位数,D表示小数点后的数字位数,如果省略M和D,其
  • 精度取决于硬件系统。FLOAT最多可以精确到小数点后的7位数字。

2.2字符型数据

2.2.1CHAR

  • CHAR [(M)] 50 可修改
  • 固定长度的字符串,其存储时右侧总是以空格填充。
  • M代表字符数的最大长度。M的范围是0到255;如果省略M,则默认长度为1。

2.2.2VARCHAR

  • VARCHAR (M)
  • 变长字符串,其中M表示字符数的最大长度,M取值范围为0到65535
  • VARCHAR的有效性长度受到字符集的影响;

2.3日期型

2.3.1DATE

  • 日期类型,DATE的格式为YYYY-MM-DD
  • 支持的范围为1000-01-01 ~ 9999-12-31。

2.3.2TIME

  • 时间类型,TIME的格式为 HH:MM:SS。
  • 支持的范围为-838:59:59.999999 ~ 838:59:59.999999;

2.3.3DATETIME

  • 日期时间型,DATETIME的格式为 YYYY-MM-DD HH:MM:SS.ffffff
  • DATETIME支持的范围为 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 ;

三、数据表

  • 数据表(Table)是二维表格,由行(row)和列(column)组成,用于存储数据。一张数据表中至少包含一列,但是可以包含至少零行。

3.1数据表与数据库的关系

数据库是一个容器,它由数据表、存储过程、索引、触发器、用户等对象组成。

数据表是数据库的重要组成部分。每一个数据库都是由若干个数据表组成。数

据库与数据表的关系就像Excel工作簿与工作表的关系一样。

  • 建表前基本思考过程:
  1. 确定存储内容
  2. 明确字段构成
  3. 确定字段数据类型

四、数据表操作


4.1创建数据表

  • 创建数据表方法:

  • 指定表结构:

  • 创建数据表通过 CREATE TABLE 语句实现,其语法是:

    CREATE TABLE [ IF NOT EXISTS ] table_name (

    column_name data_type

    , ...

    );

  • 导入文件

  • LOAD DATA报错处理:

  • 若MySQL服务为Windows系统下安装,执行LOAD DATA命令可能会报错:

    将文件放到C:\ProgramData\MySQL\MySQL Server 8.0\Uploads下再执行

  • 若使用DBeaver连接数据库时报错Public Key Retrieval is not allowed

    编辑数据库连接->编辑驱动设置->默认属性->右键添加新属性- >allowPublicKeyRetrieval,值写为true


4.2练习

• 创建classs数据表(字段为id、name、age、sex、score)

• 导入sales.csv 文件

sql 复制代码
create table class1(
   id int,
   name1 char(10),
   age int,
   sex char(5),
   score float
);

4.3修改数据表

4.3.1添加字段(add)

  • alter table 表名 add 字段名 数据类型;
  • alter table 表名 add 字段名 数据类型 first;
  • alter table 表名 add 字段名 数据类型 after 字段名;

4.3.2 删除字段(drop)

  • alter table 表名 drop 字段名;

4.3.3修改数据类型(modify)

  • alter table 表名 modify 字段名 新数据类型;

4.3.4 替换字段(change)

  • alter table 表名 change 旧字段名 新字段名 新数据类型;

4.4删除数据表

  • 删除数据库通过 DROP TABLE 语句实现,其语法是:
  • DROP TABLE [ IF EXISTS ] table_name;
  • 说明:如果数据库不存在,且没有指定IF EXISTS时,则会出现错误

4.5练习

• 在class1 表最后插入city 列,类型为 int

• 在class1 表第一列插入country列 ,类型为 varchar(20)

• 在class1 表sex 后插入level_type 列 类型 int

• 把class1 表的level_type 列删除

• 把class1 表city列类型改为varchar(10)

• 把class1 表sex列名改为 gender

• 删除class1表

sql 复制代码
create database stu;

use stu;
drop database if exists stu;
create table class1(
   id int,
   name1 char(10),
   age int,
   sex char(5),
   score float
);
# 在class1 表最后插入city 列,类型为 int
alter table class1 add city int;


#• 在class1 表第一列插入country列 ,类型为 varchar(20)
alter table class1 add country varchar(20) first;


#• 在class1 表sex 后插入level_type 列 类型 int
alter table class1 add level_type int after sex;


#• 把class1 表的level_type 列删除
alter table class1 drop level_type;

#• 把class1 表city列类型改为varchar(10)
alter table class1  modify city varchar(10);


#• 把class1 表sex列名改为 gender
alter table class1 change sex gender varchar(5);

#• 删除class1表

drop table class1;

六、数据操作


6.1插入数据

  • 插入记录通过INSERT语句实现,其语法如下:
  • INSERT [INTO] table [(column_name,...)] VALUES
  • ({expr|DEFAULT},...),(...),...
  • 说明:
  • INSERT语句用于插入记录,并且返回被插入的行数(记录数);
  • 如果省略字段列表,那么必须为所有字段依次赋值;
  • 字段值的数量、顺序、数据类型必须与字段的数量、顺序、数据类型完全匹配;空值用NULL表示
  • 默认值用DEFAULT表示

6.2练习

  • 向class表中插入3条记录
    -- (1,"Lily",18,'f',89), -- (2,"Lucy",18,'f',76), -- (3,"Tom",17,'m',83)
  • 向class表中插入3条记录
    -- ("Levi",18,'m',86), -- ("Sunny",17,'m',91), -- ("Eva",17,'f',71)
  • 通过load data指令向class表中添加记录
sql 复制代码
#• 向class表中插入3条记录
#-- (1,"Lily",18,'f',89), -- (2,"Lucy",18,'f',76), -- (3,"Tom",17,'m',83)
insert into class1(id,name1, age,sex,score)
values(1,"Lily",18,'f',89),
	  (2,"Lucy",18,'f',76),
      (3,"Tom",17,'m',83);


#• 向class表中插入3条记录
#-- ("Levi",18,'m',86), -- ("Sunny",17,'m',91), -- ("Eva",17,'f',71)

insert into class1(name1,age,sex,score)
values("Levi",18,'m',86),
      ("Sunny",17,'m',91),
      ("Eva",17,'f',71);

#• 通过load data指令向class表中添加记录

6.3综合练习

  • 创建一个数据库 exercise
  • 创建一个数据表 books 类型自己设计字段名如下,字段 : id(id) 书名(bname)
    作者(author) 出版社(press) 价格(price) 备注(common)
  • 插入如下6条记录
    (1,"边城", "沈从文", "机械工业出版社",36, "小城故事多"),
    (2,"骆驼祥子", "老舍", "机械工业出版社",43, "你是祥子么?"),
    (3,"茶馆","老舍","中国文学出版社",55,"老北京"),
    (4,"呐喊","鲁迅","人民教育出版社",71,"最后的声音"),
    (5,"朝花夕拾","鲁迅","中国文学出版社",53,"好时光"),
    (6,"围城","钱钟书","中国文学出版社",44,"你心中的围城是什么")
  • 插入如下两条记录
    (7,"林家铺子","茅盾","机械工业出版社",51),
    (8,"子夜","茅盾","人民教育出版社",47)
sql 复制代码
#• 创建一个数据库 exercise
create database exercise;

use exercise;

#• 创建一个数据表 books 类型自己设计字段名如下,字段 : id(id) 书名(bname)
#作者(author) 出版社(press) 价格(price) 备注(common)

create table books(
   id int,
   bname varchar(20),
   author char(50),
   press varchar(20),
   price float,
   common varchar(100)
);


#• 插入如下6条记录
#(1,"边城", "沈从文", "机械工业出版社",36, "小城故事多"),
#(2,"骆驼祥子", "老舍", "机械工业出版社",43, "你是祥子么?"),
#(3,"茶馆","老舍","中国文学出版社",55,"老北京"),
#(4,"呐喊","鲁迅","人民教育出版社",71,"最后的声音"),
#(5,"朝花夕拾","鲁迅","中国文学出版社",53,"好时光"),
#(6,"围城","钱钟书","中国文学出版社",44,"你心中的围城是什么")


insert into books
values(1,"边城", "沈从文", "机械工业出版社",36, "小城故事多"),
(2,"骆驼祥子", "老舍", "机械工业出版社",43, "你是祥子么?"),
(3,"茶馆","老舍","中国文学出版社",55,"老北京"),
(4,"呐喊","鲁迅","人民教育出版社",71,"最后的声音"),
(5,"朝花夕拾","鲁迅","中国文学出版社",53,"好时光"),
(6,"围城","钱钟书","中国文学出版社",44,"你心中的围城是什么");




#• 插入如下两条记录
#(7,"林家铺子","茅盾","机械工业出版社",51),
#(8,"子夜","茅盾","人民教育出版社",47)

insert books(id,bname,author,press,price)
values(7,"林家铺子","茅盾","机械工业出版社",51),
(8,"子夜","茅盾","人民教育出版社",47);

6.4修改数据

6.4.1修改案例

6.4.2语法

  • 更新记录通过UPDATE语句实现,其(单表更新)语法为:
    • UPDATE table SET column_name={expr|DEFAULT} [ ,... ]

    WHERE condition

    • 说明:
  1. UPDATE语句更新记录,并且返回被更新的行数(记录数)
  2. SET子句指明被更新的列及其列值,列值可以是表达式或者默认值
    (用DEFAULT表示)
  3. 如果省略WHERE子句,则更新全部记录

6.5练习

  • 把Lily改成19岁
  • 每人分数加5分
  • Sunny 性别为 f 分数为85
sql 复制代码
use stu;
SET SQL_SAFE_UPDATES = 0;
# • 把Lily改成19岁
update class1 set age=19 where name1="Lily";
# • 每人分数加5分
update class1 set score=score+5;
# • Sunny 性别为 f 分数为85
update class1 set sex="f" ,score=85 where name1="Sunny";
 
  • 补充综合训练:
    • 在价格字段后新增出版时间字段p_time
    • 修改所有老舍作品时间为2018-10-1
    • 修改所有中国文学出版社但作者不是老舍的作品出版时间2020-1-1
    • 修改所有出版时间为null的为2019-10-1
sql 复制代码
 use exercise;
 
 
 SET SQL_SAFE_UPDATES = 0;
 # • 在价格字段后新增出版时间字段p_time
 alter table  books add p_time date after price;
 
# • 修改所有老舍作品时间为2018-10-1
update books set p_time="2018-10-01" where author ="老舍";

# • 修改所有中国文学出版社但作者不是老舍的作品出版时间2020-1-1
update books set p_time="2020-10-01" where press="中国文学出版社" and  author<>"老舍";

# • 修改所有出版时间为null的为2019-10-1
update books set p_time="2019-10-1" where p_time is null;

6.6删除数据

6.6.1语法

  • 删除记录通过DELETE语句实现,其(单表删除)语法为:
    • DELETE FROM table [ WHERE condition ]
    • 说明:
  1. DELETE语句删除记录,并且返回被删除的行数(记录数);
  2. 如果省略WHERE条件,则删除全部记录

6.7练习

• 删除class里score大于90并sex为m

sql 复制代码
use stu;
# • 删除class里score大于90并sex为m

delete from  class1 where score>90 and sex="m";

6.8综合练习

• 练习 使用book表

• 1. 将呐喊的价格修改为45元

• 2. 增加一个字段出版时间 类型为 date 放在价格后面

• 3. 修改所有老舍的作品出版时间为 2018-10-1

• 4. 修改所有中国文学出版社出版的但是不是老舍的作品出版时间

为 2020-1-1

• 5. 修改所有出版时间为Null的图书 出版时间为 2019-10-1

• 6. 所有鲁迅的图书价格增加5元

• 7. 删除所有价格超过70元或者不到40元的图书

sql 复制代码
#• 1. 将呐喊的价格修改为45元
update books set price = 45 where bname="呐喊";

#• 2. 增加一个字段出版时间 类型为 date 放在价格后面
 # • 在价格字段后新增出版时间字段p_time
 alter table  books add p_time date after price;
 
# • 修改所有老舍作品时间为2018-10-1
update books set p_time="2018-10-01" where author ="老舍";

# • 修改所有中国文学出版社但作者不是老舍的作品出版时间2020-1-1
update books set p_time="2020-10-01" where press="中国文学出版社" and  author<>"老舍";

# • 修改所有出版时间为null的为2019-10-1
update books set p_time="2019-10-1" where p_time is null;
#• 6. 所有鲁迅的图书价格增加5元
update books set price=price+5 where author="鲁迅";

#• 7. 删除所有价格超过70元或者不到40元的图书*/

delete from books where price>70 or price<40;

七、总结

  • 数据库的创建、使用、删除、查看(DDL)
  • 数据表的创建、修改、删除(DDL)
  • 数据表操作插入记录、更新记录、删除记录(DML)
相关推荐
托尼吴18 分钟前
milvus 向量数据库学习笔记-基础认识
数据库·学习·milvus
徐同保19 分钟前
使用n8n中的HTTP Request节点清空pinecones向量数据库
数据库·网络协议·http
小北方城市网32 分钟前
第 9 课:Python 全栈项目性能优化实战|从「能用」到「好用」(企业级优化方案|零基础落地)
开发语言·数据库·人工智能·python·性能优化·数据库架构
ChineHe33 分钟前
Redis入门篇001_Redis简介与特性
数据库·redis·缓存
仓颉也为难33 分钟前
全表扫和索引在哪种场景哪个效率高、基线分水岭在哪
数据库
Anthony_23135 分钟前
MySql常用SQL命令
服务器·数据库·sql·mysql·http·oracle·udp
一直在追39 分钟前
大数据转型的“降维打击”:当分布式架构遇上向量数据库 (Milvus & ES 实战)
大数据·数据库
E_ICEBLUE44 分钟前
PPT 智能提取与分析实战:把演示文档变成结构化数据
数据库·python·powerpoint
困知勉行19851 小时前
Redis数据结构及其底层实现
数据库·redis·缓存
一直在追1 小时前
告别 WHERE id=1!大数据工程师的 AI 觉醒:手把手带你拆解向量数据库 (RAG 核心)
大数据·数据库