mysql基础操作

Posted huxl1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql基础操作相关的知识,希望对你有一定的参考价值。

1mysql登录

mysql客户端程序:  交互式模式和命令模式两种

mysql命令

常用选项:

--host=host_name, -h host_name:服务端地址;

--user=user_name, -u user_name:用户名;

--password[=password], -p[password]:用户密码;

--port=port_num, -P port_num:服务端端口;

--protocol={TCP|SOCKET|PIPE|MEMORY}  协议

本地通信:

--socket=path, -S path

--database=db_name, -D db_name:  设默认库的

--compress, -C:数据压缩传输

--execute=statement, -e statement:非交互模式执行SQL语句;

技术分享图片

登入mysql后进行查询

技术分享图片

参数有两种,一种是全局GLOBAL   一种会话session

session会话是临时的,只对当前会话有效 且是立即生效的

GLOBAL 是全局的对以后新建了的会话生效 值得修改要求用户有管理权限

用set进行修改参数:

  SER  [SESSION|GLOBAL]  system_var_name = expr

技术分享图片

mysql的状态变量:

show  [GLOBAL|SESSION]  status  [LIKE | WHERE]

mysql的数据类型:

字符型:

  char(#) , binary(#):定长型 ; CHAR不区分字符大小写,而BINARY区分;

  VARCHAR(#), VARBINARY(#):变长型

  TEXT:TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT

  BLOB:TINYBLOB,BLOB,MEDIUMBLOB, LONGBLOB

数值型:

  浮点型:近似

  float , double , real , bit

  整型:精确

日期时间型:

  日期:DATE

  时间:TIME

  日期j时间:DATETIME

  时间戳:TIMESTAMP

  年份:YEAR(2), YEAR(4)

内建类型:

  ENUM:枚举

  SET:集合

类型修饰符:

 SHOW CHARACTER SET;  查看字符集

 字符型:NOT NULL,NULL,DEFALUT ‘STRING’,CHARACET SET ‘CHARSET’,COLLATION ‘collocation‘

整型:NOT NULL, NULL, DEFALUT value, AUTO_INCREMENT, UNSIGNED

日期时间型:NOT NULL, NULL, DEFAULT

SQL MODE:定义mysqld对约束等违反时的响应行为等设定;

常用的MODE: (可以来管控mysql行为的)当发生错误行为时这么办

TRADITIONAL

STRICT_TRANS_TABLES

STRICT_ALL_TABLES

SHOW  VARIABLES  LIKE  ‘sql_mode’    查看sql模型

技术分享图片

数据库:创建,修改,删除

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name CHARACTER SET [=] charset_name  COLLATE [=] collation_name

技术分享图片

查看当前使用的数据库

mysql> select database();
查看数据库使用端口
mysql> show variables  like ‘port‘;
查看数据库编码
mysql> show variables like ‘character%‘;

更改:

ALTER {DATABASE | SCHEMA} [db_name] CHARACTER SET [=] charset_name  COLLATE [=] collation_name

删除:

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

表的创建,

CREATE TABLE [IF NOT EXISTS] tble_name (col_name  data_typ|INDEX|CONSTRAINT);

mysql> create table mydata (id int not null,name char(5) );

 mysql> show tablese;    查看数据库下表

mysql> desc mydata;   查看表结构

查看支持的所有存储引擎:

mysql> SHOW ENGINES;

查看指定表的状态信息

mysql> show table status like ‘mydata‘G;

删除:

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name];

修改:

ALTER  TABLE tbl_name[alter_specification [, alter_specification] ...]

可修改内容:

  修改表:

modify :修改某字段属性
change :改变字段名称
add :添加字段
drop :删除字段
比如给刚才的表 students 添加一个字段 
alter table students add course varchar(100); 
默认添加字段在最后,我们添加了一个course 字段
想要将course字段的第一个字母改成大写,并且放在name字段前面。
alter table students chang course Course varchar(100) after name;
插入数据:
insert into  表名(字段1,字段2,.........)values (‘字符‘,数字........)
插入完成再使用select * from students;  查询表中所有数据看看
替换数据:replace into
 
修改数据:
update 表名  set  字段=值;  where 条件;
例如我们修改students 表中的字段的py1的性别 M 改为F
uptate students set sex=‘F‘where name=‘py1‘;
 
删除某行:
delete   from  students where name=‘py1‘
这里是删除掉name字段包含有py1的
 

索引:

创建

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [index_type] ON tbl_name (index_col_name,...)

查看 可以同时查多个表

SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name  [{FROM | IN} db_name] [WHERE expr]

mysql> show index from mydataG;

删除:

mysql> drop index mydex on mydata;

索引类型:

聚集索引、非聚集索引:索引是否与数据存在一起;

主键索引、辅助索引

稠密索引、稀疏索引:是否索引了每一个数据项;

视图:VIEW

虚表:存储下来的SELECT语句;

创建:

CREATE  VIEW view_name [(column_list)] AS select_statement

mysql> create view view_name as select id from mydata;

技术分享图片

修改

ALTER  VIEW view_name [(column_list)] AS select_statement

删除:

DROP VIEW [IF EXISTS] view_name [, view_name] ...     

 

select查询:查询执行路径:

请求-->查询缓存-->解析器-->预处理器-->优化器-->查询执行引擎-->存储引擎-->缓存-->响应

FROM  --> WHERE --> Group By --> Having --> Order BY --> SELECT --> Limit

单表查询:

SELECT col1, col2, ... FROM tble_name;   极其危险,慎用;

SELECT col1, col2, ... FROM tble_name WHERE clause;  条件查询

SELECT col1, col2, ... FROM tble_name  [WHERE clause] GROUP BY col_name [HAVING clause];     分组

DISTINCT:数据去重;

SQL_CACHE:显式指定缓存查询语句的结果;

SQL_NO_CACHE:显式指定不缓存查询语句的结果;

query_cache_type服务器变量有三个值:

ON:启用;

SQL_NO_CACHE:不缓存;默认符合缓存条件都缓存;

OFF:关闭;

      DEMAND:按需缓存;

      SQL_CACHE:缓存;默认不缓存       

字段可以使用别名 :

col1 AS alias1, col2 AS alias2, ...

WHERE子句:指明过滤条件以实现“选择”功能;

  过滤条件:布尔型表达式;

  算术操作符:+, -, *, /, %

      比较操作符:=, <>, !=, <=>, >, >=, <, <=

IS NULL, IS NOT NULL

           区间:BETWEEN min AND max

           IN:列表;

           LIKE:模糊比较,%和_;

           RLIKE或REGEXP

逻辑操作符:

           AND, OR, NOT

GROUP BY:根据指定的字段把查询的结果进行“分组”以用于“聚合”运算;

  avg(), max(), min(), sum(), count()

    HAVING:对分组聚合后的结果进行条件过滤;

ORDER BY:根据指定的字段把查询的结果进行排序;

升序:ASC

降序:DESC 

LIMIT:对输出结果进行数量限制

 [LIMIT {[offset,] row_count | row_count OFFSET offset}]

第三节多表查询与子查询

多表查询:

      连接操作:

           交叉连接:笛卡尔乘积;

      内连接:

           等值连接:让表之间的字段以等值的方式建立连接;

           不等值连接:

           自然连接

           自连接:自己跟自己连接

外连接:

           左外连接:

                 FROM tb1 LEFT JOIN tb2 ON tb1.col = tb2.col

  右外连接:

                 FROM tb1 RIGHT JOIN tb2 ON tb1.col = tb2.col 

如多表等值查询

 技术分享图片

技术分享图片

自连接:

技术分享图片

外链接:

  左外连接:FROM tb1 LEFT JOIN tb2 ON tb1.col = tb2.col 

  右外连接:FROM tb1 RIGHT JOIN tb2 ON tb1.col = tb2.col 

子查询:在查询中嵌套查询;                         

      在查询中且套查询:

SELECT *  FROM (SELECT * FROM  students  where  age  >  20) AS   S   WHERE  S.Gender=’M’;

用于WHERE子句中的子查询;

(1) 用于比较表达式中的子查询:子查询仅能返回单个值;

 (2) 用于IN中的子查询:子查询可以返回一个列表值;

SELECT  *  FROM  STUDENTS  WHERE  ClassID  IN  (SELECT  DISTINCT ClassID  FROM  students  WHERE Gender = ‘F’)  AND  Gender=‘M’;

 (3) 用于EXISTS中的子查询

用于FROM子句中的子查询;

      SELECT tb_alias.col1, ... FROM (SELECT clause) AS tb_alias WHERE clause;

联合查询:将多个查询语句的执行结果相合并;

UNION:

SELECT clause UNION SELECT cluase;

SELECT  Name,Age FROM  teacher   UNION  SELECT  Name,Age  FROM  students;

练习:导入hellodb.sql生成数据库

 (1) 在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄;

SELECT Name,Age FROM students WHERE Age > 25 AND Gender=‘M‘;

 (2) 以ClassID为分组依据,显示每组的平均年龄;

SELECT ClassID,avg(age) FROM students GROUP BY ClassID;

 (3) 显示第2题中平均年龄大于30的分组及平均年龄;

SELECT ClassID,avg(age) AS Aging FROM students GROUP BY ClassID HAVING Aging>30;

(4) 显示以L开头的名字的同学的信息;

SELECT * FROM students WHERE Name LIKE ‘L%‘;

 (5) 显示TeacherID非空的同学的相关信息;

SELECT * FROM students WHERE TeacherID IS NOT NULL;

 (6) 以年龄排序后,显示年龄最大的前10位同学的信息;

SELECT * FROM students ORDER BY Age DESC LIMIT 10;

1、以ClassID分组,显示每班的同学的人数;

SELECT ClassID,count(StuID) FROM students GROUP BY ClassID;

2、以Gender分组,显示其年龄之和;

SELECT Gender,SUM(Age) FROM students GROUP BY Gender;

3、以ClassID分组,显示其平均年龄大于25的班级;

SELECT ClassID,avg(age) FROM students GROUP BY ClassID HAVING avg(Age) > 25; 

 





以上是关于mysql基础操作的主要内容,如果未能解决你的问题,请参考以下文章

部分代码片段

mysql基础(附具体操作代码)

linux中怎么查看mysql数据库版本

VSCode自定义代码片段——git命令操作一个完整流程

MySQL表操作过程的基础代码解析

如何在片段中填充列表视图?