目录

数据类型

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

1、数值型

2、日期/时间型

3、文本型

数据库

1、创建数据库

2、删除数据库

数据表

1、创建数据表 create

2、删除数据表 drop

3、修改数据表

4、修改表名

5dropdeletetruncate的区别

查看数据库、数据表

1、使用/选择数据库  use

2、查看数据库  show

3、查看数据表  show

4、查看表结构  desc/describe/show columns from

5、查看数据库下数据表的信息

6、查看创建数据表的语句

表数据操作

1、插入数据 insert

2、更新数据  update

3Group byhaving

4Join

5Union操作符

6、去重操作 distinct/group by

7、聚集函数

8、查询中使用的各种运算符

9、为列名/表名指定别名

10MySql函数

11Select语句的一般格式

12Mysql中字符串使用单引号

 

正文

1、登录:-h localhost  -u root -p root

2、mysql命令行有两种方式结尾:a.分号(;) b. \g

     注意: \g 与前面的命令中间有空格,否则会报错,如下图。

MYSQL 总结——1 Mysql 第1张

 

MYSQL 总结——1 Mysql 第2张

参考网址:https://www.cnblogs.com/stono/p/8227394.html

 

数据类型

1、MySql中为字段选择合适的数据类型是数据库优化的方式之一。

    MySql支持多种数据类型,大致分为三类:数值型、日期/时间型和字符串(字符)型。

    Mysql支持所有标准SQL数值数据类型。

    数值数据类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),近似数值数据类型(FLOAT、REAL、DOUBLE  PRECISION)

    关键字INT: Integer,    关键字DEC:Decimal

    BIT数据类型保存“ 位字段值 ”,并且支持MyISAM、MEMORY、InnoDB和BDB表。

    作为SQL标准的扩展,MySQL也支持整数类型TinyINT、MediumINT和BigINT。

 数值型:NUMBER型

     这些整数类型拥有额外的选项 UNSIGNED。通常,整数可以是负数或正数。如果添加 UNSIGNED 属性,那么范围将从 0 开始,而不是某个负数。

类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 字节 (-128,127) (0,255) 小整数值
SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
FLOAT 4 字节 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度
浮点数值
DOUBLE 8 字节 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度
浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

        Decimal为SQL Server、Mysql等数据库的一种数据类型,不属于浮点数类型,可以在定义时划定整数部分以及小数部分的位数。

        使用精确小数类型不仅能够保证数据计算更为精确,还可以节省存储空间,例如百分比使用decimal( 4, 2) 即可。存储数据范围是:-10^38 ~ 10^38-1 的固定精度和小数位的数字。一个decimal类型的数据占用了2~17个字节。

       与double相比,decimal类型具有更高的精度和更小的范围,它适合于财务和货币计算。

       Decimal数据类型详解,参考网址1:https://blog.csdn.net/weixin_38125277/article/details/80837321

                                             网址2: https://blog.csdn.net/qq_34306360/article/details/79721619

 

日期/时间型:DATE型       

类型 大小
(字节)
范围 格式 用途
DATE 3 '1000-01-01' 到 '9999-12-31' YYYY-MM-DD 日期值
TIME 3  '-838:59:59' 到 '838:59:59' HH:MM:SS 时间值或持续时间
YEAR 1 2位或4位格式的年。4位格式:1901到2155。 2位格式:70到69,表示从1970年到2069年。 YYYY 年份值
DATETIME 8  '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59' YYYY-MM-DD HH:MM:SS 日期和时间值的组合

TIMESTAMP

时间戳

4

 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC

结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

TIMESTAMP值使用Unix纪元('1970-01-01 00:00:00' UTC)至今的描述来存储。

YYYY-MM-DD HH:MM:SS 日期和时间值的组合,时间戳

 说明:   

           虽然DATETIME和TIMESTAMP返回相同的格式,但它们的工作方式很不同。在INSERT 或 Update查询中,TIMESTAMP自动把自身设置为当前的日期和时间。TimeStamp也接受不同的格式,比如YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。

 

文本型:

类型 大小 用途
CHAR 0-255字节 定长字符串; 保存固定长度的字符串,在括号中指定可保存最大字符串的长度。
VARCHAR 0-65535 字节 变长字符串;  保存可变长度的字符串,在括号中指定可保存最大字符串的长度。
TINYTEXT 0-255字节 短文本字符串
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
TEXT 0-65 535字节 长文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据
TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
BLOB 0-65 535字节 二进制形式的长文本数据
LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据

说明:

        a. BINARY 和 VARBINARY 是二进制字符串,即 它们包含的是字节字符串而不是字符字符串。

        b. char 和 varchar:

              (1)  char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以 char 类型存储的字符串末尾不能有空格,varchar 不限于此。

              (2)  char(n) 固定长度,char(4) 不管是存入几个字符,都将占用 4 个字节,varchar 是存入的实际字符数 +1 个字节(n<=255)或2个字节(n>255),所以 varchar(4)存

                     入3个字符将占用4个字节。

              (3) char类型的字符串检索速度要比varchar类型快。

       c. varchar 和 text

             (1)varchar 可指定 n,text 不能指定,内部存储 varchar 是存入的实际字符数 +1 个字节(n<=255)或 2 个字节(n>255),text 是实际字符数 +2 个字节。

             (2)text 类型不能有默认值。

             (3)varchar 可直接创建索引,text 创建索引要指定前多少个字符。varchar 查询速度快于 text, 在都创建索引的情况下,text 的索引似乎不起作用。

       d. 二进制数据(_Blob) 和 text

              (1)存储方式不同,_blob 以二进制方式存储,不区分大小写。 _text 以文本方式存储,英文存储区分大小写。

              (2) _blob 存储的数据只能整体读出。

              (3) _text 可以指定字符集, _blob 不能指定字符集。

          参考网址:http://www.runoob.com/mysql/mysql-data-types.html

数据库

1、创建数据库:create database  数据库名;  例: create database info;

     说明:创建数据库前先判断是否存在该数据库的语句:create database if not exists info default charset utf8 collate utf8_general_ci;  

               a. 如果数据库不存在则创建,存在则不创建。  b. 创建数据库Info,并设定编码集为utf8.

2、删除数据库:drop database 数据库名; 例: drop database info;

     说明:在mysql中执行删除数据库命令后,会弹出一个提示框。

    实例: 从下图中可以看出,删除数据库时中间" drop test "会报错。

MYSQL 总结——1 Mysql 第3张

 

数据表

1、创建基本表: create table 表名(<表名> < 数据类型>);   查看创建表的语句: show create table 表名;  show create table course;

     说明:a. 在创建数据表时,常常指定数据引擎以及字符集类型,如:Engine=InnoDB DEFAULT  CHARSET=utf8;

                b. 讲解很详细,参考网址:https://www.cnblogs.com/BeginMan/p/3249472.html

 

       创建数据表的语句和查看创建表时的语句:

               MYSQL 总结——1 Mysql 第4张

 

 

2、删除基本表:drop table 表名

     说明:a. truncate table 表名;

               b.  delete from 表名 [where 子句]; 

              注:如果省略where子句,表示删除表中全部元组,但表的定义仍在字典中。也就是说,delete语句删除的是表中的数据,而不是关于表的定义。

               c. 删除数据表三种方式的区别:

                      (1) drop table 表名; 删除表全部数据和表结构,立刻释放磁盘空间,InnoDB和MyISAM都是如此。

                      (2) truncate table 表名;删除表全部数据,保留表结构,立刻释放磁盘空间,InnoDB和MyISAM都是如此。

                      (3) delete from 表名 ;删除表全部数据,保留表结构,MyISAM会立刻释放磁盘空间,InnoDB不会释放磁盘空间。

                      (4)delete from 表名 where  xxx;带条件地删除表数据,保留表结构,MyISAM和InnoDB都不会释放磁盘空间。

                      (5)delete方式,如果想释放磁盘空间,使用 “ optimize table 表名;”,MyISAM和InnoDB都会释放磁盘空间。

                                delete from student where name= "张三";  optimize table student;

                      (6)delete from 方式虽然未释放磁盘空间,但是以后添加数据仍然可以使用这部分空间。

  

           实例:

               truncate 表名;   表结构仍然存在。

                       MYSQL 总结——1 Mysql 第5张

              delete from 表名 where clause ;   

                       MYSQL 总结——1 Mysql 第6张

               drop table 表名;   再次查看表时会报错,提示表不存在

                        MYSQL 总结——1 Mysql 第7张

 

      

3、修改基本表:使用Alter  table语句修改基本表

                 语法:

                           Alter table  表名

    新  增  字  段:  Add  column  <新列名> <数据类型> [ 完整性约束]

    删  除  字  段:  Drop  column  <列名>     注释: column 是可选的,可带、可不带

   修改字段类型:  Alter  column <列名>  <数据类型>  

说明:

         a.  新增字段 add 和 删除字段  drop 语句中的column 是可选的,可带,可不带。

         b.  删除字段  drop

         c. 修改字段    alter,  modify,   change

                           Modify:只修改字段类型,不能修改字段名称. 

                                   语法: alter table 表名  modify  字段名称  字段类型  [约束];       alter table student modify  dizhi text;

                           Change : 可选择是否修改字段类型和字段名称.

                                             change关键字后,要修改的字段名,新字段名及新数据类型,这三项缺一不可。

                                             由于三项必须填写,如果不想修改字段类型和字段名称,那么在新字段名称和新字段类型的位置仍写原字段名称或字段类型,这种方法可行。

                                  语法:  alter  table 表名  change 字段名称  新字段名称 新字段类型;    alter table student change  i  j   bigint;

                           Alter :只能添加、删除默认值,不能修改字段类型,不能修改字段名称。添加默认值时一定要加上关键字set

                                        修改字段默认值  : Alter  table student  alter   i   set default 1000;

                                        删除字段默认值:  Alter   table  student  alter  i  drop default;

        d. 指定新增字段的位置:first 关键字(设定为第一列)和after关键字(设定位于某个字段之后),这两个关键字只作用于ADD子句。

 

        新增字段:

                 MYSQL 总结——1 Mysql 第8张

        删除字段:

                MYSQL 总结——1 Mysql 第9张

         添加默认值:使用alter 命令

               MYSQL 总结——1 Mysql 第10张    

4、修改表名

           Alter table  原表名  rename to 新表名;

              MYSQL 总结——1 Mysql 第11张

 

5、drop、delete和truncate 三种方式详细区别,参考网址:

              drop用于删除数据库、数据表等,delete和truncate用于删除表数据

                 网址1:  http://www.runoob.com/mysql/mysql-drop-tables.html    

                 网址2:  http://www.runoob.com/mysql/mysql-delete-query.html

                 网址3:  https://blog.csdn.net/fzy198926/article/details/78190633

   

                       MYSQL 总结——1 Mysql 第12张

查看数据库、数据表

1、使用数据库、选择数据库:use 数据库名;

          注意:创建和删除数据库、数据表时,中间都要带上database、table,而选择数据库时没有带database.

2、查看有哪些数据库: show databases;   注:结尾要带s

3、当前数据库下有哪些数据表:show tables;   注:结尾有s

MYSQL 总结——1 Mysql 第13张

 

4、查看表结构:desc 表名;或  describe 表名; 简写/全写两种方式均可 或  show columns from 表名;

 

MYSQL 总结——1 Mysql 第14张

 

5、查看某个数据库下所有表的类型、状态: show table status from 数据库名 [ like 'pattern' ];  like ' pattern ' 表示查询哪些表的具体表名。

        a. show table  status from try;  查询 try 数据库下所有表的信息。

               网址:  https://www.cnblogs.com/lxwphp/p/8109261.html   讲解了各个字段的含义。

               MYSQL 总结——1 Mysql 第15张

 

             b. 查看数据库 try 下 student 表中的信息。

                       MYSQL 总结——1 Mysql 第16张

 

 6、查看创建数据表的语句: show create table 表名;  show create table course;

        MYSQL 总结——1 Mysql 第17张

 

表数据操作

1、向表中插入数据

  a.    insert into 表名 [(field1, field2 …… field n)]

                        values (value1, value2 …… value n);

         说明: 如果INTO子句没有指明(或列出)任何列名,则新插入的元组必须在每个属性列上均有值。

                     如果指出了新增加的元组在哪些属性列上要赋值,属性的顺序可以与CREATE TABLE中的顺序不一样。

  b. 另一种方法: 也称为复制另一张表数据

           insert into ……select 子句

2、更新表数据: 

                update 表名 set field1=values1, field2 = values2  [where  clause];

 

insert into 与 update的区别:insert into 是插入一条新记录,update是在原来表的数据上进行更新、修改。

 

3、Group by子句

       Group by子句将查询结果按某一列或多列的值分组,值相等的为一组。

       对查询结果分组的目的是为了细化聚集函数的作用对象。如果未对查询结果分组,聚集函数将作用于整个查询结果。分组后聚集函数将作用于每一个组,即每一组都有一个函数值。

      Having短语:如果分组后还要求按一定的条件对这些组进行筛选,最终只输出满足指定条件的组,则使用having短语指定筛选条件。

      说明:

             a.    where子句与having短语的区别:在于作用对象不同。

                    where子句:作用于基本表或视图,从中选择满足条件的元组。

                   having短语:作用于组,从中选择满足条件的组。

            b. (新的知识点)with rollup:可以实现在分组统计数据的基础上再进行相同的统计(sum,  avg,  count ……)

            c. (新的知识点)coalesce( )函数: 返回参数(列名)中第一个非NULL的字段值,注意不是为空。

                                                        该函数的详细介绍网址:https://blog.csdn.net/hackage4619/article/details/58586449

MYSQL 总结——1 Mysql 第18张

 

4、Join的使用

       在真正的应用中经常需要从多个数据表中读取数据,因此在mysql中使用Join来联合多表查询。

       JOIN按照功能大致分为如下四类:

           a. Inner join (内连接,或等值连接,可以省略Inner,效果一样):获取两个表中字段匹配关系的记录。

           b. Left  join(左连接):获取左表所有记录,即使右表没有对应匹配的记录。

           c. Right join(右连接):获取右表所有记录,即使左表没有对应匹配的记录。

           d. Full  join (全连接):只要左表和右表其中一个表中存在匹配,则返回行。full join结合了left join 和 right  join的结果。

           参考网址1: http://www.runoob.com/mysql/mysql-join.html

           参考网址2:https://www.runoob.com/sql/sql-join-full.html

5、Union操作符

        功能:用于连接两个以上的select语句的结果,使其组合到一个结果集中。

         语法:

                    SELECT expression1, expression2, ... expression_n

                    FROM tables

                    [WHERE conditions]

                    UNION [ALL | DISTINCT]

                    SELECT expression1, expression2, ... expression_n

                     FROM tables

                   [WHERE conditions];

      说明: a.  (重要)可以只检索其中几个字段,并不是所有字段。

                  b.   Distinct是默认选项,即默认情况下Union操作符删除了重复的数据。   All, 返回所有结果集,包含重复数据。

6、去重操作

       a. distinct 关键字:select  distinct  age  from  person;

       b. group by : select age from person  group by age;

7、聚集函数(Aggregate functions)

       count( [ distinct | all ]  * )              统计元组个数

       count( [ distinct | all ]   <列名> )   统计一列中值的个数

       sum( [ distinct | all ] <列名>)        计算一列值的总和(此列必须是数值型)

       avg( [ distinct | all ] <列名>)         计算一列值的平均值(此列必须是数值型)

       max( [ distinct | all ]  <列名>)        求一列值中的最大值

       min( [ distinct | all ]  <列名>)        求一列值中的最小值

       说明:

                 在聚集函数遇到空值时,除count( * ) 外,都跳过空值而只处理非空值。注意, where子句中是不能使用聚集函数作为条件表达式的。

 8、常用的查询条件

          比较: =,>,<,>=,<=,!=,<>,!>,!<       (不等于两种形式: !=  和  <>)

          确定范围: between and, not between and

          确定集合: In,  Not  in

          字符匹配:Like ,  Not Like   

                         通配符: a. %(百分号):任意长度的字符串。    b.  _(下划线):任意单个字符。

                          注:如果匹配串中不含通配符,like效果类似于=(等于);not like类似于 != 或 <> (不等于)

          空值: Is Null,  Is not null

                      说明: a. 处理NULL值时不能使用 = NULL 或 !=NULL,需要使用IS NULL和 IS NOT NULL运算符。

                                  b. 不能比较NULL 和 0,它们不是等价的。

          多重条件(逻辑运算):And, Or,  Not

 

9、为表名或列名指定别名(Alias):select  name as a from student  as b;

10、MySql函数

数值处理函数:

         弧度制:用弧长与半径之比度量对应圆心角角度的方式,叫做弧度制,用符号rad表示,读作弧度。由于圆弧长短与圆半径之比,不因为圆的大小而改变,所以弧度数是一个与圆的半径无关的量。角度以弧度给出时,通常不写弧度单位。弧度制的精髓就在于同意了度量弧与角的单位,从而大大简化了有关公式及运算,尤其在高等数学中,其优点格外明显。

 

函数名

功能描述

实例

ABS(x)

返回x的绝对值

返回-1的绝对值:

Select abs(-1) -- 返回1

Radians(x)

将角度转换为弧度。

180°转换为弧度:select radians(180) -- 3.1415926

Cos(x)

求余弦值(参数x是弧度,而不是度数)

Select cos(2);

Sin(x)

求正弦值(参数x是弧度,而不是度数)

Select sin(radians(30));

Tan(x)

求正切值(参数x是弧度,而不是度数)

Select tan(1.75); -- 5.520379922

PI()

返回圆周率3.141593

Select PI() -- 3.141593

Exp(x)

返回e的x次方

计算e的三次方:select exp(3)

Sqrt(x)

返回x的平方根

25的平方根:

Select sqrt(25);

Ceil(x)

返回大于或等于x的最小整数

select ceil(1.5) -- 返回2

 

Floor(x)

返回小于或等于x的最大整数

select floor(1.5) -- 返回1

 

Greatest(expr1, expr2, expr3……)

返回列表中的最大值。

select greatest(2, 134, 343, 8, 45) -- 返回343

Select greatest(“Google”,”Runoob”,”Apple”) -- 返回Runoob

Least(expr1, expr2, expr3……)

返回列表中的最小值。

 

select greatest(2, 134, 343, 8, 45) -- 返回2

Select greatest(“Google”,”Runoob”,”Apple”) -- 返回Apple

       

 

字符串函数:len(),  substring(), lower(),  upper(),  left(), right(), Ltrim(),  rtrim(), soundex()

函数名

功能描述

实例

Len()

返回文本字段中值的长度

Select len(city) from person

Substring(s,n,length)

同mid(s,n,length)

从字符串s的n位置开始,截取长度为length的子字符串

 

Lower(s),  同 lcase(s)

将字符串s全部转换为小写字母

Select lower(“RUNOOB”) -- runoob

Upper(s), 同 ucase(s)

将字符串s全部转换为大写字母

 

Left(s,n)

返回字符串s的前n个字符

Select left(“apple”,2) -- ap

Right(s,n)

返回字符串s的后n个字符

Select right(“runoob”,2) -- ob

Ltrim()

去掉字符串s开始处的空格

Select ltrim(“   runoob”) -- runoob

Rtrim()

去掉字符串s结尾处的空格

Select rtrim(“runoob   ”) -- runoob

Soundex()

 

 

Space(n)

返回n个空格

Select space(10)

Strcmp(s1,s2)

比较两个字符串

Select strcmp(“apple”,”dog”)

 

Soundex( )函数的用法,参考网址:https://blog.csdn.net/qq_29741945/article/details/70159705

         soundex( )是一个将任何文本串转换为描述其语音表示的字母数字模式的函数。soundex考虑了类似的发音字符和音节,使得对字符串进行发音比较而不是字母比较。虽然,soundex不是SQL概念,但是多数DBMS都提供对soundex的支持。

 

日期/时间函数

函数名

功能描述

实例

Now()

返回系统当前日期和时间

 

Date()

从日期或日期表达式中提取日期值

Select date(now())

或 select date(“2018-12-22”)

Year()

返回年份

 

Month()

返回月份

 

Day()

返回日期部分

 

Hour()

返回时间中的小时部分

 

Minute()

返回时间中的分钟值

 

Dayofweek()

返回日期对应的星期几,1是星期日,2是星期一,以此类推

 

Datediff(d1,d2)

返回日期之间相隔的天数

Select datediff(“2018-11-28”,”2018-12-22”)

Curdate(),  同current_date()

返回当前日期

 

Curtime() ,  同Curren_time()

返回当前时间

 

 

Format()函数:用于对特定字段设置显示格式。

11、Select语句的一般格式

         SELECT [ ALL | DISTINCT ] <目标列表达式> [ 别名 ]  [ , <目标列表达式> [ 别名 ]  ] ……

         FROM < 表名或视图名 > [ 别名 ] [ , < 表名或视图名 > [ 别名 ] ] ……

         WHERE <条件表达式>

         GROUP BY <列名1>  HAVING <条件表达式>

         ORDER BY  <列名2>  [ ASC | DESC ]

        注: 几个关键字的使用顺序: where,  group by ,  having,  order by

12、在mysql中,字符串要用单引号(英文符号)括起来。

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄