数据库相关基本知识

本文详细介绍了数据库的基本概念,包括关系型数据库如MySQL、Oracle和SQL Server,以及非关系型数据库如Redis和MongoDB。深入探讨了SQL语句的分类,如DDL、DML、DQL、DTL和DCL,以及如何在MySQL中进行数据库和服务的操作,如开启服务、数据连接、展示数据库、创建和删除数据库等。此外,还讲解了数据表的创建、修改、插入、更新、删除和查询操作,以及数据约束的使用。
摘要由CSDN通过智能技术生成

数据库:

用来管理数据的仓库

主要功能:

增 删 改 查

 

开发中用到的数据库:

关系型数据库:

MySQL  : Orcal公司

Orcal : Orcal 公司

SQL Server : MS公司

 

非关系型数据库:

Redis  MongoDB

 

SQL 语句分类:

DDL: 数据库定义;

DML:  数据库操作;

DQL:  数据库查询;

DTL:  事物处;理  回滚

DCL: 数据控制;

 

链接数据库操作:

> 表示在CMD终端下的命令

mysql > 表示是一条mysql的语句

 

开启数据库的服务

net star mysql;

1 数据连接

mysql - hlocahost -uroot -p9052

mysql : 连接的是哪一个数据库,或者说这里启动的程序是mysql

-h : host 主机地址,-h 是IP地址,或者说是域名或者是电脑名当前我们操作的数据库是在本机,所以这里使用localhost 还可以使用127.0.0.1 或者说直接省略-h参数

-u user 后面的值是用户名,这里使用的是mysql数据库的root用户

-p password 连接数据库使用的密码,不建议密码在连接时给予

最好使用如下格式

mysql -uroot -p

Enter Password ****

 

2. 展示当前数据库服务器上的所有数据库

mysql > show databases;

 

3. 创建数据库;

mysql > create database javaee1903;   javaee为所建的数据库的名称

 

4. 选择使用的数据库

       mysql > use javaee1903;

      

5. 展示当前数据库中的所有数据表

mysql > show tables;

6. 创建数据表

mysql > create table student(

id int,  //id 是字段名  int 是数据类型

name varchar(20), //name 字段名 varchar 是可变长字符串最大长度是20

age int, //age 字段名 int 数据类型

info text, //info 个人描述 text 数据类型,文本数据类型

score float(4, 1)  //score 字段名 float(4, 1) 数据总长度最多为4,最多有一位小数 123.5

);

 

7. 描述表结构

mysql > desc student;

8. 删除表

mysql > drop table student;

9. 删除数据库

mysql > drop database javaee1903;

10. 查看创建数据表的一些参数

mysql > show create database javaee1903;

11. 查看创建数据表的一些参数

mysql > show create table student;

12 退出数据库

mysql >quit;

mysql > exit;

 

修改数据表结构alter

1. 添加一个新的字段  默认是添加到所有的字段之后

mysql  > alter table student add classNlum int;

在指定的某一字段之后/前添加

mysql > alter table student add gender char(1) after/before ago ;

2. 修改指定字段的数据类型;

mysql > alter table student modify gender tinyint(1) ;

3. 删除指定的字段

mysql > alter table student drop classNum;

4. 同时修改名字和数据类型;

mysql > alter table student change info studesc varchar(30);

 

 

插入数据insert

1. 对应的字段数据挨个添加;

mysql > insert into student (id, name, age, gender, studesc, score)

values(1, "骚磊", 16, 0, "逗逼匿名君", 59);

2. 指定字段添加数据;

mysql > insert into student (id, name) value (2,"稻姐”);

3. 按照字段顺序添加数据

mysql > insert into student values(3, "宝哥哥", 66,  0, '2B宝哥', 66  );

inset into student values (4, "林妹妹", 16, 0, '班草', 76);

...

 

修改数据【慎用】update

1 没有任何条件约束,修改操作会修改指定表,指定字段的所有内容(不要这样用  )

mysql > update student set studesc = "错误的演示";

2. 修改数据需要加上约束条件

mysql > update student set studesc = "德云社" where id = 14;

 

删除数据【慎用】delete

1. 删除数据表中是所有内容(禁止这样用)

mysql > delete from student;

2. 删除操作也需要添加上条件

mysql > delete from student where name = "熊哥”;

mysql > delete from student where id = 6;

mysql > delete from student where age > 50;

 

查询语句【重要】select

1. 项目中不会使用的一条语句

mysql > selecr * from student;

2. 查询指定的字段

mysql > select name from student ;

mysql > select name, age from student;

3. 起别名查询

mysql > select name as "姓名" , age as "年龄”, from student;

4. 约束一定的条件

msql > select name as "姓名" , age as "年龄”, from student where id = 5;

还可以使用  <, >, >=, <=,  !=  不等于还可用<>表示

5,and or

and 表示与   or 或

mysql > select name as "姓名", age as "年龄", score as "成绩" from student where age < 30   and score > 50;

mysql > select name as "姓名", age as "年龄", score as "成绩" from student where age > 50 or  score > 100;

 

6, 排序查询 order by

升序asc

mysql > select name as "姓名", age as "年龄", score as "成绩" from student order by age asc;

降序 desc

mysql > select name as "姓名", age as "年龄", score as "成绩" from student order by age desc;

第一个条件降序,如果出现在排序中相同的数据,按照其他条件升序

mysql > select name as "姓名", age as "年龄", score as "成绩" from student order by score desc, age asc;

只是排序女生的成绩,成绩降序,出现相同,年龄升序

mysql > select name as "姓名", age as "年龄", score as "成绩"  -- 查询的内容

from student  -- 从哪里查询

where gender = 1 -- 限制查询的条件

order by score desc, age asc;  -- 排序的要求

7. 去重查询

mysql > select distinct score from student;

8. 分页查询【重点】limit

mysql > select * from student limit 10;-- 这里是查询10条数据

limit offset, length

mysql > select * from student limit 0, 10; -- 从第0行数据开始,获取10条数据

mysql > select * from student limit 10, 10; -- 从第10行数据开始,获取10数据

 

-- 前端点击1 2 3 表示 页码 pageCount  每一页展示10条数据

-- limint (pageCount - 1) * 10, 10

9. 内置函数

max min avg sum count

mysql > select max(score) from student;

mysql > select min(score) from student;

mysql > select count(1) from student; -- 速度稍稍高一点,

msyql > select count(*) from student;

10. 模糊查询

like - %

要求 哥 结尾,并且 哥 之前有一个字符

mysql > select * from student where studesc like "_哥";

 

-- 要求 哥 结尾,并且 哥 之前不限制字符

mysql > select * from student where studesc like "%哥";

 

-- 要求 哥 之后有一个字符,哥 之前不限制字符

mysql > select * from student where studesc like "%哥_";

 

-- 是哥就行!!!

mysql > select * from student where studesc like "%哥%";

 

11 分组查询  group by

mysql > select gender as "性别" ,count(1)  as ”人数“ -- 需要查询的内容

from student -- 从 student表中查询数据

group by gender; -- 按照性别分组

 

-- 需要咋group by 之后使用where时将where换位having

mysql > select gender as "性别", count(1) as "人数" -- 需要查询的内容 ,count(1)人数

from student -- 从 student表中查询数据

group by gender -- 按照性别分组

having count(1) > 10; -- 分组之后在约束条件,要求人数大于10

 

数据约束

默认值

-- default 修饰的数值在未被赋值的情况下时默认值

mysql > create table person1(

    id int,

    name varchar(20),

    country char(20) default "中华人民共和国"

);

+---------+-------------+------+-----+-----------------------+-------+

| Field   | Type        | Null | Key | Default               | Extra |

+---------+-------------+------+-----+-----------------------+-------+

| id      | int(11)     | YES  |     | NULL                  |       |

| name    | varchar(20) | YES  |     | NULL                  |       |

| country | char(20)    | YES  |     | 中华人民共和国        |       |

+---------+-------------+------+-----+-----------------------+-------+

但是default修饰的数值也可以在被赋值。

 

非空

mysql > create table person2 (

id int,

name varchar(20) not null, -- 要求name属性非空

    age int

);

+-------+-------------+------+-----+---------+-------+

| Field | Type            | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id    | int(11)             | YES  |     | NULL    |       |

| name  | varchar(20) | NO   |     | NULL    |       |

| age   | int(11)             | YES  |     | NULL    |       |

+-------+-------------+------+-----+---------+-------+

-- 如果是要求非空,必须有对应的数据 如果没有数据就会报错

-- 错误的提示是ERROR 1048 (23000): Column 'name' cannot be null:

 

唯一

-- unique 当前的字段不可以重复

mysql > create table person3(

    id int unique, -- 要求ID字段唯一,不可以重复

    name varchar(20) not null,

    info text

);

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id    | int(11)     | YES  | UNI | NULL    |       |

| name  | varchar(20) | NO   |     | NULL    |       |

| info  | text        | YES  |     | NULL    |       |

+-------+-------------+------+-----+---------+-------+

-- 要求id不能重复,重复时报错, ERROR 1062 (23000): Duplicate entry '2' for key 'id'

null是一个无效数据,唯一判定中不做要求!!!

mysql > insert into person3(id, name, info) values(null, "骚磊", "就是这么的骚");

mysql > insert into person3(id, name, info) values(null, "马赛克", "裁判队专用外号");

-- 这样不会报错

 

主键

-- 非空 唯一 not null + unique  使用关键字 primary key 

-- 主键作为i当前数据的唯一标识, 主键修饰的字段不能作为带有逻辑业务的字段

mysql > create table person4(

    id int primary key, -- id作为主键

    name varchar(20) not null,

    info varchar(30)   

);

+-------+-------------+------+-----+---------+-------+

| Field | Type        | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

| id    | int(11)     | NO   | PRI | NULL    |       |

| name  | varchar(20) | NO   |     | NULL    |       |

| info  | varchar(30) | YES  |     | NULL    |       |

+-------+-------------+------+-----+---------+-------+

 

自增长

--自增长的字段必须时一个key 关键字是 auto_increment

mysql > create table person5(

    id int primary key auto_increment, -- ID是主键字段,并且自增长

    name varchar(20) not null,

    info varchar(20) not null

);

若在1、2、之后直接插入5,然后在使用自增长是,下一个id会是6

delete操作不会影响自增长但是truncate会

 

级联操作

-- 级联删除和级联修改

-- 删除: on delete cascade

-- 修改:on update cascade

mysql > create table employee(

    id int primary key auto_increment,

    empName varchar(20) not null,

    deptId int not null, -- 部门ID号,用于连接部门表

    -- 外键约束

    constraint emp_dept_fk foreign key(deptId) references dept(id) -- 外键约束

    on delete cascade -- 级联删除要求

    on update cascade -- 级联修改要求

);

-- 修改主表中的数据,从表中使用到组表数据的字段也会被修改

删除主表数据,从表中使用主表数据的数据行,也会被同时删除!!!

联表查询

mysql > select employee.id, employee.empName as "姓名", dept.deptName as "部门" -- 查什么

from employee, dept -- 从哪里查

where employee.deptId = dept.id; -- 查询的条件

 

-- 查询的结果是没有任何问题,但是表名忒长了!!!

-- 这里可以给表名起一个别称

mysql > select e.id, e.empName as "姓名", d.deptName as "部门"

from employee e, dept d

where e.deptId = d.id;

 

-- inner join 内联查询

mysql > select e.id, e.empName as "姓名", d.deptName as "部门"

from employee e

inner join dept d -- 内连接查询

where e.deptId = d.id

and d.deptName = "贱部";

where也可以用on代替

-- 外连接查询分 左 右

-- 左外连接查询

-- 对应部门的员工,部门作为左表

使用左外链接查询,左表一定展示数据,右表作为左表的匹配,如果右表没有匹配的数据,展示为null

一、约束:作用是保证数据的完整性和一致性 not null 表示该字段数据不能为空 default 表示该字段的默认值 unique 唯一(列唯一,组合唯一) primary key 主键 一张列表中只允许出现一个主键(not null + unique) auto-increment 自增长 foregin key 外键 建立两个表之间的联系 语法 constraint fk_dep foreign key(关联列名) references 被关联表(被关联列) on delete cascade 同步删除 on update cascade 同步更新 二、Mysql基本介绍 操作文件夹(库): 增加一个库:create database db1 charset utf8; 查看所有库: show databases; 查看特定库: show create database db1; 删库跑路: drop database db1; 操作文件(表): 切换进数据库:use db1; 查看当前所在文件夹;select database( ); 增加表:create table t1(id int,name char(6)); 查看特定表:show create table t1; 查看所有表:show tables;或者desc t1; 改: alter table t1 modify name char(10);name字段改为10字节; alter table t1 modify name NAME char(10);name字段名改成NAME 复制表 即复制表数据也复制表结构:create table t1 select * from db1.t1; 只复制表结构create table a1 like db1.t1; 清空表 delete from t1;但是这种方法会保留自增的ID truncate table t1;这种方法不会保留自增ID 操作文件内容 增加内容:insert into (id,name) values(1,'aa'),(2,'bb'),(3,'cc'); 查看内容:select * from db1.t1; 删除内容:delete from t1 where id =1; 查看用户权限:select * from mysql.user where user='root'\G; 三、SQL数据类型 SQL之中没有bool值,tinyint[1]表示true;tinyint[0]表示fasle. int数据类型后面存储的是显示宽度,而不是存储宽度,其他的数据类型则表示的是存储宽度 now()sql中的内置函数,根据数据类型生成相对应的时间模式 char( )定长字符串,存储速度快,但是浪费空间 varchar( )变长字符串,存储速度慢,可是节省空间 enum() 表示枚举 多选一 set( )表示集合 多选多 七、索引 索引的作用:约束和加速查找 无索引的时候一般会 从前至后一条条查找 有索引的时候:创建索引的本质就是创造额外的文件,查询时先去额外的文件找,定好位置,再去原始表直接查询,提高查询速度,但是增删改的速度依然慢,创建索引后必须命中索引才有效 索引的分类 1、普通索引:加速查询 加入索引:create index 索引名 on 表名(列名) 删除索引: drop index 索引名 on 表名 查看索引:show index from 表名 2、唯一索引:加速查找和唯一约束(可含null) 加入索引:create unique index 索引名 on 表名(列名) 删除:drop index 索引名 on 表名 3、主键索引 加入索引:alter table 表名 add primary key(列名) 删除索引:alter table 表名 drop primary key(列名)和alter table 表名 modify 列名 int,drop primary key 4、组合索引:将多个列组合成一个索引 创建组合索引:create iindex 索引名 on 表名(列1,列2) 在使用组合索引时,若组合索引为(name,email),单独索引email时不走索引,这称为最左前缀匹配原则,最左匹配原则中,mysql会一直向右匹配知道遇到( between like)这一类的范围查询时停止 explain + sql查询语句,用于查询sql执行信息参数 在使用关键字‘like’查询时:like ‘n%’ 走索引;但是like ‘%n%’不走索引,即有且仅只有后面带上%时走索引 使用函数时索引不生效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值