微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据库基本操作增删改查,查询及数据库的备份

1、大小写敏感

~~~~~~~ 规定:一律用小写
lower_case_file_system
ON 大小写不敏感
OFF 大小写敏感
lower_case_table_names
lower_case_table_names = 0 时, MysqL 会根据表名直接操作,大小写敏感。
lower_case_table_names = 1 时, MysqL 会先把表名转为小写,再执行操作。
原因:底层操作系统是否区分大小写,底层 windows 不区分大小写, linux 区分大小写,所
以我们建立 test 数据库 TEST 数据库都是存在的
认为0,大小写敏感

2MysqL 的注释

(1)单行注释可以用 "#"
select 1 as xx #zheshizhuhsi
(2)单行注释的第二种写法用 "-- "
注意这个风格下 "-- 【空格】 " 也就是说 “--" 与注释之间是有空格的。
select 123 -- 这是注释
(3)多行注释可以用 /* */
(4)内联注释
/* ! */
这种注释在 MysqL 中叫做内联注释,当!后面所接的数据库版本号时,当实际的版本等于或
是高于那个字符串,应用程序就会将注释内容解释为 sql ,否则就会当做注释来处理。
的,当没有接版本号时,是会执行里面的内容的。

3、库操作语句

create database tt :建立数据库
show create database tt :查看数据库
drop database tt
create database if not exists ddd
alter database tt default character set 'utf8
报错处理

三、创建数据表

-- 1 、创建学生信息表 int(11): 显示宽度 11
-- 建立学生表
use tt;
create table if not exists `stu`(
`sid` int(11) UNSIGNED primary key auto_increment,
`name` varchar(20) not null,
`age` int,
`sex` enum('m','f','mid') DEFAULT 'mid',
`birth` datetime not null default Now(),
`email` VARCHAR(50),
`addr` VARCHAR(100) DEFAULT '北京',
`tel` VARCHAR(11)
)

--创建课程表
create table course(
        cid int(11) UNSIGNED primary key auto_increment,
        cname varchar(20) not null
)
drop table course;
desc course;
-- 创建成绩表
create table score(
        sid int(11) UNSIGNED not null,
        cid int(11) UNSIGNED not null,
        cj int(11) UNSIGNED not null,
        PRIMARY key(sid,cid),
        FOREIGN key(sid) REFERENCES stu(sid) on delete CASCADE on UPDATE CASCADE,
        FOREIGN key(cid) REFERENCES course(cid) on DELETE CASCADE on UPDATE
CASCADE
)ENGINE=INNODB DEFAULT CHARSET=utf8

删除数据表
drop table stu;
drop table course;
drop table score;

 

-- 4 、看数据表结构
desc stu
show tables;

四、修改表结构

-- 末尾增加字段
alter table stu add beizhu varchar(250) comment ' 备注 ';
desc stu
-- 开头增加一个字段
alter table stu add xxx varchar(20) FirsT;
-- 中间位置增加一个字段
alter table stu add mr varchar(1) not null DEFAULT ' ' AFTER birth;
-- 删除字段 xxx
alter table stu drop xxx
-- 修改字段 change MODIFY
alter table stu CHANGE telphone tel
varchar(11);
alter table stu MODIFY mr bit(1) not null default 0;
select * from stu

 

五、记录增删改  

-- 添加学生信息表 添加部分信息
insert into stu(name,age,sex,birth,email,addr,tel,beizhu)values(' 张 三 1',25,'m','1996-1-1','zhangsan@abc.com','上海','13900002222',' 学渗透 ');
insert into stu(name,age,sex,birth,email,addr,tel,beizhu)values(' 李 四 ',27,'m','1994-1-1','lisi@def.com','武汉 ','1393342222',' 学渗透 ');
insert into stu values(4,' 李四 2',22,'f','1999-1-1',1,'lisi@def.com',' 杭州 ','1393342422',' 学开发 ');
insert into stu values(5,' 李四 3',23,'f','1998-1-1',1,'lisi@def.com',' 北京 ','1393342422',' 学开发 ');

-- 添加 课程表
select * from course;
insert into course(cname) values(' 数据库 '),(' 数据结构 ');
insert into course(cname) values('C 语言 '),(' 计算机原理 '),(' 地理 '),(' 历史 ');

-- 添加 成绩表
select * from score;
desc score;
insert into score values(1,1,89),(1,2,56),(2,3,66),(2,2,34),(2,5,56),(4,1,90),(4,4,67),(4,2,56);
insert into score values (8,8,90);
select * from score;

-- 修改记录内容
update stu set mr=0 where name=' 李四 ';
update stu set name=' 李四 1' where sid=2;

-- 删除表记录 delete TruncATE
-- delete 删除指定记录
delete from stu where sid=5
-- delete 删除全部记录
delete from ss
delete from stu
-- truncate 删除
truncate table ss
truncate table stu

  删除表内数据

 

-- 别名 表设别名 字段设值别名
-- 表别名
select * from stu where sid=1;
select * from stu as tt where tt.sid=1;
-- 字段别名
select sid as 学号 ,name as 姓名 from stu;

MysqL 数据库查询实战操作

1、基本查询语句

-- 查询所有姓名为张开头的学生
select * from stuinfo where name like ' %';
-- 查询年龄在 25 岁以上的学生
select * from stuinfo where age>25;
-- 查询家住北京和上海的学生
select * from stuinfo where addr=' 上海 ' or addr=' 北京 ';
select * from stuinfo where addr in(' 上海 ',' 北京 ');
-- 没有留下邮箱的人
select * from stuinfo where email is null;
update stuinfo set email=null where sid=5;
-- 有留下邮箱的人
select * from stuinfo where email is not null;
-- 查询张三的信息
select * from stuinfo where name=' 张三 ';
-- 查询 sid 1 号的学生信息
select * from stuinfo where sid=1;
-- 查询已婚学生信息
select * from stuinfo where mr=1;
-- 查询邮箱为 def 的学生信息
select * from stuinfo where email like '%def%';
-- 查询邮箱首字母为 z l 的学生信息
select * from stuinfo where email like 'z%' or email like 'l%';
-- 查询成绩,按照降序排列 认是升序
select * from score order by cj desc;
-- 考第一名的学生成 limit 0,1 从位置 0 开始,取一个
select * from score order by cj desc limit 0,1;

-- 聚合函数

-- 总共多少学生
select count(*) as 学生总数 from stuinfo;
-- 求总分
select sum(cj) as 总分 from score;
-- 求平均分
select avg(cj) as 平均分 from score;
-- 求最高分
select max(cj) as 最高分 from score;
-- 求最低分 select min(cj) as 最低分 from score;
-- 男生多少人,女生多少人
select sex as 性别 ,count(*) as 个数 from stuinfo group by sex
-- 男生人数
select sex as 性别 ,count(*) as 个数
from stuinfo
group by sex
having sex='m';
select sex as 性别 ,count(*) as 个数
from stuinfo
where sex='m';
-- 每个学生的平均成绩
select sid,avg(cj) from score
group by sid;
-- 求每门课程的平均成绩
select cid,avg(cj) from score
group by cid;
-- 求学号为 2 的学生的平均成绩
select sid,avg(cj) from score
group by sid
having sid=2;
-- 每门课程的最高分是多少分
select cid,max(cj) from score
group by cid
-- 学生分组显示方式 GROUP_CONCAT()
select sid,group_concat(cid),group_concat(cj order by cj desc SEParaTOR ' ') from score
group by sid
-- 每个人平均分,从大到小排
select sid,avg(cj) from score
group by sid
order by avg(cj) desc

 

2 函数
-- 时间函
-- 时间函 Now() sysdate()
select Now();
select sysdate();
-- curtime 当前时间
select curtime(),curtime(2) -- curdate 当前日期
select curdate(),curdate()+2;
-- 时间变量
select CURRENT_TIME;
-- 时间函
SELECT Now(),date(Now()); -- 日期
SELECT Now(),time(Now());
SELECT Now(),year(Now()); --
SELECT Now(),quarter(Now()); -- 季度
SELECT Now(),month(Now()); --
SELECT Now(),week(Now()); --
SELECT Now(),day(Now()); --
SELECT Now(),hour(Now()); -- 小时
SELECT Now(),minute(Now()); -- 分钟
SELECT Now(),second(Now()); --
SELECT Now(),microsecond(Now()); -- 微秒
-- 找出出生在 1987 年的学生信息
select * from stuinfo
select * from stuinfo where year(birth)='1987';
-- 找出所有的 90
select * from stuinfo where year(birth) BETWEEN 1990 and 1999
-- 字符串函数 见表
-- length utf-8 汉字占有 3 个字节
select length('sql 课程 ') -- 返回 9
select CHAR_LENGTH('sql 课程 ') -- 返回 5
-- right left 左右截图
select right(' 买买提 , 土尔松 ',3)
select left(' 买买提 , 土尔松 ',3)
-- concat 字符串连接
select CONCAT(' 买买提 ',',',' 土尔松 ')
-- 数据库中所有姓李的改成姓王的
update stuinfo set name=concat(' ',RIGHT(name,CHAR_LENGTH(name)-1)) where name like '
%';
-- ORD 函数 显示 ascii
select ORD('2');
select ORD('abc');
-- mid 函数
-- mid() 函数用于得到一个字符串的一部分。这个函数 MysqL 支持,但不被 MS sql Server Oracle 支持。在 sql Server Oracle 数据库中,我们可以使用 sql SUBSTRING 函数或者
sql SUBSTR 函数作为替代。从指定位置取规定个数子串,下标 1 开始
select mid('abcd',2,2)
-- sleep 函数 延时
select sleep(5);

3 union 查询
union 查询就是把 2 条或者多条 sql 语句的查询结果,合并成一个结果集。
如: sql1: N 行, sql2: M 行, sql1 union sql2 ---> N+M
范例:
create table utemp1(
uid int PRIMARY key auto_increment,
name varchar(20) not null
)
insert into utemp1(name)values('zs'),('ls')
select * from utemp2
create table utemp2(
tid int primary key auto_increment,
age int not null
)
alter table utemp2 add tname varchar(25)
insert into utemp2(age) values(11),(19),(20)
select * from utemp1 UNION select * from utemp2
select * from utemp1 union select 1,2
p1 union select 1,2
1 、能否从 2 张表查询 union ?
可以 ,union 合并的是 " 结果集 ", 不区分在自于哪一张表 .
2 、取自于 2 张表 , 通过 " 别名 " 2 个结果集的列一致。那么 , 如果取出的结果集 , 列名字不一
, 还能否 union.
可以 , 而且取出的最终列名 , 以第 1 sql 为准
3 union 满足什么条件就可以用了 ?
只要结果集中的列数一致就可以 . (如都是 2 列或者 N 列)
4 union 后结果集 , 可否再排序呢 ?
可以的。 sql1 union sql2 order by 字段
注意 : order by 是针对合并后的结果集排的序 .
5 、如果 Union 后的结果有重复 ( 即某 2 , N , 所有的列 , 值都一样 ), 怎么办 ?
这种情况是比较常见的 , 认会去重 .
6 、如果不想去重怎么办 ?
union all
-- unoin 查询去重 union all 不去重

三、 MysqL 实现备份的两种方式
1 )使用 select into outfile load data infile 来进行备份和
恢复
--- 表数据(记录)导出
-- 导出为 txt 文件
先决条件:
1 "secure_file_priv" 设置为空
2 、对目录具有写权限
select * from utemp1 into outfile '/var/lib/MysqL-files/utemp1data.txt';
use student;
show VARIABLES like "secure_file_priv";
select * from utemp1 into outfile '/var/lib/MysqL-files/utemp1data.txt';
- - 恢复导入
-- load data 命令 -- 导入表数据 ( 记录 )
-- 将导出的 utemp1 表数据文件形如如下形式:导入到另一个 ll 中的 temp 表中
-- 要求两个 temp 表应该是字段类型相同
-- 准备工作 建一个数据库 ll 一个 temp
-- 不支持 远程 本地可以
create database ll;
desc utemp1;
use ll;
create table temp(
        id int primary key auto_increment,
        `name` varchar(20) not null
)
select * from temp;
-- MysqL (local)
load data infile '/tmp/utemp1data.txt' into table temp;

2 )使用 MysqLdump 来进行备份和回复
-- MysqLdump
-- dump 出表 utemp1
-- MysqLdump -uroot -p tt utemp1>utemp1.sql
-- dump 出库 tt
-- MysqLdump -uroot -p tt>tt.sql
-- dump 所有的数据库数据库
-- MysqLdump -u root -p --all-databases>MysqLdatabases.sql;
-- MysqL 数据库导入 "<" shell 里面操作
-- 新建一个数据库
create database tttt
-- 回到 MysqL 接口
-- MysqL -u root -p654321 tttt<tt.sql
-- 进入 MysqL 验证
Use tttt;
show tables;
表示导入成功
-- MysqL 数据库导入 "source"
进入 MysqL 操作
-- 先导出到 /var/lib/MysqL-files/demo1.sql 才能导入
cd /var/lib/MysqL-files 目录中
MysqLdump -uroot -p tt>tt.sql
MysqL -u root -p
create database aaaa;
use aaaa
source /var/lib/MysqL-files/tt.sql

原文地址:https://www.jb51.cc/wenti/3280164.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐