一、创建数据库

create database 数据库名称:

mysql设置数字范围 mysql设置取值范围_字段

二、选择数据库

use 数据库名称

mysql设置数字范围 mysql设置取值范围_字段_02

三、数据类型

MySQL使用的多种数据类型可分为三类:数字、日期与时间、字符串类型。

1、数字类型

INT 正常大小的整数,可以有符号,也可以没有符号。如果是有符号整数,其允许的取值范围是-2147483648~2147483647;无符号整数的取值范围是从0至4294967295。最高可指定11位数字。
TINYINT 非常小的整数,分为有无符号两种。前有符号时,其允许取值范围是-128~127;无符号时的取值范围为0~255。所以,最高可指定4位数字。
SMALLINT 较小的整数,分为有无符号两种。前有符号时,其允许取值范围是-32768~32767;无符号时的取值范围为0~65535。所以最高可指定5位数字。
MEDIUMINT 中型大小的整数,分为有无符号两种。前有符号时,其允许取值范围是-8388608~8388607;无符号时的取值范围为0~16777215。所以,最高可指定9位数字。
BIGINT 较大型的整数,分为有无符号两种。前有符号时,其允许取值范围为-9223372036854775808~9223372036854775807;无符号时的取值范围为0~18446744073709551615。最高可指定20位数字。
FLOAT(M,D) 不带符号的浮点数。M 代表显示长度,D 代表小数位数。这两个参数都不是必需参数,它们默认为10, 2,表示小数点后有2位数字,而整个数字的位数为10(包含小数位数)。FLOAT 类型的小数精度可以达到24位。
DOUBLE(M,D) 不带符号的双精度浮点数。M 代表显示长度,D 代表小数位数。这两个参数都不是必需参数,它们默认为16, 4,表示小数点后有4位数字,而整个数字的位数为 16(包含小数位数)。DOUBLE 类型的小数精度可以达到53位。DOUBLE 与 REAL 同义。
DECIMAL(M,D) 非压缩的无符号浮点数。 在未压缩十进制中,每一位十进制数都对应一个字节。需要定义显示长度(M)和小数位数(D)。DECIMAL 与 NUMERIC 同义。

注:
  Decimal为专门为财务相关问题设计的数据类型。DECIMAL从MySQL 5.1引入,列的声明语法是DECIMAL(M,D)。在MySQL 5.1中,参量的取值范围如下:
·M是数字的最大数(精度)。其范围为1~65(在较旧的MySQL版本中,允许的范围是1~254),M 的默认 值是10。
·D是小数点右侧数字的数目(标度)。其范围是0~30,但不得超过M。

2、日期与时间类型

DATE YYYY-MM-DD (年-月-日)格式显示的日期,取值范围从1000-01-01 到 9999-12-31。比如1973年的12月30日就存为 1973-12-30。
DATETIME 按照 YYYY-MM-DD HH:MM:SS 格式组合显示的日期与时间,取值范围从1000-01-01 00:00:00 到 9999-12-31 23:59:59。比如说1973年的12月30日下午3 : 30就存为1973-12-30 15 : 30 : 00。
TIMESTAMP 介于1970年1月1日凌晨与2037年某个时间点之间的一种时间戳。这种格式与之前的 DATETIME 格式相仿,只不过少了数字间的连字符。1973年12月30日下午3 : 30被存为19731230153000(YYYYMMDDHHMMSS)。
TIME 按照 HH:MM:SS 格式存储的时间。
YEAR(M) 用2位或4位格式存储的时间。如果把长度定为2,比如说YEAR(2),那么可以表示从1970年到2069年的这些年份(70-69)。如果把长度定为4,YEAR(4),则可以表示从1901年到2155年。默认长度为4。

3、字符串类型

CHAR(M) 长度固定的字符串,长度范围从1~255个字符,比如CHAR(5)。在存储时,会向右用空格补齐指定长度。长度并非必须参数,默认长度为1。
VARCHAR(M) 长度不定的字符串,长度范围从1~255个字符。比如:CHAR(25)。在创建VARCHAR字段时,必须定义长度。
BLOB or TEXT 最大长度为65535个字符的字段。BLOB是Binary Large Objects(二进制大型对象)的缩写,专用于保存大量的二进制数据,比如图片或其他类型的文件。TEXT 类型的文件也能保存大型数据。这两者的区别在于存储数据的排序和对比方面,BLOB类型数据是大小写敏感的,而TEXT类型数据则不是。另外,不能指定它们的长度。
TINYBLOB or TINYTEXT 最大长度为255个字符的 BLOB 或 TEXT 字段。同样也不能指定它们的长度。
MEDIUMBLOB or MEDIUMTEXT 最大长度为16777215个字符的 BLOB 或 TEXT 字段。同样也不能指定它们的长度。
LONGBLOB or LONGTEXT 最大长度为4294967295个字符的 BLOB 或 TEXT 字段。同样也不能指定它们的长度。
ENUM 枚举类型,是一种很独特的列表类型。ENUM 类型的数据实际是一个包含多个固定值的列表,只能选择这些值(包括 NULL 值)。例如,如果希望某个字段包含 "A"、"B" 和 "C",必须这样定义:ENUM ('A', 'B', 'C'),只有这些值(或 NULL 值)能够填充到该字段中。

注:
  从数据库性能方面考虑,数据库字段一般应尽量避免使用非常大的数据类型,varchar是比较常用的字符串类型;

四、创建表

create table 表名( 字段名 字段类型(长度) 字段的约束);

mysql设置数字范围 mysql设置取值范围_MySQL_03

注:

1、约束保证数据的完整性和一致性。
2、约束分为表级约束和列级约束。
列级约束:只对一个字段进行约束。
表级约束:对两个及两个以上的字段进行约束。如 unique(name,email)
3、约束类型包括(按照功能划分):
NOT NULL:非空约束。
PRIMARY KEY:主键约束。
UNIQUE KEY:唯一约束。
DEFAULT:默认约束。
FOREINGN KEY:外键约束。

五、删除表

drop 表名 

mysql设置数字范围 mysql设置取值范围_mysql设置数字范围_04

六、插入数据

insert into 表名(字段名,字段名) value(字段值,字段值)

mysql设置数字范围 mysql设置取值范围_mysql设置数字范围_05

注:这张表的id被设为了自增长模式;

七、查询数据

select 字段名 from 表名 where 查询条件

mysql设置数字范围 mysql设置取值范围_字段_06

注:

1、WHERE 子句的条件子句可以过滤查询结果,使用 WHERE 子句可以制定选择规则,从表中选择我们所需的记录。一般语法格式如下:
SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
可以使用逗号分隔一个或多个表,从而在使用 WHERE 子句时,包含多个条件。但是 WHERE 子句并非 SELECT 命令的一个可选部分。
可以在使用 WHERE 子句时指定任何条件。
可以通过 AND 或 OR 运算符来指定一个或多个条件。
WHERE 子句可以和 DELETE 或 UPDATE 命令一起使用,同样是用于指定条件。
2、查询条件中使用模糊匹配且数据库中数据量比较大时应当考虑性能问题;

八、更新数据

update 表名 set 字段名= 字段新值,字段名=字段新值;

mysql设置数字范围 mysql设置取值范围_MySQL_07

注: 

执行更新语句时:
可以一起更新一个或多个字段。
可以使用 WHERE 子句指定任意条件。
可以每次仅更新一张表中的数值。

九、删除数据

delete from 表名 where 查询条件

mysql设置数字范围 mysql设置取值范围_取值范围_08

十、ORDER BY 子句排序

对查询的结果进行排序

select 字段 from 表 where 条件 order by 字段 [asc[desc]]

mysql设置数字范围 mysql设置取值范围_字段_09

十一、联结(join)

select 字段 from 表一

left join 表二 on 连接条件

mysql设置数字范围 mysql设置取值范围_mysql设置数字范围_10

十二、REGEXP正则表达式

select 字段 from 表 where 字段 REGEXP  正则表达式

mysql设置数字范围 mysql设置取值范围_mysql设置数字范围_11

注:

下面就是一个模式列表,其中结合使用了 REGEXP 运算符:
模式	模式匹配对象
^	字符串的开始位置
$	字符串的结尾
.	单个字符
[...]	一对方括号之间的字符
[^...]	未在一对方括号之间的字符
p1|p2|p3	交替匹配模式1、模式2或模式3
*	匹配前面元素的零个或多个实例
+	匹配前面元素的一个或多个实例
{n}	匹配前面元素的n个实例
{m,n}	匹配前面元素的m~n个实例,m <= n

十三、事务

begin;(开启事务)

    数据库操作

rollback;(操作有问题,恢复到之前的数据,回滚)

commit;(操作没问题,执行操作,提交事务)

mysql设置数字范围 mysql设置取值范围_MySQL_12

注:

通过设定会话变量 AUTOCOMMIT 可以控制事务行为。如果 AUTOCOMMIT 被设为1(默认值),则每一个 SQL 语句(无论是否在事务中)都会被认为是一个完成的事务,则默认当它结束时予以提交。当 AUTOCOMMIT 被设为0(通过命令 SET AUTOCOMMIT=0)时,后续一系列语句就像是一个事务,直到 COMMIT 语句执行为止,不再提交任何行为。

十四、ALTER修改表结构

Alter table 表名 操作

mysql设置数字范围 mysql设置取值范围_mysql设置数字范围_13

注:

添加新列的基本语法:ALTER TABLE table_name ADD column_name datatype;
删除列的基本语法:ALTER TABLE table_name DROP COLUMN column_name;
更改现有列数据类型的基本语法:ALTER TABLE table_name MODIFY COLUMN column_name datatype;
添加 NOT NULL 约束 的基本语法:ALTER TABLE table_name MODIFY column_name datatype NOT NULL;
添加 唯一约束 的基本语法:ALTER TABLE table_name 
ADD CONSTRAINT MyUniqueConstraint UNIQUE(column1, column2...);
添加 CHECK 约束 的基本语法:ALTER TABLE table_name 
ADD CONSTRAINT MyUniqueConstraint CHECK (CONDITION);
添加 主键约束 的基本语法:ALTER TABLE table_name 
ADD CONSTRAINT MyPrimaryKey PRIMARY KEY (column1, column2...);
删除约束 的基本语法:ALTER TABLE table_name 
DROP CONSTRAINT MyUniqueConstraint;
删除主键约束 的基本语法:ALTER TABLE table_name 
DROP CONSTRAINT MyPrimaryKey;

十五、索引

索引是一种特殊的查询表,可以被数据库搜索引擎用来加速数据的检索。简单说来,索引就是指向表中数据的指针。索引能够提高 SELECT 查询和 WHERE 子句的速度,但是却降低了包含 UPDATE 语句或 INSERT 语句的数据输入过程的速度。索引的创建与删除不会对表中的数据产生影响。

1、CREATE INDEX 创建索引

单列索引:CREATE INDEX index_name ON table_name (column_name);
唯一索引:CREATE UNIQUE INDEX index_name on table_name (column_name);
聚簇索引:CREATE INDEX index_name on table_name (column1, column2);
隐式索引:隐式索引由数据库服务器在创建某些对象的时候自动生成。例如,对于主键约束和唯一约束,数据库服务器就会自动创建索引。

2、DROP INDEX 删除索引

DROP INDEX index_name;

3、创建索引时应注意:

  • 小的数据表不应当使用索引;
  • 需要频繁进行大批量的更新或者插入操作的表;
  • 如果列中包含大数或者 NULL 值,不宜创建索引;
  • 频繁操作的列不宜创建索引。

十六、GROUP BY 分组

根据group by 后面的字段进行分组

SELECT column1, column2
    FROM table_name
    WHERE [ conditions ]
    GROUP BY column1, column2
    ORDER BY column1, column2

十七、DISTINCT去重

去除所有重复记录,只返回唯一项

SELECT DISTINCT column1, column2,.....columnN 
    FROM table_name
    WHERE [condition]

注:

1、MySQL中的空值与null

表设计如下:

mysql设置数字范围 mysql设置取值范围_mysql设置数字范围_14

插入 '' 值:

mysql设置数字范围 mysql设置取值范围_取值范围_15

插入 null 值:

mysql设置数字范围 mysql设置取值范围_取值范围_16

此时表中数据如下:

mysql设置数字范围 mysql设置取值范围_mysql设置数字范围_17

用null查询:

mysql设置数字范围 mysql设置取值范围_DB_18

用 ‘’ 查询:

mysql设置数字范围 mysql设置取值范围_字段_19

MySQL官方对null的说明:

“NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded up to the nearest byte.”