iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >📖Mysql基本操作
  • 485
分享到

📖Mysql基本操作

摘要

??Mysql基本操作 shell 命令 -u后输入用户名 -p后用于输入用户密码 mysql -uroot -proot 数据库 显示所有数据库 show databases; 创建数据库 create database 数据库名称;


	📖Mysql基本操作
[数据库教程]

??Mysql基本操作

shell 命令

-u后输入用户名 -p后用于输入用户密码

mysql -uroot -proot

数据库

显示所有数据库

show databases;

创建数据库

create database 数据库名称;

删除数据库

drop database 数据库名称;

查看创建修改后的数据库详细信息

show create database 数据库名称;

选择数据库

use 数据库名称;

创建数据表,即在已存在的数据库中建立新表,必须先使用use指定数据库

create table 表名(
    字段名 数据类型[完整型约束条件],
    字段名 数据类型[完整型约束条件],
    字段名 数据类型[完整型约束条件]
);

删除数据表

drop table 表名

修改表名

alter table 旧表名 rename 新表名

查看所有数据表

show tables;

查看数据表详情

show create table 表名;

使用G使结果更美观

show create table 表名G;

查看数据表详情-2

desc 表名;

定义主码

## 方法一
## 定义属性时,说明主码

create table s1(
    id int primary key,
    sname varchar(10)
);

## 方法二
## 定义完所有属性后,说明主码

create table s2(
    id int,
    sname varchar(10),
    primary key(id)
);

## 多个属性为主码时
## 必须使用第二种方法

create table s3(
    id int,
    sno int,
    sname varchar(10),
    primary key(id, sno)
);

定义外码

create table c(
    cno int,
    cname varchar(10),
    cpno int,
    primary key(cno),
    foreign key (cpno) references c(cno)
    // c(cno)表示它参考的是c表中的cno
    // 故cpno的值有两种 空值NULL 或 存在的cno的值
);

字段

添加字段

alter table 表名 add 字段名 数据类型

删除字段

alter table 表名 drop 字段名

修改字段名

alter table 表名 change 旧字段名 新字段名 新数据类型

修改字段的数据类型

alter table 表名 modify 字段名 数据类型

修改字段在表中的排列位置, 放到第一或某个字段名后;

alter table 表名 modify 字段名1 数据类型 first(after 字段名2)

也可以增加一个新字段的同时决定它的位置

alter table 表明 add 字段名1 数据类型 first(after 字段名2)

表中数据

查看表中的数据

select * from 表名;

为表中字段添加数据

# 有主码时,必须给主码一个值
insert into 表名(字段名1, 字段名2, ...)
values(值1, 值2, ...);

# 简写: 必须为所有字段都插入值
insert into 表名
values(值1, 值2, ....);

## 一次插入多个数据
insert into 表名(字段名1, 字段名2, ...)
values(值1, 值2, ...),
(值1, 值2, ...),
(值1, 值2, ...);

修改数据

update 表名
set 字段名=值1[,字段名2=值2 ...]
[where 条件表达式]

where表示条件,例如where id=1表示只更改id=1的数据

没有where时会统一修改该字段名的所有数据

条件里面使用null时 where is null

提示: 有外码时,先插入其他数据,再更新外码

删除表数据

delete from 表名 [where 条件表达式]

单表查询

select [*][字段名1,字段名2...]
    from 表名
    [ where 条件表达式 ]
    [ order by 字段名 [asc|desc] ]
    [ group by 字段名 [Having条件表达式] ]
    [ limit [num][num1,num2] ]

查询(去除重复结果)

select distinct 字段名 from 表名;

where

where后都可以用 orand

in用来判断某个字段的值是否在指定集合中, not in用来判断不在

where 字段名 [not] in(元素1,元素2...)

判断字段的值是否在某个范围内

where 字段名 [not] between 值1 and 值2

模糊查询

where 字段名 [not] like ‘匹配字符va串‘

匹配字符串中使用通配符: %表示单个或多个字符, _表示单个字符

空值查询

where 字段名 is [not] null

排序和记录数

asc 升序, desc 倒序

asc 可以省略,因为 order by 默认是升序.

limit[num] 从第0个开始,查看num个数据

limit[num1,num2] 从num1开始,查看num2个数据

select 字段名
    from 表名
    order by 字段名 asc[desc]
    limit [num][num1,num2];

统计记录的条数

查询记录条数
select count(字段名) [重命名] from 表名;

查询去除重复项后的记录总数
select count(distinct(字段名)) [重命名] from 表名;

聚合函数

例:

select avg(grade) 平均分, max(grade) 最高分, min(grade) 最低分 from sc;

平均分 最高分 最低分
88.4000 96 70

group 分组

group by 字段名 [having条件表达式]

例:

对表sc, 根据cno进行分组, 显示不同组avg(grade)>=90max,min,avg,sum 数据

select max(grade),min(grade),avg(grade),sum(grade)
    from sc
    group by cno
    having avg(grade)>=90;

多表连接查询

基础概念

笛卡尔积 : 左表的每一行数据 与 右表的每一行数据 组合

交叉连接 cross join : 笛卡尔积

内连接 inner join : 两个表先进行笛卡尔积, 然后只保留 具有相同数据 的行数据

左外连接 left join : 在内连接的基础上, 把 左表 舍弃的数据加入进来

右外连接 right join : 在内连接的基础上, 把 右表 舍弃的数据加入进来

内连接也叫自然连接

where 实现表的连接

自身连接

表c

cno cname teacher cpno
1 数据库_设计 Feng 2
2 数据结构 Huang 3
3 C语言 NULL NULL
# 查询每门课程的先修课程 cpno
# c1 c2 都是 c 表
# 相当于把 c1 c2 当做 c类 的 实例对象

select c1.cname, c2.cname
from c c1, c c2
where c1.cpno = c2.cno;

内连接 (自然连接)

# 因为两个表都有sno字段, 我们必须明确指定显示的是哪一个表的 sno
# 又因为我们指定了s.sno=sc.sno , 所以显示 s.sno 或 sc.sno 是相同的

select s.sno, sname, grade
from s, sc
where cno=1 and s.sno=sc.sno;

join 实现表的连接

交叉连接

select * from 表1 cross join 表2;

内连接 (自然连接)

# 可以省略 inner

select 查询字段
from 表1 inner join 表2
on 表1.关系字段 = 表2.关系字段

左外连接 , 右外联接

select 查询字段 
from 表1 left[right] join 表2
on 表1.关系字段 = 表2.关系字段

例:

select s.sno, sname, sclass, cno, grade
from s left join sc
on s.sno = sc.sno;

嵌套查询 (子查询)

[not] in

# 查询选修了2号课程的学生姓名

select sname
from s
where sno in(
    select sno
    from sc
    where cno=2
);

any

将表达式与子查询的结果比较,只要有一个返回结果满足比较条件,就是符合条件的查询结果

select

all

将表达式与子查询的结果比较,所有的返回结果满足比较条件,就是符合条件的查询结果

将子查询的结果插入指定表中

INSERT INTO <表名> [(<属性列1> [,<属性列2>...)] 子查询;

保存子查询的结果

# 第一步:建表
CREATE TABLE deptage(sdept CHAR(15),avgage INT);

# 第二步:插入数据
INSERT INTO deptage(sdept,avgage)
  SELECT sdept,AVG(Sage)
  FROM s
  GROUP BY sdept;

带子查询的修改数据

# 将计算机科学系全体学生的成绩置零

UPDATE sc
SET grade=0
WHERE sno in(
    SELETE sno FROM s 
    WHERE sdept=‘CS‘
);

带子查询的删除数据

# 删除计算机科学系所有学生的选课记录

delete from sc
where sno in(
    selete sno
    from s
    where sdept=‘CS‘
);

集合查询

并查询 uNIOn

查询块1

union

查询块2

把两个查询块的结果,并集

参加UNION操作的各结果表的列数必须相同;对应项的数据类型也必须相同

交查询 intersect

差查询 except / minus

视图

视图可以从已有的表中提取出想要的字段

组合成一个你想要的类似表的东西

对视图的操作,会影响原表的数据


创建视图

create
view <视图名> [(<列名>)]
as <子查询>
[with check option]

-- 加上with check option后就不能增删改(不满足子查询里where条件)的数据

修改视图

create or replace
view <视图名> (列名 列名 ...)
as <子查询>
[with check option]

删除视图

drop view 视图名,视图名2...

查看视图,修改数据,修改字段 都与表操作相同

update 修改数据时,不能同时修改两个或多个表以上 中的数据

例如sc的grade和s的sname,不能同时修改它俩

删除数据时, 如果该视图包含两个表的信息,会没办法删除

范例

create 
view view_m 
as select * from s where ssex=‘男‘;

insert into view_m
values(20,‘B‘,‘男‘,‘计科17-2‘,‘MA‘,20);

索引

一般对经常查询的内容创建索引

查看是否使用了索引

explain select * from t where sname="a";

创建索引,在已有表上创建

create [unique|fulltext|spatial] index 索引名 on 表名(字段名[asc|desc]);

范例:
create index index_sage on s(sage);

alter table 表名 add [unique|fulltext|spatial] index 索引名(字段名[asc|desc])

范例:
alter table s add index index_sage(sage);

创建索引,新建表时创建 普通索引

create table t (
  id INT PRIMARY KEY auto_increment,
  sname VARCHAR(20),
  sage INT,
  index(sanme)
);

创建索引,新建表时创建 唯一索引

create table t (
  id INT PRIMARY KEY auto_increment,
  sname VARCHAR(20),
  sage INT,
  unique index(sanme)
);

如果不加索引名,那么Mysql会以索引的第一个字段的名字来命名

而如果一个表下有多个索引的第一个字段都是相同的,

那么索引名会在字段名后加序数

create table t2 (
  id INT PRIMARY KEY auto_increment,
  sname VARCHAR(20),
  sage INT,
  index(sname),
  index(sname,id)
);

index(sname)的索引名是sname
index(sname,id)的索引名时sname_2

删除索引

drop index 索引名 on 表名

存储过程(函数)

查询

-- 例1:统计一共有多少名学生

delimiter //
create procedure dp_s_count(out num int)
begin
	select count(*) into num from s;
end; //
 
 -- 调用存储过程

call dp_s_count(@snum);
select @snum 总人数;

 -- 例2 变量:Mysql中变量不需要声明,可以直接使用@
 #使用set时可以用“=”或“:=”,
 #但是使用select时必须用“:=赋值”
  #第一种用法
  
  set @a=1;
  SELECT @a;
  
  #第二种用法
  
  SELECT @c:=1;
  
-- 例3:通过使用declare 声明变量
create table test(id int);

 delimiter//
 create procedure sp1(in p int)
 begin
   declare v1 int;
   set v1=p;
   insert into test(id) values(v1);
 end;//
 
 delimiter//
 create procedure sp2(in p int)
 begin
   insert into test(id) values(p);
 end;//
 #上述代码表示的含义:
 
 -- 调用存储过程
call sp1(1);

 -- 查看test表 
 SELECT * FROM test;
 
 -- 例4:存储过程返回数据集
 -- 统计男女生的总人数
 
delimiter //
create procedure sp_ssex()
begin
	select ssex, count(sno) 人数 from s group by ssex;
end; //
 
 -- 调用
call sp_ssex();

 
 -- 例5:创建一个简单的存储过程,输出hello world,并执行该存储过程。
 SELECT "hello";

delimiter //
create procedure hello()
begin
	select "hello world";
end; //

-- 调用
call hello();



-- 例6:创建一个带输入参数的简单存储过程: 
#计算某名学生所选课程总数,并执行该存储过程。
select count(sno) from sc where sno=1;

delimiter //
create procedure sp_sc_num(in id int)
begin
	select count(sno) from sc where sno=id;
end; //

-- 调用
call sp_sc_num(1);



-- 例7:创建一个测试表test1(id int,sname varchar(10)),
#创建一个含有两个输入参数的存储过程,用来给test1表插入数据
create table test(id int, sname varchar(10));

delimiter //
create procedure p_insert_two_param(in p1 int, in p2 varchar(10))
begin
	insert into test values(p1,p2);
end; //


-- 调用
call p_insert_two_param(1, "zy");


-- 例8:统计某课程的选课人数,
#创建带有一个输入参数和一个输出参数的存储过程。
#并执行该存储过程。
delimiter //
create procedure p_in_and_out(in p1 int, out p2 varchar(10))
begin
	insert into test(id) values(p1);
	select count(*) into p2 from test;
end; //


-- 调用
#在调用带有输出参数的存储过程时
#输出参数必须是一个带@符号的变量
call p_in_and_out(3,@num);

select * from test;
select @num;


-- 例9:创建一个不带有任何参数的存储过程,用来统计学生表中的男女人数
   #并执行该存储过程
   
delimiter //
create procedure p_num_man_and_women()
begin
	select ssex, count(sno)人数 from s group by ssex; 
end; //   
   
   
   -- 调用
call p_num_man_and_women();

删除

-- 例10:删除存储过程
   DROP Procedure  <存储过程名>;(只能一个一个的删除)
   drop procedure sp_ssex_count,sp_c_count; -- 错误

触发器

参考地址: MySql触发器使用

-- 例1:利用触发器实现学生与成绩表学生编号上的级联更新。
delimiter //
create trigger update_sc_sno after update on s for each row
begin
	update sc set sno = new.sno where sno = old.sno;
end; //

 
  
-- 验证
set foreign_key_checks=0;
update s set sno = 1 where sno = 11;
 
-- 如果发生错误
  
  
-- 例2:利用触发器实现学生与成绩表学生编号上的级联删除。
insert into sc values(9,1,80);
insert into s(sno) values(9);

delimiter //
create trigger del_sc after delete on s for each row
begin
	delete from sc where sno = old.sno;
end; //

delete from s where sno = 9;
  
  
-- 验证
set foreign_key_checks=0;
delete from s where sno = 9;
  
-- 如果发生错误
  
  
  
-- 例3:在学生基本情况表(s)上建立一个插入触发器,
#实现当向表中插入一条记录时系表(sdept)相应的系人数自动加1。

#1创建表
create table t_sdept(
id int primary key auto_increment,
sdept_name varchar(10),
s_num int);

#2表中插入数据
insert into t_sdept(sdept_name,s_num)
select sdept,COUNT(sno) from s group by sdept;

#3创建触发器

delimiter //
CREATE TRIGGER sdept_oneplus after insert on s for each row
BEGIN
  update t_sdept set s_num = s_num + 1 where sdept_name = new.sdept;
END; //

#4验证
insert into s values(9,"夏一","女","计科17-1","IS",20);
select * from s;
select * from t_sdept;

事务

-- 银行转账例子
#创建账户表
create table account(
  id int primary key auto_increment,
  name varchar(20),
  money int
);

#表中插入数据
insert into account
values(1, "张三",1000),
(2,"李四",0);


#查看表中数据
select * from account;

#创建一个触发器(触发器的作用是使得每个账号的钱不少于1块钱)
##  delimiter$$表示将语句的结束符;改成$$

delimiter $$
create trigger tri_account_money before update on account for each row
begin
  if new.money<1 then
    set new.money = old.money;
  end if;
end; $$



-- 模拟转账:张三转账1000元给李四
update account set money = money - 1000 where name="张三";
update account set money = money + 1000 where name="李四";
rollback;
 

-- 转账后账户余额:
张三 1000 
李四 1001

-- 撤销刚才的事务
rollback; #撤销刚才的事务(没有起作用)
 
 
-- 通过事务实现转账业务
#每条单独的SQL语句视为一个事务
#MySQL默认状态,事务会自动提交,
#关闭默认提交状态后,-- 语法:set autocommit=0; 
#也可以手动开启、关闭事务;
#事务的手动开始:start transaction  或 begin  
#事务的手动正常结束--提交:commit;  (手动结束事务)
#事务的手动回滚(撤销)--提交:rollback;  (手动结束事务)

-- 例1:转账演示(转账失败rollback)
start transaction;
select * from account;
update account set money = money - 1000 where name="张三";
update account set money = money + 1000 where name="李四";
select * from account;
rollback;
select * from account;


-- 例2:转账演示(commit)张三给李四转100元
start transaction;
select * from account;
update account set money = money - 100 where name="张三";
update account set money = money + 100 where name="李四";
select * from account;
commit;

📖Mysql基本操作

原文地址:https://www.cnblogs.com/CodeAndMoe/p/13360044.html

您可能感兴趣的文档:

--结束END--

本文标题: 📖Mysql基本操作

本文链接: https://www.lsjlt.com/news/7379.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL 基本操作
    目录 数据库的列类型 数据库基本操作 SQL语言规范 SQL语句分类 查看表,使用表 管理数据库  创建数据库和表 删除数据库和表 向数据表中添加数据 查询数据表中数据 修改数据表的数据 删除数据表中数据 修改表明和表结构 扩展表结构(增加...
    99+
    2023-09-03
    mysql 数据库
  • mysql的基本操作
    一、库操作 创建库:create database 数据库的名字; 删除库:drop database 数据库的名字; 查看当前有多少个数据库:show databases; 查看当前使用的数据库:select databas...
    99+
    2023-01-31
    操作 mysql
  • 【MySQL基础】MySQL基本操作详解
    系列文章目录 第1篇:【MySQL基础】MySQL介绍及安装 第2篇:【MySQL基础】MySQL基本操作详解 文章目录 ✍1,数据库操作     🔍1.1,查看数据库     🔍1.2,创建数据库    ...
    99+
    2023-08-16
    mysql 数据库 服务器
  • MySQL基本操作和基于MySQL基本操作的综合实例项目
    文章目录 MySQL数据库的基本操作和基于MySQL数据库基本操作的综合实例项目1、 登入MySQL数据库1、创建数据库2、删除数据库3、综合案例——数据库的创建和删除cmd环境创建和删除数据...
    99+
    2023-09-04
    mysql 数据库 sql ide 数据库开发
  • MySQL workbench的基本操作
    1. 创建新的连接 hostname主机名输入“local host”和“127.0.0.1”效果是一样的,指的是本地的服务器。   需要注意的是,此处的密码在安装软件的时候已经设定。 点击【Test Connection】,测试连接...
    99+
    2023-10-22
    mysql 数据库
  • MySQL表的基本操作
    本篇内容主要讲解“MySQL表的基本操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL表的基本操作”吧! create table USER...
    99+
    2024-04-02
  • MySQL基本操作有哪些
    这篇文章主要介绍“MySQL基本操作有哪些”,在日常操作中,相信很多人在MySQL基本操作有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL基本操作有哪些”的疑惑...
    99+
    2022-12-05
    mysql
  • MYSQL基本命令和操作
    🖊作者 : D. Star. 📘专栏 : JAVA 😆今日提问 : 你好,我的朋友,在你的人生途中,会面临很多选择,不管选什么样的结果,我们都多少会有些后悔。如果是你,你会选择爱你的,还是...
    99+
    2023-08-24
    mysql 数据库
  • MySQL数据库基本操作
    目录 一、SQL语句 (mysql 数据库中的语言) 二、DDL 1.DDL语句 (1)创建新的数据库 (2)创建新的表  2.删除数据库和表  三、DML 1.insert插入新数据 2.update更新原有数据 3.delete: 删除...
    99+
    2023-09-01
    数据库 mysql sql
  • mysql基本操作有那些
    这篇文章给大家分享的是有关mysql基本操作有那些的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。文章目录一、SQL是什么?分类:二、关于数据库CRUD操作1.操作表list:2....
    99+
    2024-04-02
  • MySQL-Workbench数据库基本操作
    注: 部分概念介绍来源于网络 一、连接数据库 二、进入数据库   三、创建数据库         点击创建数据库按钮,输入数据库名称,选择编码方式,点击Apply。         Workbench会自动生成SQL语句,再次点击A...
    99+
    2023-10-12
    mysql
  • 超详细的MySQL基本操作
    MySQL MySQL 1 前言:啥是数据库 2 MySQL的安装 3 MySQL的结构 ...
    99+
    2023-09-16
    android 前端 后端
  • 【Mysql】数据库基础与基本操作
    🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风翻盘。 🛸Mysql专栏:Mys...
    99+
    2023-08-16
    mysql
  • MySQL的基本操作有哪些
    这篇文章主要介绍了MySQL的基本操作有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL的基本操作有哪些文章都会有所收获,下面我们一起来看看吧。1. pymysql的基本操作# ###&n...
    99+
    2023-06-28
  • [MySQL]基本数据类型及表的基本操作
    哈喽,大家好!我是保护小周ღ,本期为大家带来的是 MySQL 数据库常用的数据类型,数据表的基本操作:创建、删除、修改表,针对修改表的结构进行了讲解,随后是如何向数据表中添加数据,浅浅的提了一下表中数据的查询,更多相关...
    99+
    2023-08-31
    mysql 数据库 服务器 Powered by 金山文档
  • Python操作SQLLite(基本操作
      SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不受版权限制。 Python SQLITE数据库是一款非常...
    99+
    2023-01-31
    操作 Python SQLLite
  • SQLServer2008 基本操作
    SQLServer2008 基本操作 ...
    99+
    2024-04-02
  • MySQL基本语句操作有哪些
    这篇文章主要介绍了MySQL基本语句操作有哪些,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。数据库操作语句创建create database 数...
    99+
    2024-04-02
  • 详解mysql基本操作详细(二)
    前言 本文类容 1、数据库的几大约束 2、表与表之间的关系 约束: 主键约束: 作用:为了保证数据的有效性和完整性 mysql中常用的约束:主键约束(primary key) 唯一约束(unique) ...
    99+
    2024-04-02
  • MySQL - mysql服务基本操作以及基本SQL语句与函数
    文章目录 操作mysql客户端与 mysql 服务之间的小九九了解 mysql 基本 SQL 语句语法书写规范SQL分类DDL库表查增 mysql数据类型数值类型字符类型日期...
    99+
    2023-10-23
    mysql sql adb 数据库 carbon
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作