库、表、记录的概念
库(Database):库是一个容器,用于存储表和其他对象(如视图、存储过程等)
表(Table):表是一个由列和行组成的矩阵,其中每列都定义了表中的一种数据类型,每行则表示表中的一个记录。
记录(Record):记录是表中的一行数据。
-------------------------------------------------------------------------------------------------------------------
修改数据库表中的字段
【1】添加新的字段
alter table 表名 add 新字段名(列名) 数据类型;alter table person add teacher varchar(255);
【2】修改字段的数据类型
alter table 表名 modify 字段名(列名) 新数据类型;alter table person modify teacher varchar(200);
【3】修改字段名(列名)
alter table 表名 change 旧字段名 新字段名 数据类型;alter table person change teacher teacher_name varchar(150);
【4】删除字段
alter table 表名 drop 字段名;alter table person drop teacher_name;
【5】将新列中添加新
update person set teacher = '某某老师' where teacher is null;
update person set teacher = case when sex = '男' then '赵老师'when sex = '女' then '小猴老师'else teacherend;
【6】插入新的字段
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操作数据库基础
查看所有的数据库
show databases;
创建数据库
create database 数据库名字;create database today01;
删除数据库
drop database [if exists]数据库库名drop database today01
更改数据库
alter database 数据库名 character set 编码集;
--------------------------------------------------------------------------------------
查看所有表
show tables;
创建表
create table 表名(username varchar(255),password int(11)
);# 1. create table 表名# 字段名 字段类型(字段长度)字段约束条件# 2. null / not null / zerofill# 3. 每个字段定义要用 , 隔开# 4. 最后一个点不能有符号结尾
查看表的结构
describe user;desc user;
- Feild: 字段名称
- Type: 字段类型
- Null: 是否可以为空
- Key: 是否为主键
- Default: 默认值
- Extra: 注释
查看创建表语句
show create table 表名;show create table user;show create table user \g;show create table user \G;
删除表
drop table 表名
修改表
alter table 表名 modify 字段名 字段类型;alter table user modify password char;
重置表的信息
truncate table 表名;
----------------------------------------------------------------------------------------------
插入数据
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');
查询数据
查看当前表下面的所有数据
select * from 表名;
查询当前表下面的指定字段的数据
select 字段名 from 表名;
select username from user;
更改数据
updata 表名 set 需要更改的值 where 筛选条件;updata user set username where id =2;
删除数据
delete from 表名 where 筛选条件delete user set username where id =2;
【1】创建数据库
-
MySQL:
使用MySQL命令行工具,可以按如下方式创建数据库:mysql -u username -p# 输入密码后登录到MySQL CREATE DATABASE database_name;其中,username是你的MySQL用户名,database_name是要创建的数据库名称。
-
PostgreSQL:
使用PostgreSQL命令行工具,可以按如下方式创建数据库:
bashCopy Codecreatedb -U username database_name
其中,
username
是你的PostgreSQL用户名,database_name
是要创建的数据库名称。 -
SQLite:
使用SQLite命令行工具,可以按如下方式创建数据库:
bashCopy Codesqlite3 database_name.db
其中,
database_name
是要创建的数据库文件名。
我这里用MySQL数据库来作示例
create database 数据库名;create database today01
【2】查看数据库
show databases;
查看指定库:
show create database bai;
查看当前数据库的字符集和排序规则:
SELECT DEFAULT_CHARACTER_SET_NAME,
DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'bai';
【3】修改数据库
(1)
语法:
alter database 数据库名 [character set 编码字符集];
示例:
这将显示数据库 "bai" 的默认字符集和排序规则
alter database bai character set utf8mb4 collate utf8mb4_unicode_ci;
(2)
alter database db2 charset set ='utf8';
【4】删除数据库
drop database 数据库名字;
-- 判断当前数据库是否存在,如果存在则删除
drop database if exists 数据库名字;
切换数据库
【1】切换数据库
use 数据库名字;
【2】查看当前数据库所在的名字
select database();
【3】查看当前数据库下的所有库
show tables;
【4】创建数据库下面的表
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】查看当前表的详细信息
describe 表名;
desc 表名;desc user;
-
查看我创建的表的语句
-
show create table 表名 \G;show create table user \G;
【6】修改表的字段
alter table 表名 modify 字段名 字段类型;alter table user modify passowrd int(4);
【7】删除表
drop table 表名;drop table user;
插入表中的数据
【1】插入数据
insert 表名(字段名) values(值)create table user2 (username varchar(32),password varchar(32)
);
insert users(username,password) values("maojing","1314");
【2】查看表中的数据
select * from user;
【3】更改表中的数据
update 表名 set 需要改的数据 where 筛选条件;
这个是更改一个
update user set password="123" where username="tian";
这个是更改两个
UPDATE user SET password = '520' WHERE username IN ('tian', 'maojing');
【4】删除数据
-- 按照指定条件删除数据
delete from 表名 where 筛选条件;
-- 直接清空表
delete from 表名;
delete from user where username="dream";
【一】什么是存储引擎
存储引擎是数据库系统中负责管理数据的核心组件之一。它定义了数据库如何在磁盘上存储和访问数据。
-
日常生活中文件格式有很多,并且针对不同的文件格式会有对应不同的存储方式和处理机制
-
针对不同的数据应该有对应的不同的处理机制
存储引擎就是不同的处理机制
【二】MySQL主要的存储引擎
-
InnoDB(默认引擎):
-
支持事务处理,具有ACID(原子性、一致性、隔离性和持久性)特性。
-
支持行级锁定,提供高并发性能。
-
支持外键约束和关联关系。
-
支持崩溃恢复和故障转移。
-
使用聚簇索引来加速查询。
-
-
MyISAM:
-
不支持事务处理,不具备ACID特性。
-
支持表级锁定,对于并发性能较差。
-
不支持外键约束和关联关系。
-
适用于读密集型应用,如数据仓库、报告等。
-
以表文件的形式存储数据,易于备份和迁移。
-
-
Memory(也称为Heap):
-
将表数据存储在内存中,速度非常快。
-
不支持事务处理,不具备持久性。
-
表数据在服务器重启后会丢失。
-
适用于临时数据存储、缓存或者需要高速读写操作的场景。
-
-
blackhole (黑洞引擎)
-
无论存什么都会立刻消失
-
【三】如何查看数据库引擎
show engines;
【四】不同引擎下的表的特性
【1】创建表
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】插入数据
insert into user1 values(123);
insert into user2 values(123);
insert into user3 values(123);
insert into user4 values(123);
【3】查看数据
select * from user1;
select * from user2;
select * from user3;
select * from user4;
除了黑洞引擎都存在数据
memory 数据是存在内存中的,如何印证?
-
重启mysql服务
【一】创建表的完整语法
create table 表名 (字段名 字段类型(宽度) 约束条件
);
-- 最后一个字段不能以 , 结尾
-- 字段名和字段类型是必须的条件
CREATE TABLE 表的名称 ( column1 datatype constraint, # 字段名 字段类型(宽度) 约束条件column2 datatype constraint ... CONSTRAINT constraint_name, # 是对列的约束条件... ) ENGINE = storage_engine;# 存储引擎
-
约束条件可选,约束条件可以写多个
-
表的名称:替换为你想要创建的表的名称。column1、column2:替换为表中的列名。datatype:替换为对应列的数据类型。constraint:替换为对列的约束条件。constraint_name:替换为约束条件的名称。storage_engine:替换为你想要使用的存储引擎,如 InnoDB、MyISAM 等。
【二】基础语法
-- 这三个条件必须存在 create table 表名(字段名 字段类型 );
create table user(id int);
【三】什么是宽度
-
一般情况下指的是对存储数据的限制
-
默认宽度为 1(只能存一个字符)
-
-
创建表
create table user7(name char);
-
查看表的详细信息
desc user7;
desc bai7;
【四】null 和 not null
-
not null 约束当前字段条件不能为空
insert user8 values(123,'d');
insert user8 values('a');
create table usr8(id int,name char not null);
【五】严格模式
本质上是为了约束我们sql语法规范的,我们可以不按照约束做事,修改他的约束。
%:匹配任意个字符
_:匹配当前字符
【1】查看严格模式
show variables like "%mode";
【2】修改严格模式
-
全局生效
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'
-
只对当前窗口生效
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 之后的版本默认都是开启严格模式的
-
尽量减轻数据库的负担,不给数据库增加额外的压力