MySql命令大全,看着脑壳不疼,快来戳我吧

my sql命令  #注释


//启动mysql服务
net start mysql


//停止mysql服务
net stop mysql


//连接数据库
mysql -u root -p 回车
输入密码:root
或者   -u 用户名(user) -p密码(password)
mysql -uroot -proot回车
或者 
mysql -h服务器主机地址(本机地址是localhost) -u用户名 -p用户密码


//查看版本和当前用户
select version(),user();


//寻求帮助
? 后面接关键字(例:?show  )查询所有show的方法语句


//退出连接
exit;




//展示所有的库
show databases;


#查看某个数据库
SHOW CREATE DATABASE 数据库名;


//创建数据库  带中括号的都是可选的  避免错误
create database [if not exists] 数据库名 (例:my School);


//使用数据库
use 数据库名 (my School);


//在图书馆里面  书本是存放信息的 
在MySQL里面  表是存放信息的载体


//删除数据库  带中括号的都是可选的  避免错误
drop database [if exists]数据库名(my School);




//展示库里面表的信息
show tables;


//设置字符类型
set names gbk;


//创建表c
//  primary key 主键(唯一 非空)  auto_increment 自增长 
// comment 注释  not null 不允许为空  default默认值  
create table if not exists 表名 (列名 类型 属性,列名 类型 属性)
create table studen t(name varchar(10),age varchar(10));


//往表里插入数据   列名和 数据必须对应
insert into 表名(列名,列名,列名)values(数据,数据,数据);
  
//插入多行数据
insert into 表名 values(数据,数据,数据),(数据,数据,数据);


//查询出来的结果放入到新的表中
create table `newstudent`(select `name`,`sex`from student)


//更新数据记录
update 表名 set 列名 =更新值[where更新条件]


//查询所有数据
select * from newstudent;


//修改表中的数据 
update `student` set `sex`='女'; 


//修改指定表中的数据
update `student` set `name`='李四' where `name`='张三'; 


//查询成绩小于等于60的人
select `name`,(scort+5) as `newscort` from `students` where `scort`<60;


//查询学生表中同名的学生姓名
SELECT studentName,COUNT(studentName) AS '人数'FROM student GROUP BY studentName HAVING COUNT(studentName)>=2


//删除成绩小于60的人的信息  只能删除数据  序号删不掉
delete from `students`where `scort`<60;


//查询所有数据
select * from students;


//模糊查询 所有姓李的
SELECT * FROM student WHERE studentName LIKE '李%';


//使用truncate删除 1.删除所有数据  2.删除的数据不能恢复  3.可以把自增的序号删掉  慎选
truncate table students:




//求平均分
select avg(成绩列) from 表名;


//求最大值  最小值


select max(成绩) as '最高分’from 表名;
select min(成绩) as '最低分’from 表名;


//求和
select sum(成绩列) as ''




//求表中的数据的数量  count(*) 效率比较慢  count(1)效率比较快select count(2) '数量' from students;


//拼接concat(str1,str2....)伪表
select concat('我叫','盘子','我有爸爸妈妈') as'个人介绍' from dual;


//替换从下标为为3的开始到下标为11的全部替换为后面的盘子
select insert('我叫盘子,我有爸爸妈妈',3,11,'盘子') as'替换后的字符串';


//将字符串中的所有字符变为小写
select loser('WO shi PAN zi');


//将所有字符串变为大写
select upper('wo SHI pan zi');


//留下包括下标为3的2个长度的字符串
select substring('我叫盘子,我有爸爸妈妈',3,2) as '截取' from dual;


 //查看表内容
 desc 表名;


//修改表
alter table(旧表名)rename[to](新表名);


//唯一性 ID是student表的主键
alter table student add constraint `pk_id` primary key `student`(`id`);


//添加外键
student表和result表之间做了关联
alter table `result`add constraint `fk_student_result` foreign key(`id`) references `student`(`id`);


//查询所有表数据
select * from 表名;


//查询个别数据
select 列名,列名 from 表名;


//删除表
drop table student;


//为了让sql命令更加完善  可以在删除之前判断是否存在该表
drop table if exists student;


//获取当前日期
select curdate();


//获取当前时间
select curtime();


//获取当前的日期和时间
select now();


//返回日期为一年中的第几周
select week(now());


//返回日期的年份
select year(now());


//返回时间的小时值
select hour(now());


//返回时间的分钟值
select minute(now());


//在日期的基础上加减天数
select adddate(now(),-1) as'日期' from dual;


//查看两个指定日期之间相隔多少天
select datediff(now(),2018-06-11) as'天数' from dual;


//ceil天花板  向上取整  下面取值为1
select ceil(1.00001) from dual; 


//floor底板  向下取整 下面取值为1
select floor(1.9999)from dual;


//rand 随机数
select rand()from dual;


//取1-10的随机整数   向上取整 随机*10
select ceil(rand()*10)from dual;


//得到2017-05-01和今天相差的月份
select ceil(datediff(now(),'2017-5-1')/30) as'月份' from dual;


//not exists  不存在 true create table    false 不执行 create table
create table if not exists student(name varchar(10));




//是空的
select * from `表名`where `列名` is null;
 
//不是空的
select * from `表名`where `列名` is not null;


//对成绩做一个排序  order by 列名 asc(升序)/desc(降序)
select * from `表名` order by 列名 desc/asc


//对subjectno做一个排序 在对成绩做排序
select * from  result order by subjectno,studentresult desc


//对查询结果做一个分页  limit(列的下标)(要显示的长度)
select * from result order by studentresult desc limit 4,4




//查询Java课程最近一次的考试  如果有80分以上的学员,显示分数在前一名的学生编号和成绩    (先分开查询)


//1.查询Java课程最近的考试
select max(examDate)from result;


//2.查询Java课程
select subjectNo from `subject` where subjectName='java logic';


//3.查询80分以上的学员
select subjectNo from result where studentResult >80;


// 简约以上分开查询  子查询 true 执行  false不执行
select studentNo AS'学生编号', studentResult AS'学生成绩' from result 
 where exists(select * from result where subjectNo=1 and examDate='2017-06-21'
 and studentResult>80)
 and studentResult>80
 order by studentResult desc
 limit 9;


// 整合以上简约查询  子查询 true 执行  false不执行
select studentNo AS'学生编号', studentResult AS'学生成绩' FROM result 
 where existsselect * from result where subjectNo=( select subjectNo from `subject` where subjectName='java logic')
  and examDate=select max(examDate)from result)
 and studentResult >80)
 and studentResult >80
 order by studentResult desc
 limit 9;


//多表查询  要求显示学生姓名,成绩,科目
 select student.`studentName`AS '学生姓名',result.`studentResult`as'成绩',subject.`subjectName`as '科目'
 from student,result,`subject`where  student.`studentNo`=result.`studentNo` 
 and result.`subjectNo`=`subject`.`subjectNo`






//多表查询  (添加别名) 要求显示学生姓名,成绩,科目
 select s.studentName as'学生姓名',r.studentResult as '成绩',su.`subjectName` as '科目'
from student as s,result as r,`subject` as su
where s.studentNo=r.studentNo and r.subjectNo=su.subjectNo
 
 
//分组 (对分组结果做处理)
select subjectNo,avg(studentResult)
from result group by subjectNo;


//只保留 平均值大于60分的科目成绩
//先where  再分组group by 
//实际需求  先分组group by 再筛选
//where group having 
//作用都是筛选   区别:执行的时机不一样
select subjectNo ,avg(studentResult)
from  `result` group by  subjectNo
having avg(studentResult)>60


//查询各个年级的学员人数  年级人数大于5 的信息
select gradeid as'年级',count(*) as'人数'
from student group by gradeid
having count(*)>5 


//查询各个年级的男女生
select gradeid as '年级',sex as'性别'
from student group by studentNo




//多表联合查询方式  查询姓名 成绩 科目
//内连接   inner join第二个表名 on (条件)inner join 第三个表名 on(条件)
//外连接包括   (左连接 ,右连接)
//左外连接   left outer join  第二个表名 on (条件)      左表(主表) 主表所有信息都会显示(如果从表中没有信息,则使用null填充)
//右外连接  right outer join  第二个表名 on (条件)      以从表为主  从表中有信息就显示  没信息就不显示 


//内连接的用法      添加别名  显示学生姓名,成绩,科目
select s.studentName as'姓名',r.studentResult as '成绩',su.subjectName as '科目'
from  student as s inner join  result as r on(s.studentNo=r.studentNo)
inner join `subject`as su on(r.subjectNo=su.subjectNo)  




//左连接的用法     添加别名  显示学生姓名,成绩,科目
select s.studentName as'姓名',r.studentResult as'成绩',su.subjectName as '科目'
from student as s left outer join result as r on(s.studentNo=r.studentNo)
left outer join `subject`as su on(r.subjectNo=su.subjectNo) 


//右连接     添加别名  显示学生姓名,成绩,科目
select s.studentName as'姓名',r.studentResult as'成绩',su.subjectName as '科目'
from student as s right outer join result as r on(s.studentNo=r.studentNo)
right outer join `subject`as su on(r.subjectNo=su.subjectNo) 






//视图


//查询学生视角
select studentName,sex from student;


//创建学生视角的视图(把查询的学生视角放进去)
create view students as (select  studentName,sex from student);


//显示学生视角视图
select * from  students;


//删除视图
//drop view [if exists] studens;




//使用内连接   实现多表联合查询视图


create view studentss as
select s.studentName as '姓名',r.studentResult as'成绩'
from student as s inner join  result as r on(s.studentNo=r.studentNo)


//查询多表联合查询信息
select * from  studentss;




//创建购物库  shop
CREATE DATABASE shop;
//应用shop表
USE shop;
//创建消费表  acount
CREATE TABLE acount(`name` VARCHAR (10),money DOUBLE (10,2));
//acount表里面存入信息
INSERT INTO acount VALUES ('a',2000),('b',10000);
//删除表数据
DELETE  FROM acount;
//查询表数据
SELECT * FROM acount;




//开启事物  1.begin  2.start  3.transaction
//代表一个事物的开始
//事物四个特性 : 
1.原子性(atomicity):一个事务是一个不可分割的工作单位.要么所有的语句都执行成功,要么所有的语句都不执行    
2.隔离性(isolation):一个事务的执行不能被其他事务干扰,在一个事务中添加修改的数据,不能被令一个事务读取或者修改.
3.一致性 (consistency) :事务必须是使数据库从一个一致性状态变到另一个一致性状态   
4.持久性 (durability) :指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响
//COMMIT 代表事物的结束


//创建购物库  shop
CREATE DATABASE shop;
//应用shop表
USE shop;
//创建消费表  acount
CREATE TABLE acount(`name` VARCHAR (10),money DOUBLE (10,2));
//acount表里面存入信息
INSERT INTO acount VALUES ('a',2000),('b',10000);
//删除表数据
DELETE  FROM acount;
//查询表数据
SELECT * FROM acount;


//关掉自动提交
SET autocommit=0;
//开启事务 用事务包起来形成一个整体
BEGIN;


UPDATE acount SET money=money-500 WHERE `name`='a';
UPDATE acount SET money=money+500 WHERE `name`='b';


//提交事物
COMMIT;
//回滚 (撤销)事物
ROLLBACK;


//还回 开启自动提交
SET autocommit=1;






*****索引准则
1.索引不是越多越好
2.不要对经常变动的数据加索引
3.小数据量的表建议不要加索引
4.索引一般加在查找条件的字段




#添加索引(便于理解,才一个表里多个索引,仅参考): PRIMARY KEY(主键(自动加索引))  unique(唯一索引)  index(常规索引)
#   fulltext(全文索引,要查的数据的量不能超过百分十五十,超过索引是没有用)  表默认是innoDB 修改表引擎为ENGINE=MYISAM 


#添加索引方式一:创建表,声明列属性时添加上
CREATE TABLE test1 (
id INT (4) PRIMARY KEY,
number VARCHAR (10) UNIQUE,
p VARCHAR (50),
q VARCHAR (20),
h TEXT,
#把p和q一起作为索引 index后是自定义索引名(不取名默认和列名一样)
INDEX `index_p` (p,q),
#把h作为索引
FULLTEXT (h)   
) ENGINE=MYISAM;




#添加索引方式二:创建表,将所有列都声明完毕后,再添加索引
CREATE TABLE test2 (
id INT (4),
number VARCHAR (10),
p VARCHAR (50),
q VARCHAR (20),
h TEXT,
PRIMARY KEY(id),
UNIQUE KEY(number),
#把p和q一起作为索引 index后是自定义索引名(不取名默认和列名一样)
INDEX `index_p` (p,q),
#把h作为索引
FULLTEXT (h)   
) ENGINE=MYISAM;




#添加索引方式三:先创建表,创建表完毕后,修改表,再添加索引
CREATE TABLE test3(
id INT (4),
number VARCHAR (10),
p VARCHAR (50),
q VARCHAR (20),
h TEXT
)ENGINE = MYISAM ;
#添加索引
ALTER TABLE text3 ADD PRIMARY KEY(id);
ALTER TABLE text3 ADD UNIQUE KEY (number);
ALTER TABLE text3 ADD INDEX(p,q);
ALTER TABLE text3 ADD FULLTEXT(h);




#全文索引
ALTER TABLE student ENGINE =MYISAM;


ALTER TABLE student ADD FULLTEXT (studentName);


 EXPLAIN SELECT * FROM student WHERE MATCH(studentName)AGAINST('李');
 
 
#删除索引
# 方法1
 DROP INDEX number ON test;
# 方法2
 ALTER TABLE test DROP INDEX number;
 #删除主键索引
ALTER TABLE test DROP PRIMARY KEY;
  
 #显示索引信息
 SHOW INDEX FROM student;
 


 一.DOS系统下的数据恢复和备份
    1.mysqldump命令备份 
mysqldump 和mysql同级的命令
mysqldump -- help|more 帮助你去查看mysqldump的可选参数
#导入整个bank数据库   使用mysqldump是Dos系统下的命令 
mysqldump -uroot -proot bank >G:/yy/bank.sql
#导入school数据库的某两个表
mysqldump -uroot -proot school student result >G:/yy/bank.sql
  
mysqldump -uroot -proot --skip-add-drop-table school student >G:/yy/school.sql
    2. source命令恢复 
        步骤: 1. 先登录服务器  2.再使用use选择要恢复的数据库名
       3.使用 source 脚本路径
          #恢复数据 
            source G:/yy/school.sql;  
       # mysql命令恢复  test是要恢复到的数据表名 < 脚本路径
    mysql-uroot -proot test <G:/yy/school.sql
 
 二.使用sqlyog工具来备份和恢复
直接点击数据库进行导入导出就行
注意事项: 
打钩的选项看清楚,别影响恢复
 
 三.使用sql命令方式来备份和恢复
#将school数据库里student表中的学号,姓名两列备份出去
    use  school;
#注意:备份出去的文件名不可以提前存在 (sql语句会帮你创建文件名)
            select studentNo,studentName into outfile 'G:/yy/school8.sql'from student;
#将备份出去的数据恢复到test数据库的stutable表中
步骤:1.使用数据库 2.创建新表和数据列名 
      3.从地址把数据导入进来
    use test;
    create table stutable(
id int(4),
sname varchar(20)
    )
load data infile 'G:/yy/school8.sql' into table stutable(id,sname)
#查询表内容
     select * from stutable;
 




绘制E-R图
1.实体 - 关系模型 - 例:客人张三  张三就是一个实体
2.属性 - 实体的体征 例:实体张三的入住日期
3.联系 - 两个或多个实体之间的关联关系
4.映射基数:一对一   一对多  多对一  多对多
5.实体关系图:1.矩形表示实体集(名词) 2.椭圆表示属性(名词) 3.菱形表示联系集(动词)  4.直线连接


第一范式:
保证数据表中的所有数据单位都不可再分,例如:Student里面包含了StudentID,name,age。这就是不满足第一范式!
(原子性的体现)
(一对一)
第二范式:
除了主键以外的其他列,都满足和主键有依赖关系;
例如:一个用户只有一种角色,而一个角色对应多个用户。则可以按如下方式建立数据表关系,使其满足第二范式。
user用户表,字段id,username,password,role_id
role角色表,字段id,name
用户表通过角色id(role_id)来关联角色表
(多(用户) 对一 (角色))
第三范式:
表中的列都和主键直接相关,而不是间接相关。 
一个用户可以对应多个角色,一个角色也可以对应多个用户
(多对多)




反范式化:


反范式化指的是通过增加冗余或重复的数据来提高数据库的读性能。
    例如:在上例中的user_role用户-角色中间表增加字段role_name。
反范式化可以减少关联查询时,join表的次数。














1.创建用户方式   127.0.0.1(回环地址)  localhost(本机)


--create user`用户名`@localhost
--创建一个普通用户并指向密码
create user `user`@`host`[identified by `password`];
eg:
create user `meixi`@localhost identified by `140622`;


注意:创建普通用户 ,仅有登录权限,没有对数据库操作的权限,需要进一步进行授权操作




2.授权操作


grant 指定权限 on 数据库名.表名 to 用户名@地址[identified by `password`];


eg:
--为用户meixi 授权 创建和删除权限
grant create,drop on bank.user to `meixi`@`localhost`;


--为用户meixi 对bank.user表进行select和update授权操作
grant select,update on bank.user1 to `meixi`@`localhost`;


--为用户 meixi 对bank.user表进行所有授权操作
grant all on bank.user1 to `meixi`@`localhost`;


注意:
1.在进行授权操作时 当前用户必须是管理用户状态
2.视图:是一个虚拟表(视图中的表数据是来源于其他表中的数据)




3.修改用户密码
--语法(登录后修改自己的密码):(推荐)
set password = password (`新密码`);


注意:
必须是登录以后才能修改密码


4.删除指定用户
drop user `用户`@`localhost`;




//获取地址
ipconfig






(复习  理论)


关于sql语句的curd;
   查询
select [*|distinct|聚合函数|子查询|as字段别名|字段列表]
from tableName where 条件表达式
[group by 字段名 having 条件表达式][limit n|m]
[order by aso|deso];


1.关于运算符:
   1.1模糊查询
like _ 表示任何一个字符 % 表示任何多个或0个字符


   1.2范围运算符 只能对数值型数据运算
between and
   1,3区间运算符
      可以用在 数值 字符
in ()
not in()
   1.4测试是否是null值
is null
is not null
2.聚合函数
count()统计个数 
sum()求和
avg()平均值
min()最小值
max()最大值




































































猜你喜欢

转载自blog.csdn.net/yy_pqh/article/details/80768741