MySQL数据库的基本语法

MySQL数据库的基本操作

1.数据库的创建

1.1创建数据库

创建数据库

create database <数据库名>   -- 在sql语句中不区分大小写

使用数据库

use <数据库名>

删除数据库

drop database  <数据库名>

查看数据库

show databases <数据库名>

1.2数据表的创建

数据表的基本操作

关键字用法
create创建一张表
drop删除一张表
show查看表的结构
alter修改表

drop关键字用法

drop table <表名> [restrict|cascade]
-- 使用restrict约束删除表时,如果该表存在依赖对象时,则该表将不会被删除,不加约束默认为restrict
-- 使用cascade约束删除表示,如果该表存在依赖对象,则会将该表及其依赖对象都删除

show关键字用法

show tables <表名>
-- 会显示表中的字段,数据类型

alter关键字

alter table  <表名>
[add <新列名> <数据类型> <列级约束条件>]
[add <表级约束条件>]
[drop <列名> [restrict|cascade]]
[alter <列名> <数据类型>]
-- []表示可选项

create关键字

数据类型(常用)

数据类型含义
int(n)长度为n的整形数据
char(n)长度为n的定长字符串
varchar(n)长度为n的变长字符串
decimal(a,b)定点数,a位数字组成,小数部分b位
float(n)精度至少为n的浮点数
double双精度浮点数
boolean布尔值(true|false)
date日期 : yyyy-mm-dd
time时间: hh:mm:ss
timestamp时间戳
create table <表名>(
<列名>  <数据类型> [约束],
<列名>  <数据类型> [约束],
<列名>  <数据类型> [约束],
。。。。。。。。。。。。。
[表级约束]
)enging=innodb charset=utf-8
-- 设置引擎为innodb,字符集为utf8
-- 注意()内的最后一行不用逗号

例如:

-- 创建一个学生表student(id,stuNo,name,sex,birthday,email)
create table student(
    id  int(4)  not null auto_increment,
    stuNo int(8) not null,
    name varchar(20) not null,
    sex  varchar(2)  not null,
    birthday date  not null,
    email varchar(20) not null,
    primary key(id)
)enging=innodb default charset=utf8
-- 创建一个成绩表sc(id,stuNo,courseNo,score)
create table sc(
     id  int(4)  not null auto_increment,
     stuNo int(5) not null,
     courseNo int(6) not null,
     score  varchar(8) not null,
    primary key(id)
)enging=innodb  default charset=utf8

2.数据操作

关键字

关键字用法
insert插入数据
update修改数据
delete删除数据
select查询数据

2.1插入数据

insert关键字

insert into <表名> [列名1,列名2,列名3...] values (常量1,常量2,常量3...)
-- 常量个数必须与每列相对应
-- 在学生表中插入李华(id=1,stuNO=20220429,name='李华',sex='男',birthday=2022-04-29,email='123456@qq.com')
insert into student (id,stuNo,name,sex,birthday,email)
value(1,20220429,'李华','男',2022-04-29,'123456@qq.com')

2.2修改数据

update关键字

update <表名>
set <列名>=<表达式>[,<列名>=<表达式>.....]
[where <条件>]
-- 如果没带条件该列所有值都将被修改
-- 修改李华的email为‘666666@qq.com’
update student set email='666666@qq.com' where name='李华'

2.3删除数据

delete关键字

delete from <表名>
[where <条件>]
-- 注意:使用delete一定要记得带条件,否则会将表中数据全部删除
-- 删除李华这条记录
delete from student where name='李华'

2.4查询数据

2.4.1单表查询

select [distinct] <列名1> [,<列名2>...]
from <表名> as <新表名>
where <条件>
-- as用来给表或者列取别名
-- distinct用来去除重复的字段
-- 查询student表中李华的信息
select * from student where name='李华'
-- *表示查询表中所有字段

2.4.2模糊查询

  • %(百分号):代表任意长度的字符串(长度可以为0)

  • _(下划线):代表任意单个字符

select <列名1> [,<列名2>...]
from <表名> as <新表名>
-- where name like '%刘'
-- 查询某表中name列中最后一个字为刘的信息
-- where name like '刘_'
-- 查询name只有两个字符,且第一个字符为刘的信息
-- 假如你要查李华的信息但你只记得他姓李
select * from student where name like '李%'

2.4.3 order by 子句

order by <列名> desc
-- 该列按照降序排列
order by <列名> desc
-- 该列按照升序排列

2.4.4聚集函数

SQL 常用聚集函数

函数含义
count(*)统计元祖个数
count(<列名>)统计该列中值的个数
sum(<列名>)计算该列的总和
avg(<列名>)计算该列的平均值
max(<列名>)求该列的最大值
min(<列名>)求该列的最小值

2.4.5连接查询

七类连接查询

d2e2e90996ec4731aca89be4321b027c.png

语句描述
inner join只要表中至少有一个匹配,就返回匹配的行
right join会从右表中返回所有的值,即使左表没有与其匹配的值
left join会从左表中返回所有的值,即使右表没有与其匹配的值

注意:A inner join B A为左表,B为右表

-- 查询student表中没参加考试的同学的stuNo,sex,email,
-- 由于没参加考试的同学在sc表中不会有数据,
-- 我们只需要连接sc,student两张表并查出student表中存在而sc表中无数据的同学
select st.stuNo,sex,email
from student as st
right join sc as s
on st.stuNo=s.stuNo

2.4.6自连接

本质:将一张表拆分成多张表

将表A进行自连接

select a.<列名> as '父栏目',b.<列名> as '子栏目'
from A as a, A as b
where b.<父ID>=a.<ID>

2.4.7嵌套查询

本质:where条件为select查询

select <列名1>[,<列名1>...] from <表名> where <列属性> in(
   select <列名1>[,<列名1>...] from <表名> where <条件>
)
-- 查询参加考试成绩不及格的同学的stuNo,sex,email
select stuNo,sex,email
from student
where stuNo in (select stuNo from sc where score<60
)

2.4.7查询总结

849694d6412442d198c1345b55e1f836.png

3.实务操作

事务的4个特性:

  • 原子性(Atomicity):事务中的操作要么都执行,要么都不执行

  • 一致性(Consistency):事务执行前后总数不变

  • 隔离性(Isolation):多个事务并发执行互补影响

  • 持续性(Durability):事务一旦提交将会不可改变

在一张表中操作事务步骤

  1. 关闭事务自动提交

  2. 开启事务

  3. 书写具体的事务逻辑

  4. 事务成功执行则提交事务

  5. 事务执行出错则回滚事务

  6. 开启事务自动提交

-- 关闭事务自耦东提交
set autocommit=0
-- 开启事务
start transaction 
-- 书写事务逻辑(模拟转账A给B转账100)
update <表名> set money=money-100 where name='A'
update <表名> set money=money+100 where name='B'
-- 提交事务
commit
-- 回滚
rollback
-- 开启事务自动提交
set autocommit=1
-- 注意事务一旦提交之后将无法回滚,这是事务持续性的表现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不要再卷了Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值