查看所有数据库:SHOW DATABASES;
创建数据库:CREATE DATABASE ……;
显示指定数据库的定义:SHOW CREATE DATABASE ……\G
删除数据库:DROP DATABASE ……; 【数据库中存储的所有数据表和数据也将一同被删除,且不能恢复】
查看系统所支持的引擎类型:SHOW ENGINES\G
创建数据表:
CREATE TABLE ……、
(
字段名1,数据类型[列级别约束条件][默认值],
……
[表级别约束条件]
);
使用主键约束:
1.单字段主键:1)在定义列的同时指定主键,例如:字段名 数据类型 PRIMARY KEY [默认值] 2)在定义完所有列之后指定主键,PRIMARY KEY(……)
2.多字段联合主键:PRIMARY KEY[字段1,字段2,……]
使用外键约束:
[CONSTRAINT<外键名>]FOREIGN KEY (字段名1[,字段名2,…] )
REFERENCES<主表名>(主键列1[,主键列2,…] )
使用非空约束:
字段名 数据类型 NOT NULL
使用唯一性约束:1)字段名 数据类型 UNIQUE 2)[CONSTRAINT<约束名>]UNIQUE(<字段名>)
使用默认约束:
字段名 数据类型 DEFAULT 默认值
设置表的属性值自动增加:
字段名 数据类型 AUTO_INCREMENT
执行插入行为:INSERT INTO 表名(字段名,……)
VALUES (字符,字符……),(……),……
查看记录:SELECT*FROM 表名;
查看表的基本结构语句:DESCRIBE 表名; 或者 DESC 表名;
查看表的详细结构语句:SHOW CREATE TABLE 表名\G
修改表名:ALTER TABLE <旧表名>RENAME [TO]<新表名>; [TO]为可选参数,使用与否均不影响结果
修改字段的数据类型:ALTER TABLE <表名>MODIFY<字段名> <数据类型>
修改字段名:ALTER TABLE<表名>CHANGE<旧字段名><新字段名><新数据类型>; 当数据库表中已经有数据是,不要轻易修改数据类型。否则可能影响到表中已有的数据记录
添加字段:ALTER TABLE <表名>ADD<新字段名><数据类型> [约束条件][FIRST|AFTER 已存在字段名]; FIRST 将新添加的字段设置为表的第一个字段;AFTER 将新添加的字段添加到指定的“已存在字段名”的后面。若两个都没有,则添加到表尾。
显示警告信息:SHOW WARNINGS;
向表格插入数据:INSERT INTO 表名 VALUES(...);
显示插入数据结果:SELECT*FROM 表名;
显示用字符串连接后的数据:SELECT concat( , , ),concat( , , )FROM 表名;
删除表中的数据:DELETE FROM 表名;
设置时区:SET TIME_ZONE='+10:00';表示设置成东10区,如果为“-”的为西时区。
删除字段:ALTER TABLE <表名> DROP <字段名>;
修改字段的排列位置:ALTER TABLE <表名> MODIFY <字段1><数据类型>FIRST|AFTER <字段2>;
更改表的存储引擎的语法格式:ALTER TABLE <表名>ENGINE=<更改后的存储引擎名>;
删除表的外键约束:ALTER TABLE <表名>DROP FOREIGN KEY<外键约束名>;
删除没有被关联的表:DROP TABLE[IF EXISTS]表1,表2,……,表n;
删除被其他表关联的主表:先删除外键约束,再删除表。
MySQL数据类型
【整数】
TINYINT 很小的整数 1个字节
SMALLINT 小的整数 2个字节
MEDIUMINT 中等大小的整数 3个字节
INT(INTEGER) 普通大小的整数 4个字节
例如:INT(11)里面的数字11,表示该数据类型指定的显示宽度,能够显示的数值中数字的
个数。但是如果数值的位数小于指定的宽度时会由空格填充,如果插入了大于显示宽度的值,
只要该值不超过该类型整数的取值范围,数值依然可以插入。如果不指定,则系统指定默认的
宽度值,保证显示每一种数据类型可以取到范围内的所有值。
BIGINT 大整数 8个字节
【浮点数和定点数】
M 为精度,总共的位数。N 为标度,表示小数的位数。
FLOAT 单精度 4个字节 系统默认会按照实际的精度。
DOUBLE 双精度 8个字节 系统默认会按照实际的精度。
DECIMAL (M,D) ,DEC 压缩的“严格”定点数 M+2个字节
存储空间并不是固定的,而是由其精度值M决定的。
若改变M而固定D,则其取值范围将随M的变大而变大。
若不指定精度,则系统默认为(10,0)。
范围:对精度要求高的时候,如货币,科学数据等。
进行减法和比较运算时,两个浮点数容易出现错误,应尽量避免做浮点数的比较。
【日期与时间类型】
类型名称 日期格式 日期范围 存储需求
YEAR YYYY 1901--2155 1字节
TIME HH:MM:SS -838:59:59--838:59:59 3字节
DATE YYYY-MM-DD 1000-01-01--9999-12-31 3字节
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00--9999-12-31 23:59:59 8字节
TIMESTAMP YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 UTC--2038-01-19 03:14:07 UTC 4字节
YEAR:
四位字符串或者四位数字格式
二位字符串:‘00’-‘69’表示:2000-2069;‘70’-‘99’表示:1970-1999;‘0’与‘00’一样。超过取值范围的值将被转换为2000
二位数字: 1-69表示:2001-2069;70-99表示:1970-1999;0和00表示0000。
TIME:
1、‘D HH:MM:SS’字符串:还可以用:‘D HH:MM'‘D HH’‘SS’‘HH:MM’;这里的D表示日,
可取0-34之间的值。插入数据库时,D被转化为小时保存,格式为“D*24+HH”。
而‘D HH’格式,小时一定要用双位数值。
2、‘HHMMSS’格式没有间隔符的字符串或HHMMSS格式的数值,也可以。
【注意:‘1112’和1112表示00:11:12,即11分12秒;‘12’表示00:00:12;
而‘11:12’表示11:12:00,即11点12分。】
【00,‘00’,0,‘0’都表示00:00:00】
3、还可以插入当前时间:CURRENT_TIME或者NOW();
DATE类型:
1、‘YYYY-MM-DD’或者‘YYYYMMDD’字符串,范围:‘1000-01-01’--‘9999-12-31’
2、‘YY-MM-DD’或者‘YYMMDD’字符串,范围:前两位YY与 YEAR 的规定一样,‘00’-‘69’表示:2000-2069;‘70’-‘99’表示:1970-1999;
3、YY-MM-DD 或者 YYMMDD 数字格式: 范围:前两位YY表示 00-69表示:2001-2069;70-99表示:1970-1999
4、使用 CURRENT_DATE 或者 NOW(),插入当前系统日期。
【Mysql允许不严格的语法:任何标点符号都可以用作日期部分之间的间隔。但必须是字符串格式的:‘98.11.11’‘98/11/11’‘98$11@11’】
DATETIME:
1、‘YYYY-MM-DD HH:MM:SS’或者‘YYYYMMDDHHMMSS’字符串格式,取值范围‘1000-01-01 00:00:00’--‘9999-12-31 23:59:59’
2、‘YY-MM-DD HH:MM:SS’或者‘YYMMDDHHMMSS’字符串格式,YY与前面的DATE一样。
3、YYYYMMDDHHMMSS或者YYMMDDHHMMSS数字格式。
TIMESTAMP
显示格式与DATETIME一样,但是取值范围为:‘1970-01-01 00:00:01’UTC -- ‘2038-01-19 03:14:07’UTC,
【UTC为世界标准时间。所以存储时对当前时区进行转换,检索时再转换回当前时区。即查询时,根据当前时区的不同,
显示的时间值是不同的。】可以通过改变时区来改变输出时间:set time_zone='+10:00';即改为东10区。
字符串类型:
类型名称 说明 存储需求
CHAR(M) 固定长度非二进制字符串 M字节,1<=M<=255
VARCHAR(M) 变长非二进制字符串 L+1字节,在此L<=M和1<=M<=255
TINYTEXT 非常小的非二进制字符串 L+1字节,在此L<2^8
TEXT 小的非二进制字符串 L+2字节,在此L<2^16
MEDIUMTEXT 中等大小的非二进制字符串 L+3字节,在此L<2^24
LONGTEXT 大的非二进制字符串 L+4字节,在此L<2^32
ENUM 枚举类型,只能有一个枚举字符串值 1或2个字节,取决于枚举值的数目(最大值65535)
SET 一个设置,字符串对象可以有零个或多个SET成员 1,2,3,4或8个字节,取决于集合成员的数量(最多64个成员)
【VARCHAR,BLOB,TEXT是变长类型,对于其存储需求取决于列值的实际长度,用L表示。而不是取决于类型的最大可能尺寸。
M为一个列能保存最大长度为10个字符的一个字符串。例如:‘abcd’,L是4而存储要求是5个字节。】
1、 CHAR和VARCHAR类型
CHAR(M),当保存时在右侧填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格将被删除掉。
VARCHAR(M),在值保存和检索时尾部的空格仍保留。
2、 TEXT类型
当保存或查询TEXT列的值时,不删除尾部空格。
3、 ENUM类型
字符串对象,为表创建时在列规定中枚举的一列值。
字段名 ENUM('值1’,'值2',...'值n')
一次只能取一个,如果创建的成员中有空格时,其尾部的空格将自动被删除。索引值:NULL,0,1,2,……,n;而NULL对应NULL,0对应‘’,1开始对应非空字符。
4、 SET类型:
可以有零或多个值,最多有64个成员。格式:SET('值1','值2',...'值n');
创建表时,SET成员值得尾部空格将自动被删除。与ENUM区别,SET可以从定义的列值中选择多个字符的联合。
如果插入SET字段中列值有重复,则Mysql自动删除重复的值。而且插入顺序是Mysql按照定义的顺序显示;
显示二进制数据结果:
SELECT BIN(元素值),BIN(元素值) FROM 表名;
【有的书上写BIN(元素值+0),表示将二进制的结果转换成对应的数字的值,BIN()函数将数字转换为二进制,再显示出来。但我用MySQL5.7没有加0,也可以正常显示】
显示数据结果的长度:
SELECT length(元素值1),length(元素值2) FROM 表名;
显示数据是否与指定的数据相等:SELECT 元素值=‘数据’ FROM 表名;
【相等则显示1,否则显示0】
二进制类型:
类型名称 说明 存储需求
BIT(M) 位字段类型 大约(M+7)/8个字节
BINARY(M) 固定长度二进制字符串 M个字节
VARBINARY(M) 可变长度二进制字符串 M+1个字节
TINYBLOB(M) 非常小的BLOB L+1字节,在此L<2^8
BLOB(M) 小的BLOB L+2字节,在此L<2^16
MEDIUMBLOB(M) 中等大小的BLOB L+3字节,在此L<2^24
LONGBLOB(M) 非常大的BLOB L+4字节,在此L<2^32
1、BIT类型:
M表示每个值得位数:范围是1--64;如果M被省略,默认为1;如果长度小于M,在值得左边用0填充。大于M的位数的值,不能插入。
2、BINARY和VARBINARY类型:
类似于CHAR,VARCHAR;BINARY类型是固定长度的,指定长度后,不足最大长度的,将在它们右边填充"\0"补充。即不管存储内容
是否达到指定长度,其存储空间均为指定的值M。
VARBINARY类型长度可变,实际占用空间为字符串的实际长度加1。
【它们存储的是十进制的数。】
3、BLOB类型:
是一个二进制大对象,用来存储可变数量的数据。没有字符集,并且排序和比较基于列值字节的数值。
数据类型: 存储范围:
TINYBLOB(M) 最大长度为255(2^8 -1)字节
BLOB(M) 最大长度为65535(2^16 -1)字节
MEDIUMBLOB(M) 最大长度为16777215(2^24 -1)字节
LONGBLOB(M) 最大长度为4GB(2^32 -1)字节
运算符类型
比较运算符:
1、等于运算符=
用来判断数字、字符串、表达式是否相等。若是,则返回1,否则,返回0;
【1、若有一个或两个参数为NULL,则比较运算的结果为NULL。
2、若一个字符串和数字进行相等判断,则MySQL可以自动将字符串转换成数字进行比较。】
2、安全等于运算符<=>
与普通的等于运算符相比,这个可以用与NULL的比较。两者都为NULL时,返回1;一个为NULL,另一个不是NULL,则为0;
3、不等于运算符 <>或者!=
【不能用于判断空值NULL】
4、小于或等于符<=、小于<、大于或等于符>=、大于>,都不能用于判断空值NULL
5、IS NULL(ISNULL),IS NOT NULL 运算符 ;判断是否为空,是否为非空。
6、BETWEEN AND运算符
格式:expr BETWEEN min AND max;假如expr大于或等于min且小于或等于max,则返回1,否则返回0;
【对于字符串类型比较,按字母表中字母顺序进行比较。】
7、LEAST运算符
格式:LEAST(值1,值2,…,值n),在n>=2个值中,返回最小值。假如任意一个变量为NULL,则返回NULL;
8、GREATEST(value1,value2,...)
返回最大值,若有一个为NULL,则返回NULL。
9、IN、NOT IN运算符
IN运算符判断操作数是否为IN列表中的其中一个值,如果是,返回1;否则返回0;
NOT IN运算符用来判断表达式是否为IN列表中的一个值,若不是,返回1,否则返回0;
【在左侧表达式为NULL的情况下,或是表中找不到匹配项并且表中一个表达式为NULL的情况下,IN和NOT IN的返回值均为NULL】
10、LIKE运算符
匹配字符串,格式:expr LIKE 匹配条件,满足匹配则返回1,否则0;若expr或匹配条件中任何一个为NULL,则结果为NULL。
(1)“%”匹配任何数目的字符,甚至包括零字符。(2)“_”只能匹配一个字符。这两种情况都是在匹配条件中使用
11、REGEXP运算符 【【正则表达式是一个可以进行复杂查询的强大工具】】
(1)'^'匹配以该字符后面的字符开头的字符串;'^s'表示匹配以s开头的字符串;
(2)'$'匹配以该字符前面的字符结尾的字符串;'s$'表示匹配以s结尾的字符串;
(3)'.'匹配任何一个单字符;
(4)'[...]'匹配在方括号内任何字符【只要字符串中有一个或多个括号里有的字符,就可以返回1】。例如:[abc]匹配a、b、c。为了命名字符的范围,使用一个'-'。'[a-z]'匹配任何字母,而'[0-9]'匹配任何数字。
(5)'*'匹配零个或多个在它前面的字符。例如:'x*'匹配任何数量的'x'字符,'[0-9]*'匹配任何数量的数字,而'.*'匹配任何数量的任何字符。
逻辑运算符:
1、NOT或者! 逻辑非
当操作数为0时,返回1;否则返回0;当为NULL时,返回NULL
【注意:NOT 和 !的优先级不同,NOT低于加减乘除,而!高于加减乘除,所以遇到:NOT 1+1 返回0 而:!1+1 返回1,即 (!1)+1=1】
2、AND 或者&&
当操作数均为非零值、并且不为NULL时,返回1;当一个或多个操作数为0时,所得结果为0,其余情况返回为NULL。
【1 AND NULL 为NULL,0 AND NULL 为0】
3、OR 或者 ||
【0 OR NULL =NULL NULL OR NULL =NULL 1 OR NULL =1】
4、XOR 异或运算符
当任意一个操作数为NULL时,返回值为NULL;对于非NULL的操作数,都为非零或者都为零,则返回零。若一个为零,另一个为非零,则返回1;
位运算符:
1、位或运算符 | 2、位与运算符 & 3、位异或运算符 ^
将参与运算的两个数据,按对应的二进制数逐位进行逻辑运算。结果为一个64位无符号整数。
4、位左移运算符 << 5、位右移运算符 >>
格式:expr<<n 或 expr>>n n为要移动的位数。二进制值得所有位都左或右移指定的位数,左边高位或右边低位的数值被移出并丢弃,右边低位或左边高位空出的位置用0补齐。
6、位取反运算符 ~
【以上结果都是64位无符号整数。】
运算符的优先级:
由低到高:
最低:=(赋值运算),:=
||,OR
XOR
&&,AND
NOT
BETWEEN,CASE,WHEN,THEN,ELSE
=(比较运算),<=>,>=,>,<=,<,<>(!=),IS,LIKE,REGEXP,IN
|
&
<<,>>
-,+
*,/,%
^
-(负号),~(位反转)
最高:!
在Windows平台下,Mysql是不区分大小写的,若要区分大小写的话,要用BINARY:
BINARY 'a'='A' 结果为0