• SQL语句


    库、表、记录的概念

    库(Database):库是一个容器,用于存储表和其他对象(如视图、存储过程等)

    表(Table):表是一个由列和行组成的矩阵,其中每列都定义了表中的一种数据类型,每行则表示表中的一个记录。

    记录(Record):记录是表中的一行数据。

    -------------------------------------------------------------------------------------------------------------------

    修改数据库表中的字段

    【1】添加新的字段

    1. alter table 表名 add 新字段名(列名) 数据类型;
    2. alter table person add teacher varchar(255);

    image-20240128213426147

    【2】修改字段的数据类型

    1. alter table 表名 modify 字段名(列名) 新数据类型;
    2. alter table person modify teacher varchar(200);

    image-20240128213914833

    【3】修改字段名(列名)

    1. alter table 表名 change 旧字段名 新字段名 数据类型;
    2. alter table person change teacher teacher_name varchar(150);

    image-20240128214506451

    【4】删除字段

    1. alter table 表名 drop 字段名;
    2. alter table person drop teacher_name;

    image-20240128214626542

    【5】将新列中添加新

    update person set teacher = '某某老师' where teacher is null;

    image-20240128215654880

    1. update person set teacher = case
    2. when sex = '男' then '赵老师'
    3. when sex = '女' then '小猴老师'
    4. else teacher
    5. end;

    image-20240128215844608

    【6】插入新的字段

    1. insert into 表名 (列1, 列2, 列3, ...) values (值1, 值2, 值3, ...);
    2. insert into person (name, age, heigh, sex, teacher)
    3. values ('john', 30, 180, '男', '赵老师');

    image-20240128220828931

    查看数据库的信息

    • show用于显示数据库服务器状态或元数据信息。

    • desc用于描述表的结构,包括字段名、数据类型等。

    • select用于从数据库表中查询数据。

    SQL操作数据库基础

    查看所有的数据库

    show databases;

    创建数据库

    1. create database 数据库名字;
    2. create database today01;

    删除数据库

    1. drop database [if exists]数据库库名
    2. drop database today01

    更改数据库

    alter database 数据库名 character set 编码集;

    --------------------------------------------------------------------------------------

    查看所有表

    show tables;

    创建表

    1. create table 表名(
    2. username varchar(255),
    3.    password int(11)
    4. );
    5. # 1. create table 表名
    6. # 字段名 字段类型(字段长度)字段约束条件
    7. # 2. null / not null / zerofill
    8. # 3. 每个字段定义要用 , 隔开
    9. # 4. 最后一个点不能有符号结尾

    查看表的结构

    1. describe user;
    2. desc user;
    • Feild: 字段名称
    • Type: 字段类型
    • Null: 是否可以为空
    • Key: 是否为主键
    • Default:  默认值
    • Extra: 注释

    查看创建表语句

    1. show create table 表名;
    2. show create table user;
    3. show create table user \g;
    4. show create table user \G;

    删除表

    drop table 表名

    修改表

    1. alter table 表名 modify 字段名 字段类型;
    2. alter table user modify password char;

    重置表的信息

    truncate table 表名;

    ----------------------------------------------------------------------------------------------

    插入数据

    1. insert into 表名(字段1,字段2values(字段值1,字段值2);
    2. insert inot 表名 values(字段值1,字段值2); -- 只能按照字段位置插入
    3. insert into user(id,username,password) values(1,'mao','');
    4. insert inot user values(2,'jing','123');

    查询数据

    查看当前表下面的所有数据

    select * from 表名;

    查询当前表下面的指定字段的数据

    1. select 字段名 from 表名;
    2. select username from user;

    更改数据

    1. updata 表名 set 需要更改的值 where 筛选条件;
    2. updata user set username where id =2;

    删除数据

    1. delete from 表名 where 筛选条件
    2. delete user set username where id =2;

    【1】创建数据库

    1. MySQL:

      1. 使用MySQL命令行工具,可以按如下方式创建数据库:
      2. mysql -u username -p
      3. # 输入密码后登录到MySQL
      4. CREATE DATABASE database_name;
      5. 其中,username是你的MySQL用户名,database_name是要创建的数据库名称。

    2. PostgreSQL:

      使用PostgreSQL命令行工具,可以按如下方式创建数据库:

      bashCopy Codecreatedb -U username database_name

      其中,username是你的PostgreSQL用户名,database_name是要创建的数据库名称。

    3. SQLite:

      使用SQLite命令行工具,可以按如下方式创建数据库:

      bashCopy Codesqlite3 database_name.db

      其中,database_name是要创建的数据库文件名。

    我这里用MySQL数据库来作示例

    1. create database 数据库名;
    2. create database today01

    image-20240123213831530

    【2】查看数据库

    show databases;

    image-20240123213923000

    查看指定库:

    show create database bai;

    image-20240123214402850

    查看当前数据库的字符集和排序规则:

    1. SELECT DEFAULT_CHARACTER_SET_NAME,
    2. DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'bai';

    image-20240123215449567

    【3】修改数据库

    (1)

    语法:

    alter database 数据库名 [character set 编码字符集];

    示例:

    这将显示数据库 "bai" 的默认字符集和排序规则

    alter database bai character set utf8mb4 collate utf8mb4_unicode_ci;

    image-20240123215707881

    (2)

    alter database db2 charset set ='utf8';

    image-20240123220332978

    【4】删除数据库

    1. drop database 数据库名字;
    2. -- 判断当前数据库是否存在,如果存在则删除
    3. drop database if exists 数据库名字;

    image-20240123220708547

    切换数据库

    【1】切换数据库

    use 数据库名字;

    image-20240123220943474

    【2】查看当前数据库所在的名字

    select database();

    image-20240123221105028

    【3】查看当前数据库下的所有库

    show tables;

    image-20240123221236666

    【4】创建数据库下面的表

    1. create table 表名(
    2. 字段名1 数据类型1[(存储空间) 字段约束],
    3.   字段名2 数据类型2[(存储空间) 字段约束]
    4. );
    5. create table users(
    6. id int primary key,
    7. name varchar(50),
    8. age int
    9. );
    10. create table user (
    11. username varchar(255),
    12.    password varchar(255)
    13. );

    image-20240123221749675

    我创建了两个table表

    【5】查看当前表的详细信息

    1. describe 表名;
    2. desc 表名;
    3. desc user;

    image-20240123221954492

    • 查看我创建的表的语句

      1. show create table 表名 \G;
      2. show create table user \G;

      image-20240123222200604

    【6】修改表的字段

    1. alter table 表名 modify 字段名 字段类型;
    2. alter table user modify passowrd int(4);

    image-20240123222536812

    【7】删除表

    1. drop table 表名;
    2. drop table user;

    image-20240123111150632

    插入表中的数据

    【1】插入数据

    1. insert 表名(字段名) values(值)
    2. create table user2 (
    3.     username varchar(32),
    4.     password varchar(32)
    5. );
    insert users(username,password) values("maojing","1314");

    image-20240123223935675

    【2】查看表中的数据

    select * from user;

    image-20240123224320181

    【3】更改表中的数据

    update 表名 set 需要改的数据 where 筛选条件;

    这个是更改一个

    update user set password="123" where username="tian";

    这个是更改两个

    UPDATE user SET password = '520' WHERE username IN ('tian', 'maojing');
     
    

    【4】删除数据

    1. -- 按照指定条件删除数据
    2. delete from 表名 where 筛选条件;
     
    
    1. -- 直接清空表
    2. delete from 表名;
    delete from user where username="dream";

    image-20240123112005428


    【一】什么是存储引擎

    存储引擎是数据库系统中负责管理数据的核心组件之一。它定义了数据库如何在磁盘上存储和访问数据。

    • 日常生活中文件格式有很多,并且针对不同的文件格式会有对应不同的存储方式和处理机制

    • 针对不同的数据应该有对应的不同的处理机制

    存储引擎就是不同的处理机制

    【二】MySQL主要的存储引擎

    • InnoDB(默认引擎):

      • 支持事务处理,具有ACID(原子性、一致性、隔离性和持久性)特性。

      • 支持行级锁定,提供高并发性能。

      • 支持外键约束和关联关系。

      • 支持崩溃恢复和故障转移。

      • 使用聚簇索引来加速查询。

    • MyISAM:

      • 不支持事务处理,不具备ACID特性。

      • 支持表级锁定,对于并发性能较差。

      • 不支持外键约束和关联关系。

      • 适用于读密集型应用,如数据仓库、报告等。

      • 以表文件的形式存储数据,易于备份和迁移。

    • Memory(也称为Heap):

      • 将表数据存储在内存中,速度非常快。

      • 不支持事务处理,不具备持久性。

      • 表数据在服务器重启后会丢失。

      • 适用于临时数据存储、缓存或者需要高速读写操作的场景。

    • blackhole (黑洞引擎)

      • 无论存什么都会立刻消失

    【三】如何查看数据库引擎

    show engines;

    image-20240123230017799

    【四】不同引擎下的表的特性

    【1】创建表

    1. create table user1(id int) engine=innodb;
    2. create table user2(id int) engine=myisam;
    3. create table user3(id int) engine=blackhole;
    4. create table user4(id int) engine=memory;

    image-20240123230205422

    (1)Innodb

    • user1.frm

      • 表结构

    • user1.ibd

      • 表结构

    Innodb:默认的引擎

    (2)myisam

    • user2.frm

      • 表结构

    • user2.MYD

      • 表数据

    • user2.MYI

      • 索引(index),类似于书的目录,基于目录查找数据的速度会很快

    myisam:数据具有索引,读取数据快

    (3)blackhole
    • user3.frm

      • 表结构

    blackhole:黑洞引擎,存什么数据都会消失

    (4)memory
    • user4.frm

      • 表结构

    memory:数据缓存到内存

    【2】插入数据

    1. insert into user1 values(123);
    2. insert into user2 values(123);
    3. insert into user3 values(123);
    4. insert into user4 values(123);

    image-20240123230632408

    【3】查看数据

    1. select * from user1;
    2. select * from user2;
    3. select * from user3;
    4. select * from user4;

    image-20240123230820719

    除了黑洞引擎都存在数据

    memory 数据是存在内存中的,如何印证?

    • 重启mysql服务


    【一】创建表的完整语法

    1. create table 表名 (
    2. 字段名 字段类型(宽度) 约束条件
    3. );
    4. -- 最后一个字段不能以 , 结尾
    5. -- 字段名和字段类型是必须的条件
    1. CREATE TABLE 表的名称 (    
    2.   column1 datatype constraint,
    3.   # 字段名 字段类型(宽度) 约束条件
    4.   column2 datatype constraint  
    5.   ...  
    6.    CONSTRAINT constraint_name,  
    7.    # 是对列的约束条件
    8.   ... ) ENGINE = storage_engine;
    9.    # 存储引擎
    • 约束条件可选,约束条件可以写多个

      1. 表的名称:替换为你想要创建的表的名称。
      2. column1、column2:替换为表中的列名。
      3. datatype:替换为对应列的数据类型。
      4. constraint:替换为对列的约束条件。
      5. constraint_name:替换为约束条件的名称。
      6. storage_engine:替换为你想要使用的存储引擎,如 InnoDB、MyISAM 等。

    【二】基础语法

    1. -- 这三个条件必须存在
    2. create table 表名(
    3.   字段名 字段类型
    4. );

    create table user(id int);

    image-20240123231806064

    【三】什么是宽度

    • 一般情况下指的是对存储数据的限制

      • 默认宽度为 1(只能存一个字符)

    • 创建表

    create table user7(name char);

    image-20240123232427619

    • 查看表的详细信息

    1. desc user7;
    2. desc bai7;

    image-20240123232758663

    【四】null 和 not null

    • not null 约束当前字段条件不能为空

    1. insert user8 values(123,'d');
    2. insert user8 values('a');
    3. create table usr8(id int,name char not null);

    image-20240123233154820

    【五】严格模式

    本质上是为了约束我们sql语法规范的,我们可以不按照约束做事,修改他的约束。

    %:匹配任意个字符

    _:匹配当前字符

    【1】查看严格模式

    show variables like "%mode";

    image-20240123233259363

    【2】修改严格模式

    • 全局生效

    1. set global sql_mode = 'ONLY_FULL_GROUP_BY,
    2. STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,
    3. NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,
    4. NO_AUTO_CREATE_USER,NO_EN'
    • 只对当前窗口生效

    1. set session sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,
    2. NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,
    3. NO_AUTO_CREATE_USER,NO_EN'

    【3】严格模式到底开启还是不开启

    • 5.7 之后的版本默认都是开启严格模式的

    • 尽量减轻数据库的负担,不给数据库增加额外的压力

  • 相关阅读:
    selenium--关闭窗口,指定窗口大小,前进,后退,刷新等等
    webpack之代码分离
    React Redux应用示例详解
    Python里的引用与拷贝规律
    【python】基础语法(三)--异常、模块、包
    抖音播映量破500的原因找到了,不是内容不好,而是这5个功能
    Packet Tracer - 在 VTY 线路上配置 ACL
    5、继承与抽象-typescript
    【笔记】回顾JavaWeb结合自身开发的项目——分层解耦与IOC、MySQL简单查询
    机器学习——Logistic Regression
  • 原文地址:https://blog.csdn.net/m0_58310590/article/details/135934973