加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

操作Mysql数据库的基本步骤

发布时间:2023-09-06 14:21:58 所属栏目:MySql教程 来源:
导读:一、MySql数据库表操作

1、操作数据库

创建数据库:create database 数据库名;

删除数据库:drop database 数据库名;

修改数据库编码格式:alter database 数据库名 character set 要修改的字符集名
一、MySql数据库表操作
 
1、操作数据库
 
创建数据库:create database 数据库名;
 
删除数据库:drop database 数据库名;
 
修改数据库编码格式:alter database 数据库名 character set 要修改的字符集名称;
 
查询数据库:show databases; 查看所有数据库名称
 
选择数据库:use 数据库名;
 
2、操作表
 
创建表:create table 表名(
 
列名1 数据类型1,
 
列名2 数据类型2,...
 
);
 
常用列的数据类型:int double char varchar(字节长度) date:yyyy-MM-dd time: hh:mm:ss datetime: yyyy-MM-dd hh:mm:ss
 
删除表:drop table 表名;
 
修改表:
 
添加列:alter table 表名 add 列名 数据类型;
 
修改列数据类型:alter table 表名 modify 列名 数据类型;
 
修改列名:alter table 表名 change 旧表名 新表名 数据类型;
 
删除列:alter table 表名 drop 列名;
 
修改表名称:alter table 旧表名 rename to 新表名;
 
查询表:
 
操作Mysql数据库的基本流程
 
show tables; 查询数据库下所有的表的名称
 
desc 表名; 查询该表的表结构
 
3、操作表中数据
 
增加数据:
 
insert into 表名(列名1,列名2,...) values(值1,值2,....);
 
insert into 表名 values(按顺序给出所有列对应的值);
 
删除数据:
 
delete from 表名 where 限定条件;
 
delete from 表名; -- 删除全部无法删除自增长约束,可以回滚,而truncate table不可以回滚
 
truncate table 表名; -- 删除全部重置自增长约束,只能删除全表数据,不能删除单个数据
 
修改数据:
 
update 表名 set 列名1 = 值1 , 列名2 = 值2... where 限定条件;
 
基本查询数据:
 
select * from 表名; 查看所有列
 
select 列名1,列名2,...from 表名; 查看所需列
 
select 列名1 as '别名1',列名2 as '别名2',...from 表名; 查看所需列并给列起别名
 
select (列名1 + 列名2) as '别名' from 表名;
 
-- 和并列的时候,两个列的字段要类型一致;null参与的运算,结果都为null;ifnull 字段名称 会将null替换为0
 
4、表数据查询
 
1)where限制条件查询
 
=、!=、<>(不等于)、<、<=、>、>=;
 
between...and 在什么范围之间
 
IN(set);
 
is null 为空
 
is not null 不为空
 
and 并且
 
or 或者
 
not 非
 
2)模糊查询 like
 
通配符
 
_ 匹配单个任意字符
 
% 匹配对个任意字符
 
select * from 表名 where 列名 like '通配符组合';
 
3)去除重复记录 distinct
 
select distinct 列名 from 表名;
 
4)排序 order by ASC 默认升序排列 DESC 降序排列
 
select * from 表名 order by 列名 asc;
 
select * from 表名 order by 列名1 desc,列名2 desc;
 
5)聚合函数 ———— 纵向运算
 
count(): select count(* 或者不含null值的列名) from 表名;
 
max(): select max(列名) as '最大值' from 表名;
 
min(): select min(列名) as '最小值' from 表名;
 
sum(): select sum(列名) as '和' from 表名;
 
avg(): select avg(列名) as '平均值' from 表名;
 
6)分组查询 ———— 配合聚合函数使用 查出的数据才有意义
 
select 列名1 聚合函数 from 表名 where 限定条件 group by 列名1; 按列名1分组
 
select 列名1 聚合函数 from 表名 group by 列名1 having 限定条件;
 
where:在分组之前对条件进行限定 不满足条件,就不会参与分组
 
having:在分组之后,对结果集的筛选
 
7)分页查询
 
select * from 表名 limit 开始的记录索引,每一页显示的条数;
 
开始的记录索引 = (页码-1)*每一页显示的条数
 
* oracle:rownum 分页方言
 
* sqlserver:top 分页方言
 
5、约束
 
1)主键约束(primary key)
 
被修饰的字段唯一且非空;一张表只能有一个主键,这个主键可以包含多个字段
 
格式一:
 
create table 表名(
 
字段名称 字段类型 primary key
 
);
 
格式二:
 
create table 表名(
 
字段名称 字段类型;
 
primary key(字段名称)
 
);
 
格式三:
 
alter table 表名 add primary key(字段名1,字段名2..);
 
2)唯一约束(unique) ———— 被修饰过的字段唯一,对null不起作用
 
3)非空约束(not null) ———— 被修饰过的字段非空
 
4)外键约束(foreign key)
 
1)自增长约束 auto_increment
 
1.被修饰的字段类型支持自增. 一般int
 
2.被修饰的字段必须是一个key 一般是primary key
 
2)在多表的一方添加外键约束
 
alter table 外表名称 add foreign key(外键字段名称) references 主表名称(主键字段名称);
 
6、多表查询
 
1)内连接 a表,b表的连接
 
格式1:显式的内连接
 
select a.*,b.* from a [inner] join b on ab的连接条件;
 
格式2:隐式的内连接
 
select a.*,b.* from a,b where ab的连接条件;
 
2)外连接
 
格式1:左外连接
 
select a.*,b.* from a left [outer] join b on 连接条件;
 
先展示join左边的(a)表的所有数据,根据条件关联查询 join右边的表(b),符合条件则展示出来,不符合以null值展示.
 
格式2:右外连接
 
select a.*,b.* from b right [outer] join a on 连接条件;
 
先展示jion右边的表(a)表的所有数据,根据条件关联查询join左边的表(b),符合条件则展示出来,不符合以null值展示.
 
3)子查询 ———— 一个查询依赖另一个查询
 
例:SELECT emp_fname,emp_lname FROM employee WHERE emp_no = (SELECT emp_no FROM works_on WHERE enter_date = '1998-01-04 00:00:00');
 
select 列名 from 表名 where 列名 = (select 列名 from 表名 where 限定条件);
 
二、储存过程 ———— 带有逻辑的sql语句
 
1、特点
 
1)执行效率非常快,储存过程是在数据库的服务器端执行的
 
2)移植性很差,不同数据库的储存过程是不能移植的
 
2、语法
 
创建储存过程
 
delimiter $
 
create procedure test(in 输入参数名 数据类型,out 返回值名 数据类型)
 
-- 也可以没有参数和返回值
 
begin
 
-- 多条需要执行的sql语句
 
if 输入参数名 = 值1 then
 
set 返回值名 = '返回值1';
 
if 输入参数名 = 值2 then
 
set 返回值名 = '返回值2';
 
else
 
set 返回值名 = '返回值3';
 
end if;
 
end $
 
调用存储过程:
 
call tset(输入参数值,@返回值名);
 
select @返回值名;
 
3、MySQL中的变量
 
1)全局变量(内置变量):作用域整个链接
 
-- 查看所有全局变量;show variables;
 
-- 查看某个全局变量:select @@变量名;
 
-- 修改全局变量:set
 
set @@character_set_client=gbk; 设置服务器端口接收的编码
 
set @@character_set_results=utf8; 设置显示的编码
 
2)会话变量:只存在当前一次连接中 如果这次链接断掉 会话变量就消失了
 
-- 定义会话变量:set @变量 = 值;
 
-- 查看会话变量:select @变量;
 
3)局部变量:比如存储过程中的变量 作用域在 begin和end之间
 
4、begin end间的逻辑sql语句
 
1)条件判断
 
if ..then ..set..;
 
else set..;
 
end if;
 
2)循环
 
whlie 变量名 判断符 值 do
 
set..;
 
set 变量名=变量名+1; -- 注意这块没有i++的说法
 
end whlie;
 
5、删除储存过程
 
drop procedure 储存过程名;
 
三、触发器 ———— 当一个操作发生时会触发另一个行为
 
创建触发器
 
create trigger 起个触发器名字 after增/改/删 on要增改删的表名 for each row
 
insert into 要记录的表名(字段名)values(‘增加了一条记录’);
 
//after insert on 添加
 
//after update on 修改
 
//after delete on 删除
 
例:
 
delimiter $
 
create trigger banji after insert on user for each row
 
begin
 
insert into loger values(NULL,'你增加了一条记录',NULL);
 
end $
 
insert into user values(NULL,'张三');
 
四、MySql中的函数
 
1、系统函数
 
直接调用即可.任何函数都有返回值,函数的调用是通过select调用.因为有返回值,所以只能用select 调用
 
1)截取字符串
 
substring(原字符串,起始位置,截取长度); mysql 中下标从1开始算
 
2)字符字节长度
 
set @username='你好世界';
 
char_length('@username') 字符长度  4 个
 
length('@username')  字节长度 12个
 
3)查找字符所在字符串的索引,没有返回0
 
select instr(@username,'好'); 返回2
 
4)按照指定长度填充指定字符串
 
lpad (@username,10,'要填充的字符') 左填充
 
例如: select lpad(@username,10,'欢迎'); 注意10个长度算上原来'你好世界'的这4个长度,也就是说欢迎填充了6个
 
rpad 右填充
 
5)insert 替换字符串
 
例如: select insert(@username,2,2,'哈哈'); 从第二个字符开始替换两个字符 替换成哈哈
 
6)strcmp(字符串1,字符串2) 比较两个字符串大小 按照字典顺序去比较
 
2、自定义函数
 
1)创建自定义函数
 
create function 函数名(参数列表可有可无) returns 数据类型  --规定要返回的数据类型
 
begin
 
函数体
 
返回值:return 返回类型(我们指定的类型);
 
end
 
2)使用函数
 
create function show() returns int
 
return 100;
 
-- 调用函数
 
select show();
 
-- 查看所有函数 show functions status;
 
-- 查看创建函数  show create function test;
 
-- 删除函数  drop function test;
 
3)例:
 
delimiter $
 
create function delById(uid int) returns int
 
begin
 
delete form user where id = uid;
 
return (select count(*) from user);
 
end $
 
select deById(7);
 
五、视图
 
1、概述:有结构的虚拟表,虚拟表的结构来源不是自己定义,而是从对应的基表中产生
 
视图可以更好的进行权限控制 比如对外隐藏我的一些基表的名称
 
2、创建视图
 
create view 视图名称 as select语句;
 
create view my_v1 as select * from student;
 
create view my_v2 as select a.字段名,b.字段名 from a,b where a.id=b.id;
 
3、查看视图
 
关于查询表的语句对于视图都是可以用的 除过show create view my_v1;
 
视图的执行:其实本质就是执行封装的select 语句
 
4、删除视图:drop view 视图名称
 
5、修改视图,其实是对原表的修改 alter view 视图名字 as 新的select语句
 
6、视图数据的操作
 
视图插入数据:
 
(1)多表视图不能插入数据
 
(2)单表视图中可以插入数据(如果视图中字段没有基表中不能为空的字段且没有默认值的字段,是插入不成功的)
 
(3)视图是可以向基表中插入数据的 (视图的操作是影响基表的)
 
视图删除数据
 
(1):多表视图不能删除数据
 
(2):单表视图可以删除数据,也会影响到基表
 
视图更新数据
 
单表视图,多表视图都可以更新数据
 
    更新限制:with check option
 
    例如:create view my_v1 as select * from student where age>30 with check option;
 
    表示视图数据的来源都是年龄大于30的,with check option 决定通过视图更新的时候,不能将已得到
 
    数据age>30的学生 改成age<30 的.
 
    那么:update  my_v1 set age=20 where id=1; 就会报错 不允许改 因为做了限制
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章