数据库基本语句知识

  • 数据库
  1. 数据库的分类

我们平时所使用的数据库一般为关系结构数据库,这其中有oracle,mysql,sql server,DB2,MariaDB,性价比最高的是mysql。

  1. mysql的启动方式:
  1. 命令行net start mysql
  2. 任务管理器点击服务找到mysql右键启动
  3. 一般开机自启
  1. 登录mysql:
  1. 输入win+r 然后cmd进入命令窗口输入 mysql -uroot -p密码
  2. 输入win+r 然后cmd进入命令窗口输入 mysql -uroot -p 然后等待提示password再输入密码
  • sql语言

1,DDL数据库定义语言

(1)数据库

chow databases;

显示存在的数据库

create database 库名;

注:数据库一旦创建不能修改名字

创建数据库

create database if not exists 库名;

如果此数据库不存在则创建

create database库名character set gbk/utf8;

创建数据库并且设置编码格式,默认utf8

alter database 库名 character set gbk/utf8;

修改数据库编码格式

show create database 库名;

显示创建数据库时的信息

drop database 库名;

删除数据库

use 库名;

使用数据库,不能忘记选择

select database();

查询当前使用的数据库

(2)数据表

show tables

查询当前库下的表

create table 表名(

字段1,      

字段2,

………

);

例如

create table stu (

sid int,

sname vachar(32),

sex char(1)

);

创建表

int整型  double浮点型  char定长字符型

varcahr可变长字符型  date日期型 datetime 日期时间 timstamp  时间戳  text 文本

数据类型

desc 表名

查看表结构

alter table 表名 add 字段;

向表中添加列,需要添加数据类型

alter table 表名 drop 字段;

向表中删除列

alter table 表名 change 修改前数据 修改后数据+数据类型;

例如

alter table stu change sname age int;

修改列名

alter table 表名 rename 新表名;

修改表名

drop table 表名;

删除表

总结: 增加create 删除drop 更新alter 查询show       

2,DML数据库操作语言

insert into 表名 (字段1,字段2,………) values (值1,值2,……) ;

insert into 表名(字段1,字段2,……….) values (值1,值2……), (值1,值2……), (值1,值2……)……;

例如

insert into stu (sid,sname,sex) values (1,”藏三”,’男’),(2,”李四”,“女”);

向表中插入数据,字段和值要一一对应,不管顺序如何,可以批量插入多个字段但是要用逗号隔开

update 表名 set 字段 = 值 where 条件;

update stu set sname = “张老三” where sname = 张三”;

更新表中字段

delete from 表名;

删除全表字段以及结构(不推荐)

delete from 表名 where 条件;

删除表中指定字段

truncate table 表名;  只删除表中值不删除字段

delete from 表名:删除全表的字段和值,玩完全销毁表

truncate 与 delete 的区别,面试会问

3,约束

通过给表添加约束可以对增删改操作进行限制

primary key

create table stu (

sid int parimary key,

sname vachar(32)

);

或者

create table stu (

sid int,

sname vachar(32),

primary key(sid)

);

主键约束,自带非空、唯一

auto_increment

自增约束,通常用于primary key 之后,自增顺序不会回退会一直递增

unique

唯一约束,列的值不可重复

not null

非空约束,列的值不能为空

default

默认值约束,列的值为空时会变为默认值

constraint 外键名 foreign key(本表中的列名) references 表(主键);

constraint fk_stu_class foreign key(cid) references class(cid);

外键约束,是多个表之间一种关联关系的限制。被约束的表不能被直接删除,想要简便的删除可以使用级联操作。

on detele cascade

级联删除

on update cascade

级联更新,删除与更新都直接写到外键后即可一键删除。

  1. DQL数据库查询语言

select 字段1,字段2……  from 表名;

select sid,sname from stu;

基本查询

select 字段1,字段2……  from 表名 where条件;

条件查询

select 字段1,字段2…… from 表名 where 字段 like  %值%

模糊查询,百分号前面和后面都可使用

select 字段1,字段2…… from 表名 order by  desc/asc

排序查询,默认排序方式为升序所以asc可以省略不写

select count(字段) from 表名;

count可替换为max /min /avg /sum

聚合函数,其他函数不能和聚合函数同时查询,除非有分组查询。

例如:select count(distinct age) from stu;

去重函数

select 字段1,字段2,……from 表名 group by 字段 having 条件;

注:where是分组前筛选,having是分组后筛选,使用效果不同

分组查询,group by后的字段必须出现在select里面否则会报错,除非使用聚合函数括起来。

limit n ——限制输出n条默认从第一条开始

limit x,y——从x下标开始输出y条

限制查询,常用来分页

三,sql顺序

书写的顺序为:

select 》from 》where 》group by 》having 》order by 》limit

执行的顺序为:

from 》where 》group by 》having 》select 》order by 》limit

执行的顺序为关键,例如:

from 得到10条数据

where筛选成8条

group by分成4组

having筛选分组成3组

select选中这3组

order by进行排序

limit 最后进行一次限制筛选

四,多表联查

1,表与表的关系为:

左边看右边是一对一,右边看左边也是一对一

一对一

左边看右边是一对多,右边看左边是一对一

一对多

左边看右边是一对多,右边看左边也是一对多

多对多,多对多的表需要设置一张中间表来进行关联

2,合并结果集

两张表可以通过union/union all 进行纵向拼接,使用不多

3,连接查询

select 字段 from 表名1 inner join 表名2 on 表名1.字段 = 表名2.字段;

例如:

select sid from stu inner join class on stu.cid = class. cid

也可通过起别名写成:

select sid from stu s inner join class c on s.cid = c.cid

内连接,内连接为主要使用的连接,可以通过(表名1 inner join 表名2 on 表名1.字段 = 表名2.字段)的方式多表联查

select 字段 from 表名1 left/right outer join 表名2 on 表名1.字段 = 表名2.字段;

外连接,外连接会保留不符合条件的数据故不如内连接好用,左连接以左表为主,右连接以右表为主

select * from (select sid,sname,age from stu where sex = ‘男’) from stu where age > 10;

select sid from stu where score > (select * from stu where sid = 1008);

子查询(嵌套查询),嵌套的查询语句可以写在from后面把查询的结果当表,也可写在where后面把查询的结果当条件值。嵌套查询为最后迫不得已的手段

四,函数

  1. 字符串函数

select concat(字段1,字段2,……) from 表名;

concat,连接函数,可以拼接字符串或者拼接字段里的值

select length(“java”);

select length(score) from stu;

length,字符串长度函数,英文一个字母1个字节,中文一个字3个字节

select replace(字段,要被替换的部分,替换后的部分);

select replace (“mysql”,”my”,”your”);

replace,替换函数

select substring(字段,从第几个截取,截取几个) ;

select substring(sname,1,3)

substring,截取函数可用于更新操作或者插入操作

select ltrim(“  java”);

ltrim/rtrim,除空函数,可以去除左边或者右边的空格

2,数学函数

select ceiling(1.1);

ceiling,小数向上取整

select floor(1.1);

floor,小数向下取整

select format(小数,保留几位小数);

select format(1.325,2)

format,保留小数位数,会四舍五入

select rand(选择随机几次)*倍数

rand,给一个0-1之间的随机数,可以利用乘法扩大范围,括号内可不选就能一直随机

select round(小数,保留几位小数);

round,与format效基本一样

select truncate(小数,保留几位小数);

truncate,保留几位小数,不会四舍五入

select abs(-1)  结果为1

abs,绝对值函数

3,日期函数

日期为年月日,时间为时分秒

now()

当前日期时间

sysdate()

系统日期时间

current_date()

当前日期

current_time()

当前时间

current_timestamp

当前时间戳

date()

日期

time()

时间

datetime()

日期时间

datediff(date1,date2)

时间差

year()/ month()/ date()

年/月/日

4,日期字符串转换函数

date_format

例如:

select date_format(now(),’%Y-%m-%d’)

日期——》字符串

select str_to_date(‘2023年12月11日’,” ”%Y-%m-%d”)

字符串——》日期

  1. 流程函数

非常重要

if(条件,结果为真,结果为假)

例如:

select avg(if(score is null,0,score)) from stu;

算平均成绩,如果成绩为空就算作0分,如果成绩不为空就算作成绩本身

if函数,相当于三目运算符

ifnull(不为空,为空)

ifnull函数,判断是否为空,不为空返回第一个,为空返回第二个

case when

字段1 then 结果1

字段2 then 结果2…….

else (默认值)  end;

例如:

select sname,score,case

when score < 60 then “不及格”

when score <=70 then “及格”

when score <=80 then “中等”

when score <=90 then “良好”

else “优秀” end

from stu;

 case函数

五,事务

事务是一个原子操作,开启事务后所有命令都执行成功才能完成事务,有一个失败都会让整个事务失败。

1,mysql中事务

show variables like ‘autocommit’

查询当前事务的提交方式

set autocommit = off/ = 0

设置自动提交关闭

set autocommit = on/ = 1

设置自动提交开启

start/begin transaction

开启事务

commit

提交事务

rollback

回滚事务

  1. 事务特性(必须背会)

(1)原子性:指数据库的整个操作是一个整体,要么都成功,要么都失败。

(2)一致性:事务必须使数据库从一个一致性的状态转换到另一个一致性的状态,转账                          前后的总金额不能有变化。

(3)隔离性:事务的隔离性是指多个用户并发访问数据库时,数据库为每一个用户开启的事务不能被其他事务的操作数据所干扰,事务与事务之间相互隔离。

(4)持久性:指一个事务被提交后,它对数据库的影响就是永久的,即使数据库发生故障也不影响对其有任何影响,回滚不了的

  1. 事务的隔离机制

数据库有不同的隔离级别

  1. 读未提交:read uncommited 脏读、不可重复读、幻读都有可能发生
  2. 读已提交:read commited   避免脏读,但是不可重复读、幻读都有可能发生
  3. 可重复读:(mysql):repeatable read  避免脏读、不可重复读,但是幻读有可能发生
  4. 串行化:serializable         全都可以避免但是效率极低

脏读:一个事务读取了另一个事务未提交的数据。

不可能重复读:在一个事务内读取某一行数据,每次读取的结果不同。

幻读:一个事务读取到了另一个事务插入的数据,导致前后数据不一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值