51、数据库的概念及sql语句

发布于:2024-07-17 ⋅ 阅读:(126) ⋅ 点赞:(0)

1、数据库

1.1、数据库管理:

  • sql语句 数据库用来增删改查的语句。重要*

  • 备份 数据库的数据进行备份。

  • 主从复制,读写分离 高可用。重要*,原理–面试。

  • 数据库的概念、语法和规范

1.2、数据库的定义

数据库:组织,存储,管理数据的仓库。

数据库的关系系统(DBMS):实现对数据有效组织,管理和存取的系统软件。

  • mysql
  • oracle–##大数据系统一般使用
  • sql-server
  • MariaDB也是mysql mysqld
  • postgreSQL 大象数据库

1.3、数据库的类型:关系型数据库和非关系型数据库。

1.3.1、关系型数据库

mysql

oracle

postgreSQL

关系型数据存储的结构:是一张二维的表格,表里面有行和列。

列是对象,字段。

行:对象的信息,字段的信息。

行+列组成一张表。

只有关系型数据库才有表。

1.3.2、非关系型数据库:

缓存型数据库:redis

索引型数据库:ES

文档型数据库:MongoDB

键值对形式存储的结构:

key value

test1=3

1.4、关系型数据库和非关系型数据库的优缺点:

  • 关系型的优点:表的结构清晰,逻辑容易整理,记录的数据比较完整。
  • 关系型的缺点:读写数据比较慢,并发量差,数据迁移比较麻烦。每个表都是关联的。
  • 非关系型数据库优点:高并发读写,对海量数据依旧可以保持高效率的存储和访问,架构可扩展。
  • 非关系型数据库缺点:键值对形式存储,数据逻辑比较复杂,数据是保存在缓存(内存)当中(redis),如果意外重启,所有数据都会丢失。

1.5、mysq的数据类型:

char:固定长度的字符串类型,用于存储固定长度的字符串。

varchar:可变长度的字符串类型,存储的是可变长度的字符串。

char定义好长度之后,不论写了值是多少,都会占用固定长度的字节大小。保存在磁盘上都是4字节。

varchar在保存字符串时,多少就保存多少,在保存的字符串结尾默认有一个隐藏的结束符,会多占一个字节。

varcharchar要节约磁盘空间。

读写速度:char的读写速度性能要高于varcharchar时连续的磁盘空间,保存的内容时连续的。

varchar在增删改查之后,会产生一个磁盘空间的碎片文件,影响读写性能。

int 存储的数据类型为整数

float:浮点数,小数点 float(m,d):m表示总位数,d表示小数位数。

double:双精度浮点数 double(m,d):m表示总位数,d表示小数位数。

date:用于存储日期,YYYY-MM-DD

datetime :用来存储日志和时间,格式YYYY-MM-DD HH:MM:SS

timestampdatetime类似,但是他可以自动记录当前时间。

smallint:存储小整数。

bigint:存储大整数

decimal(5,2):存储浮点,存储精度的浮点数,5表示总位数,2,表示小数位。

2、数据库的管理:

增删改查----sql语句

2.1、sql中的名词:

  • 数据库:databases
  • 表:table
  • 行:row
  • 列:column
  • 索引:index
  • 视图:view
  • 用户:user
  • 权限:privilege
  • 存储过程:procedure
  • 存储函数:funcrion
  • 调度器:exent

2.2、sql的语言规范:

在数据系统中,sql语言不区分大小写,但是建议大写。

sql语句可以分单行和多行,但是必须要以";"结尾。

2.3、命令规范:

库名、表名、列的名字,必须以字母开头,后面可以数字。后面也可以跟上特殊符号。

不要使用mysql的保留字,table select show databases

数据库名,表名,用户名严格区分大小写。

2.3.1、sql语言的分离:

1、DDL 数据库定义语言:用来创建数据库的对象语言,库,表和索引等等。

create创建 drop丢弃删除

2、DML:数据库操作语言,可以对表里面的数据进行管理

select筛选 updateinsertdelete

3、DQL 数据库查询语言。

select筛选

4、DCL 数据控制语言,控制和管理数据用户的角色和权限。

grant:GRANT命令用于授予用户对数据库对象的特定访问权限。数据库管理员可以使用GRANT命令来精确地控制用户对数据库对象(如表、视图、存储过程等)的访问和操作权限。

revoke:REVOKE命令用于回收已经授予的权限。当一个用户或角色不再需要访问特定的数据库对象,或者他们的访问权限需要被限制时,数据库管理员可以使用REVOKE命令来撤销他们的权限。

5、tcl 事务控制语句,用来管理的数据库的事务,脚本开发,存储过程等等。

commit rollback savepoint

DDL:一条数据库的语句是连贯的,已分号为结尾表示一条完整的sq1,但是太长了,不方便阅读和理解。我们可以对一条语句进行分行的写法。

关键词不能跨行

2.4、创建库的语句:

CREATE DATABASE 数据库名;

点击运行

F5##刷新

xshell命令行:

use 库名;

show tables;

2.5、创建表的语句:

select * FROM student;##查询表所有列的内容

desc student;##查看表结构

CREATE table 表名 (
ID INT (4) NOT NULL,
#定义表的列的属性,数据类型和是否为空;
NAME CHAR(10) NOT NULL,
score DECIMAL(5,2)
);

select * FROM student;##查询表所有列的内容

use xy102;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-----------------+
| Tables_in_xy102 |
+-----------------+
| student         |
+-----------------+
1 row in set (0.00 sec)

mysql> desc student;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| ID    | int          | NO   |     | NULL    |       |
| NAME  | char(10)     | NO   |     | NULL    |       |
| score | decimal(5,2) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
-----+---------+-------+
 Key | Default | Extra |
-----+---------+-------+
     | NULL    |       |
     | NULL    |       |
     | NULL    |       |
-----+---------+-------+

key:表示是否是主键或者外键

default:如果没有数据的默认展示结果

extra:提供列的附加信息。自增长等等。

desc student;##查看表结构

desc student\G;

mysql> desc student\G;
*************************** 1. row ***************************
  Field: ID
   Type: int
   Null: NO
    Key: 
Default: NULL
  Extra: 
*************************** 2. row ***************************
  Field: NAME
   Type: char(10)
   Null: NO
    Key: 
Default: NULL
  Extra: 
*************************** 3. row ***************************
  Field: score
   Type: decimal(5,2)
   Null: YES
    Key: 
Default: NULL
  Extra: 
3 rows in set (0.01 sec)

2.6、数据库命令操作

2.6.1、删除数据表

DROP table 表名;删除表

CREATE table student (
ID INT (4) NOT NULL,
#定义表的列的属性,数据类型和是否为空;
NAME CHAR(10) NOT NULL,
score DECIMAL(5,2)
);

DROP table student;删除表

2.6.2、删除数据库

DROP database 数据库名;删除库

CREATE table student (
ID INT (4) NOT NULL,
#定义表的列的属性,数据类型和是否为空;
NAME CHAR(10) NOT NULL,
score DECIMAL(5,2)
);

DROP database student;删除库

2.6.3、数据表中插入数据

DML和DQL 管理语句和查询语句

DML:insert插入数据

insert into 表名(字段1,字段2,字段3) values(1,2,3);
insert into 表名(字段1,字段2,字段3) values(1,2,3);
insert into student(id,name,score)values(1,'成千',87.6);
insert into student values(2,'zhai',88.8);
insert into student values(3,'zhai',null);
select * from student;

在这里插入图片描述

insert into student(id,username,score,address) values(10,'成千',null,null);##只有null为yes,可以输入null。但是不能空。
insert INTO student VALUES(11,' ',98,NULL);

在这里插入图片描述

null和空值之间的区别;

null就是啥也没有,就是为空。

空值也是值,只是值为空

select * from student where name is null;

select * from student where score is NULL;

2.6.4、修改和更新:

update更新

update 表名 set 列名=值 where 条件;

update student set score=90 where id = 3;--------##把id=3的行的score的值更新为90

select * from student;

delete删除表中行的数据

delete from 表名 where 条件;

delete from student where id=3;-----##删除student表中的id=3的那一行

select * from student;

DQL语句,查询语句:-----查询列

select score,name from student;--------##表示筛选列名为score,name列展示。

select * from student;--------##*表示所有列。。

查看指定行:

SELECT * FROM student LIMIT 2,2;----##查看3-4行,不包含第二行

SELECT * FROM student LIMIT 0,3;##查看1-3行,相当于从0开始后,筛选3行,就是1-3行。

去重查询:

SELECT DISTINCT id FROM student;----##对id相同的内容进行去重
insert into student values(7,'ji',85);
SELECT DISTINCT NAME from student;----##对username相同的内容进行去重

WHERE 语句 条件的筛选:

AND 且
or 或

select 筛选内容 from student where 条件1 or/and 条件2;

select * from student;
select name from student where id = 7 or score =91;----##筛选名称,条件是id=7或者score=91;

AND 且 
or 或 

模糊查询:like

以zh开头;

SELECT * FROM student WHERE name like 'zh%';---##筛选名字以zh开头的所有列

以ai结尾;

SELECT * FROM student WHERE name like '%ai';---##筛选名字以ai结尾的所有列

包含ji即可

SELECT * FROM student WHERE name like '%ji%';---##筛选名字包含ji的所有列
SELECT * FROM student WHERE name like '%i%';---##筛选名字包含i的所有列

ALTER 修改表名和修改表结构

alter table student rename stu01;表名student改为stu01

ALTER 修改表名和修改表结构

alter table stu01 rename student;

给表添加一列:

ALTER table student add address varchar(50) default '地址不详';
DESC student;##添加address列,可变长度,默认'地址不详'

修改字段的数据类型:

ALTER TABLE student MODIFY COLUMN address char(10);
DESC student;

删除列:

ALTER table student DROP address;

#修改列的名称

alter table student change name username char(10);
DESC student;

dent改为stu01


### ALTER 修改表名和修改表结构

alter table stu01 rename student;


### 给表添加一列:

ALTER table student add address varchar(50) default ‘地址不详’;
DESC student;##添加address列,可变长度,默认’地址不详’


### 修改字段的数据类型:

ALTER TABLE student MODIFY COLUMN address char(10);
DESC student;


### 删除列:

ALTER table student DROP address;


### #修改列的名称

alter table student change name username char(10);
DESC student;



网站公告

今日签到

点亮在社区的每一天
去签到