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)
相关推荐
oradh10 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z1234567898611 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD11 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
TlSfoward12 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记12 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
LabVIEW开发13 小时前
NI Package Manager安装LabVIEW时InternalServerError错误
网络·数据库·labview·labview知识·labview功能·labview程序
SelectDB13 小时前
PostgreSQL 实时同步到 Apache Doris:一站式 CDC 解决方案
数据库
欲速不达882013 小时前
Mysql并发DML锁等待的优化
数据库·mysql
Database_Cool_13 小时前
AI Agent 长期记忆怎么存?阿里云 PolarDB-X 对接 Mem0 记忆框架实践
数据库·阿里云
会编程的土豆14 小时前
数据库范式
数据库·oracle