SQL语句

库、表、记录的概念

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

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

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

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

修改数据库表中的字段

【1】添加新的字段

sql 复制代码
alter table 表名 add 新字段名(列名) 数据类型;


alter table person add teacher varchar(255);

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

sql 复制代码
alter table 表名 modify 字段名(列名) 新数据类型;


alter table person modify teacher varchar(200);

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

sql 复制代码
alter table 表名 change 旧字段名 新字段名 数据类型;


alter table person change teacher teacher_name varchar(150);

【4】删除字段

sql 复制代码
alter table 表名 drop 字段名;


alter table person drop teacher_name;

【5】将新列中添加新

sql 复制代码
update person set teacher = '某某老师' where teacher is null;
sql 复制代码
update person set teacher = case 

    when sex = '男' then '赵老师'

    when sex = '女' then '小猴老师'

    else teacher

end;

【6】插入新的字段

sql 复制代码
insert into 表名 (列1, 列2, 列3, ...) values (值1, 值2, 值3, ...);


insert into person (name, age, heigh, sex, teacher) 
values ('john', 30, 180, '男', '赵老师');

查看数据库的信息

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

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

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

SQL操作数据库基础

查看所有的数据库

sql 复制代码
show databases;

创建数据库

sql 复制代码
create database 数据库名字;

create database today01;

删除数据库

sql 复制代码
drop database [if exists]数据库库名

drop database today01

更改数据库

sql 复制代码
alter database 数据库名 character set 编码集;

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

查看所有表

sql 复制代码
show tables;

创建表

sql 复制代码
create table 表名(

    username varchar(255),

    password int(11)
);

# 1. create table  表名

#  字段名  字段类型(字段长度)字段约束条件

# 2. null / not null / zerofill

# 3. 每个字段定义要用 , 隔开

# 4. 最后一个点不能有符号结尾

查看表的结构

sql 复制代码
describe user;


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

查看创建表语句

sql 复制代码
show create table 表名;

show create table user;

show create table user \g;

show create table user \G;

删除表

sql 复制代码
drop table 表名

修改表

sql 复制代码
alter table 表名 modify 字段名 字段类型;

alter table user modify password char;

重置表的信息

sql 复制代码
truncate table 表名;

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

插入数据

sql 复制代码
insert into 表名(字段1,字段2) values(字段值1,字段值2);

​
insert inot 表名 values(字段值1,字段值2); -- 只能按照字段位置插入


insert into user(id,username,password) values(1,'mao','');


insert inot user values(2,'jing','123');

查询数据

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

sql 复制代码
select * from 表名;

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

sql 复制代码
select 字段名 from 表名;


​
select username from user;

更改数据

sql 复制代码
updata 表名 set 需要更改的值 where 筛选条件;


updata user set username where id =2;

删除数据

sql 复制代码
delete from 表名 where 筛选条件


delete user set username where id =2;

【1】创建数据库

  1. MySQL:

    sql 复制代码
    使用MySQL命令行工具,可以按如下方式创建数据库:
    
    mysql -u username -p
    
    
    # 输入密码后登录到MySQL
    ​
    CREATE DATABASE database_name;
    
    
    
    其中,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数据库来作示例

sql 复制代码
create database 数据库名;


create database today01

【2】查看数据库

sql 复制代码
show databases;

查看指定库:

sql 复制代码
show create database bai;

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

sql 复制代码
SELECT DEFAULT_CHARACTER_SET_NAME, 
DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'bai';

【3】修改数据库

(1)

语法:

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

示例:

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

sql 复制代码
alter database bai character set utf8mb4 collate utf8mb4_unicode_ci;

(2)

sql 复制代码
alter database db2 charset set ='utf8';

【4】删除数据库

sql 复制代码
drop database 数据库名字;


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

切换数据库

【1】切换数据库

sql 复制代码
use 数据库名字;

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

sql 复制代码
select database();

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

sql 复制代码
show tables;

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

sql 复制代码
create table 表名(
    字段名1 数据类型1[(存储空间) 字段约束],
    字段名2 数据类型2[(存储空间) 字段约束]
);



create table users(
    id int primary key,
    name varchar(50),
    age int
);



create table user (
    username varchar(255),
    password varchar(255)
);

我创建了两个table表

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

sql 复制代码
describe 表名;


​
desc 表名;



desc user;
  • 查看我创建的表的语句

sql 复制代码
show create table 表名 \G;



show create table user \G;

【6】修改表的字段

sql 复制代码
alter table 表名 modify 字段名 字段类型;



alter table user modify passowrd int(4);

【7】删除表

sql 复制代码
drop table 表名;


drop table user;

插入表中的数据

【1】插入数据

sql 复制代码
insert 表名(字段名) values(值)


create table user2 (
     username varchar(32),
     password varchar(32)
);
sql 复制代码
insert users(username,password) values("maojing","1314");

【2】查看表中的数据

sql 复制代码
select * from user;

【3】更改表中的数据

sql 复制代码
update 表名 set 需要改的数据 where 筛选条件;

这个是更改一个

sql 复制代码
update user set password="123" where username="tian";

这个是更改两个

sql 复制代码
UPDATE user SET password = '520' WHERE username IN ('tian', 'maojing');
复制代码

【4】删除数据

sql 复制代码
-- 按照指定条件删除数据
delete from 表名 where 筛选条件;
复制代码
sql 复制代码
-- 直接清空表
delete from 表名;
sql 复制代码
delete from user where username="dream";

【一】什么是存储引擎

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

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

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

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

【二】MySQL主要的存储引擎

  • InnoDB(默认引擎):

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

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

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

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

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

  • MyISAM:

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

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

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

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

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

  • Memory(也称为Heap):

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

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

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

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

  • blackhole (黑洞引擎)

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

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

sql 复制代码
show engines;

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

【1】创建表

sql 复制代码
create table user1(id int) engine=innodb;
create table user2(id int) engine=myisam;
create table user3(id int) engine=blackhole;
create table user4(id int) engine=memory;

(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】插入数据

sql 复制代码
insert into user1 values(123);
insert into user2 values(123);
insert into user3 values(123);
insert into user4 values(123);

【3】查看数据

sql 复制代码
select * from user1;
select * from user2;
select * from user3;
select * from user4;

除了黑洞引擎都存在数据

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

  • 重启mysql服务

【一】创建表的完整语法

sql 复制代码
create table 表名 (
    字段名 字段类型(宽度) 约束条件
);
​
-- 最后一个字段不能以 , 结尾
-- 字段名和字段类型是必须的条件
sql 复制代码
CREATE TABLE 表的名称 (    
    column1 datatype constraint, 
   # 字段名 字段类型(宽度) 约束条件
    column2 datatype constraint   
    ...   
    CONSTRAINT constraint_name,  
    # 是对列的约束条件
    ... ) ENGINE = storage_engine;
    # 存储引擎
  • 约束条件可选,约束条件可以写多个

sql 复制代码
表的名称:替换为你想要创建的表的名称。

column1、column2:替换为表中的列名。

datatype:替换为对应列的数据类型。

constraint:替换为对列的约束条件。

constraint_name:替换为约束条件的名称。

storage_engine:替换为你想要使用的存储引擎,如 InnoDB、MyISAM 等。

【二】基础语法

sql 复制代码
-- 这三个条件必须存在
create table 表名(
    字段名 字段类型
);
sql 复制代码
create table user(id int);

【三】什么是宽度

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

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

sql 复制代码
create table user7(name char);
  • 查看表的详细信息
sql 复制代码
desc user7;
desc bai7;

【四】null 和 not null

  • not null 约束当前字段条件不能为空
sql 复制代码
insert user8 values(123,'d');
insert user8 values('a');
create table usr8(id int,name char not null);

【五】严格模式

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

%:匹配任意个字符

_:匹配当前字符

【1】查看严格模式

sql 复制代码
show variables like "%mode";

【2】修改严格模式

  • 全局生效
sql 复制代码
set global sql_mode = 'ONLY_FULL_GROUP_BY,
STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,
NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,
NO_AUTO_CREATE_USER,NO_EN'
  • 只对当前窗口生效
sql 复制代码
set session sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,
NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,
NO_AUTO_CREATE_USER,NO_EN'

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

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

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

相关推荐
夜光小兔纸5 分钟前
Oracle 普通用户连接hang住处理方法
运维·数据库·oracle
兩尛2 小时前
订单状态定时处理、来单提醒和客户催单(day10)
java·前端·数据库
web2u2 小时前
MySQL 中如何进行 SQL 调优?
java·数据库·后端·sql·mysql·缓存
Elastic 中国社区官方博客3 小时前
使用 Elasticsearch 导航检索增强生成图表
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
小金的学习笔记3 小时前
RedisTemplate和Redisson的使用和区别
数据库·redis·缓存
新知图书3 小时前
MySQL用户授权、收回权限与查看权限
数据库·mysql·安全
文城5213 小时前
Mysql存储过程(学习自用)
数据库·学习·mysql
沉默的煎蛋3 小时前
MyBatis 注解开发详解
java·数据库·mysql·算法·mybatis
呼啦啦啦啦啦啦啦啦3 小时前
【Redis】事务
数据库·redis·缓存
HaoHao_0103 小时前
AWS Serverless Application Repository
服务器·数据库·云计算·aws·云服务器