MySQL操作语句快速入门

一、连接数据库

mysql -h127.0.0.1 -P3306 -uroot -p
本机简写 mysql -u root -p

注:

  • 如果没有写-h127.0.0.1默认是本地连接
  • -P3306 连接的端口号为3306,如果没有写默认为3306
  • -uroot 用户是root
  • 最后一个-p是输入密码。

二、操作数据库

(1) 创建数据库

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification] ...]
create_specification:
 [DEFAULT] CHARACTER SET charset_name
 [DEFAULT] COLLATE collation_name
  • 大写的标识关键字
  • [ ]是可选项
  • CHARACTER SET:指定数据库采用的字符集
  • COLLATE :指定数据库字符集的校验规则。
创建一个名称为mydb1的数据库。(系统使用默认字符集:utf8,默认校验规:utf8_general_ci)
CREATE DATABASE mydb1;
创建一个使用gbk字符集的mydb2数据库。
CREATE DATABASE mydb2 CHARACTER SET gbk;
创建一个使用utf8字符集,校验规则为utf8_bin的mydb3数据库。
CREATE DATABASE mydb3 CHARACTER SET utf8 COLLATE utf8_bin;

(2) 查看数据库

显示数据库语句:
SHOW DATABASES
显示数据库创建语句:
SHOW CREATE DATABASE db_name

例:

查看当前数据库服务器中的所有数据库 
SHOW DATABASES;
查看前面创建的mydb3数据库的定义信息
SHOW CREATE DATABASE mydb3;

(3) 修改数据库

ALTER DATABASE db_name
[alter_spacification [,alter_spacification]...]
alter_spacification:
[DEFAULT] CHARACTER charset_name
[DEFAULT] COLLATE collation_name

对数据库的修改主要是修改数据库的字符集和校验规则。
mydb2字符集修改为utf8

ALTER DATABASE mydb2 CHARACTER SET utf8;

(4) 删除数据库

DROP DATABASE [IF EXISTS] db_name         
删除前面创建的mydb1数据库 DROP DATABASE mydb1;

(5) 选择数据库

进入数据库:USE db_name;
进入数据库mydb2:USE mydb2;
查看当前所选的数据库: SELECT DATABASE();

三、操作表

(1) 创建表

CREATE TABLE table_name
    (
        field1  datatype,
        field2  datatype,
        field3  datatype,
    )[character set 字符集] [collate 校对规则]
    field:指定列名 datatype:指定列类型
创建一个员工表employee 
create table employee(
    id int primary key auto_increment,
    name varchar(20) unique,
    gender bit not null,
    birthday date,
    entry_date date,
    job varchar(40),
    salary double,
    resume text
);

(2) 查看表

查看表结构:desc tabName;
查看当前数据库中所有表:show tables;
查看当前数据库表建表语句 show create table tabName;
查看表的相关信息:SHOW TABLE STATUS;
显示employee表的信息
show table status like 'employee' \G;

(3) 修改表

ALTER TABLE tableName  ADD/MODIFY/DROP/CHARACTER SET/CHANGE  (column datatype [DEFAULT expr][, column datatype]...);
修改表的名称:rename table 表名 to 新表名;

在上面员工表的基本上增加一个image列。
alter table employee add image blob;
修改job列,使其长度为60alter table employee modify job varchar(60);
删除gender列。
alter table employee drop gender;
表名改为user1。
rename table employee to user1;
修改表的字符集为gbk
alter table user1 character set gbk;
列名name修改为username
alter table user1 CHANGE name username varchar(20);

(4) 删除表

DROP TABLE tab_name;
删除user1表 drop table user1;

四、操作表记录CRUD

(1) INSERT

INSERT INTO table [(column [, column...])] VALUES (value [, value...]);
插入的数据应与字段的数据类型相同。
数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
在values中列出的数据位置必须与被加入的列的排列位置相对应。
字符和日期型数据应包含在单引号中。
插入空值:不指定或insert into table value(null)
如果要插入所有字段可以省写列列表,直接按表中字段顺序写值列表
使用insert语句向表中插入了四个员工的信息
insert into employee (id,name,gender,birthday,entry_date,job,salary,resume)values (null,'张飞',1,'1999-09-09','1999-10-01','打手',998.0,'老大的三弟,真的很能打');
insert into employee values (null,'关羽',1,'1998-08-08','1998-10-01','财神爷',9999999.00,'老大的二弟,公司挣钱都指着他了');
insert into employee values (null,'刘备',0,'1990-01-01','1991-01-01','ceo',100000.0,'公司的老大'),(null,'赵云',1,'2000-01-01','2001-01-01','保镖',1000.0,'老大贴身人');

(2) UPDATE

UPDATE  tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]  
UPDATE语法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要给予哪些值。
WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行
将所有员工薪水修改为5000元。
update employee set salary = 5000;
将姓名为’张飞’的员工薪水修改为3000元。
update employee set salary = 3000 where name='张飞';
将姓名为’关羽’的员工薪水修改为4000,job改为ccc。
update employee set salary=4000,job='ccc' where name='关羽';
将刘备的薪水在原有基础上增加1000元。  
update employee set salary=salary+1000 where name='刘备';

(3) DELETE

  • 如果不使用where子句,将删除表中所有数据。
  • Delete语句不能删除某一列的值(可使用update)
  • 使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。
  • 同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。
  • 外键约束
    删除表中数据也可使用TRUNCATE TABLE 语句,它和delete有所不同,参看mysql文档。
delete from tbl_name [WHERE where_definition]    
删除表中名称为’张飞’的记录。
delete from employee where name='张飞';
删除表中所有记录。
delete from employee;
使用truncate删除表中记录。
truncate table employee;

(4) SELECT

1、基本查询

SELECT [DISTINCT] *|{column1, column2. column3..} FROM  table;
查询表中所有学生的信息。
select * from exam;
查询表中所有学生的姓名和对应的英语成绩。
select name,english from exam;
过滤表中重复数据
select distinct english from exam;
在所有学生分数上加10分特长分显示。
select name , math+10,english+10,chinese+10 from exam;
统计每个学生的总分。
select name ,english+math+chinese from exam;
使用别名表示学生总分。
select name as 姓名 ,english+math+chinese as 总成绩 from exam;
select name 姓名 ,english+math+chinese 总成绩 from exam;
select name english from exam;

在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/20200525155654784.png

2、使用where子句进行过滤查询


查询英语最大值的信息 
select * from exam where english=(select max(english) from exam );
查询姓名为张飞的学生成绩
select * from exam where name='张飞';
查询英语成绩大于90分的同学
select * from exam where english > 90;
查询总分大于230分的所有同学
select name 姓名,math+english+chinese 总分 from exam where math+english+chinese>230;
查询英语分数在 80100之间的同学。
select * from exam where english between 80 and 100;
select * from exam WHERE english >= 80 AND english <= 100;
查询数学分数为75,76,77的同学。
select * from exam where math in(75,76,77);
查询所有姓张的学生成绩。
select * from exam where name like '张%';/*%表示0个到多个*/
select * from exam where name like '张__';/*_表示1个*/
查询数学分>70,语文分>80的同学。
select * from exam where math>70 and chinese>80;

在这里插入图片描述

3、使用order by关键字对查询结果进行排序操作

SELECT column1, column2. column3.. FROM table where... order by column asc|desc;
asc 升序 -- 默认就是升序  desc 降序
对语文成绩排序后输出。
select name,chinese from exam order by chinese desc;
对总分排序按从高到低的顺序输出
select name 姓名,chinese+math+english 总成绩 from exam order by 总成绩 desc;
对姓张的学生成绩排序输出
select name 姓名,chinese+math+english 总成绩 from exam where name like '张%' order by 总成绩 desc;

4、聚合函数

(1)Count – 用来统计符合条件的行的个数
统计一个班级共有多少学生?
select count(*) from exam;
统计数学成绩大于90的学生有多少个?
select count(*) from exam where math>70;
统计总分大于230的人数有多少?
select count(*)from exam where math+english+chinese > 230;
(2)SUM – 用来将符合条件的记录的指定列进行求和操作
统计一个班级数学总成绩?
select sum(math) from exam;
统计一个班级语文、英语、数学各科的总成绩
select sum(math),sum(english),sum(chinese) from exam;
统计一个班级语文、英语、数学的成绩总和
select sum(ifnull(chinese,0)+ifnull(english,0)+ifnull(math,0)) from exam;

在执行计算时,只要有null参与计算,整个计算的结构都是null
此时可以用ifnull函数进行处理

统计一个班级语文成绩平均分
select sum(chinese)/count(*) 语文平均分 from exam;
(3)AVG – 用来计算符合条件的记录的指定列的值的平均值
求一个班级数学平均分?
select avg(math) from exam;
求一个班级总分平均分?
select avg(ifnull(chinese,0)+ifnull(english,0)+ifnull(math,0)) from exam;
(4)MAX/MIN – 用来获取符合条件的所有记录指定列的最大值和最小值
~求班级最高分和最低分
select max(ifnull(chinese,0)+ifnull(english,0)+ifnull(math,0)) from exam;
select min(ifnull(chinese,0)+ifnull(english,0)+ifnull(math,0)) from exam;

5、分组查询


按商品分的 count是相同商品的个数
select count(product),product from orders group by product;
对订单表中商品归类后,显示每一类商品的总价
select product,sum(price) from orders group by product;
询购买了几类商品,并且每类总价大于100的商品
select product 商品名,sum(price)商品总价 from orders group by product having sum(price)>100;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
where子句和having子句的区别:
where子句在分组之前进行过滤 having子句在分组之后进行过滤
having子句中可以使用聚合函数,where子句中不能使用
很多情况下使用where子句的地方可以使用having子句进行替代

查询单价小于100而总价大于150的商品的名称
select product from orders where price<100 group by product having sum(price)>150;          

sql语句书写顺序: 
select from where groupby having orderby
sql语句执行顺序:
from where select group by having order by 

6、replace语句

官方语法:
REPLACE ( string_expression , string_pattern , string_replacement )
参数含义:
string_expression 要搜索的字符串表达式。string_expression 可以是字符或二进制数据类型。
string_pattern 是要查找的子字符串。string_pattern 可以是字符或二进制数据类型。string_pattern 不能是空字符串 (’’)。
string_replacement 替换字符串。string_replacement 可以是字符或二进制数据类型。
返回类型:
如果其中的一个输入参数数据类型为 nvarchar,则返回 nvarchar;否则 REPLACE 返回 varchar。
如果任何一个参数为 NULL,则返回 NULL。
最直接、最直白的意思:REPLACE(String,from_str,to_str) 即:将String中所有出现的from_str替换为to_str。

select REPLACE('abcdefghabc','abc','xxx')--输入的字符串为:abcdefghabc
结果为:xxxdefghxxx

select city_name,REPLACE(city_name,'市','') as city from tmp_city
将city_name列中的所有的“市”字去掉了

五、备份恢复数据库

备份:

在cmd窗口下 mysqldump -u root -p密码 -B 数据库名 > 数据库备份存储的⽂件路径
如:将mydb3库备份到文件:
mysqldump -u root -p -B mydb3> d:/333.sql
这时javacode.sql文件包含整个数据库,表,导入的数据。

还原:

第一种方法:在cmd窗口下 mysql -u root -p <d:/333.sql
第二种方法:在mysql命令下, source d:/333.sql

如果备份⼀个数据库时,没有带上-B参数, 在恢复数据库时,
第一种方法:需要先创建空数据库(可用其他名字),然后使⽤数据库,再使⽤source来还原;

create database mydb4;
use mydb4;
source d:/333.sql;

第二种方法:需要先创建空数据库,退出后在cmd窗口下 mysql -u root -p 数据库名<d:/333.sql来还原。

参考文章,感谢作者的倾情奉献https://blog.csdn.net/wujingjing_crystal/article/details/52305738

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章