SQL 语法
注意事项
* 表引擎
MySQL常用的存储引擎为MyISAM、InnoDB、MEMORY、MERGE、archive、CSV,
其中InnoDB提供事务安全表,其他存储引擎都是非事务安全表。
1、MyISAM是MySQL的默认存储引擎。MyISAM不支持事务、也不支持外键,但其访问速度快,对事务完整性没有要求。
2、InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是比起MyISAM存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
3、MEMORY 存储引擎使用存在内存中的内容来创建表。每个MEMORY表只实际对应一个磁盘文件。MEMORY类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用HASH索引。但是一旦服务关闭,表中的数据就会丢失掉。
4、MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同。MERGE表本身没有数据,对MERGE类型的表进行查询、更新、删除的操作,就是对内部的MyISAM表进行的。
5、archive:这种类型只支持select 和 insert语句,而且不支持索引。常应用于日志记录和聚合分析方面。
6、CSV存储引擎把数据以逗号分隔的格式存储在文本文件中。
* 字段详解
1、bigint,int,smallint,tinyint — 数字性 (存储各种数字数据,如价格、年龄或者数量)
### 整形
• TINYINT—3,3—一个微小的整数,支持 -128到127(SIGNED),0到255(UNSIGNED),需要1个字节存储
• SMALLINT—5,5—一个小整数,支持 -32768到32767(SIGNED),0到65535(UNSIGNED),需要2个字节存储
• MEDIUMINT—7,8—一个中等整数,支持 -8388608到8388607(SIGNED),0到16777215(UNSIGNED),需要3个字节存储
• INT—10,10—一个整数,支持 -2147493648到2147493647(SIGNED),0到4294967295(UNSIGNED),需要4个字节存储
• BIGINT—19,20—一个大整数,支持 -9223372036854775808到9223372036854775807(SIGNED),0到18446744073709551615(UNSIGNED),需要8个字节存储
###浮点
• FLOAT——一个小的菜单精度浮点数。支持 -3.402823466E+38到-1.175494351E-38,0和1.175494351E-38 to 3.402823466E+38,需要4个字节存储。如果是UNSIGNED,正数的范围保持不变,但负数是不允许的。
• DOUBLE——一个双精度浮点数。支持 -1.7976931348623157E+308到-2.2250738585072014E-308,0和2.2250738585072014E-308到1.7976931348623157E+308。如果是FLOAT,UNSIGNED不会改变正数范围,但负数是不允许的。
• REAL——同DOUBLE
• DECIMAL——将一个数像字符串那样存储,每个字符占一个字节
###比特
•BIT——同TINYINT(1)
•BOOL——同TINYINT(1)
2、字符串类型:char、varchar、nvarchar (字符串列类型用于存储任何类型的字符数据,如名字、地址或者报纸文章。下面是MySQL中可用的字符串列类型)
###定长
• CHAR—1,255—字符。固定长度的字串,在右边补齐空格,达到指定的长度。支持从0到255个字符。搜索值时,后缀的空格将被删除。
• VARCHAR—1,255—可变长的字符。一个可变长度的字串,其中的后缀空格在存储值时被删除。支持从0到255字符
###大字符
• TINYTEXT——支持255个字符。要求长度+1字节的存储。与TINYBLOB一样,只不过搜索时会忽略大小写。(0.25KB)
• TEXT——支持65535个字符。要求长度+2字节的存储。 (64KB)
• MEDIUMTEXT——支持16777215个字符。需要长度+3字节的存储。 (16M)
• LONGTEXT——支持4294967295个字符。需要长度+4字节的存储。(4G)
###保存二进制文件 (不建议使用)
• TINYBLOB——微小的二进制对象。支持255个字符。需要长度+1字节的存储。与TINYTEXT一样,只不过搜索时是区分大小写的。(0.25KB)
• MEDIUMBLOB——中等大小的二进制对象。支持16777215个字符。需要长度+3字节的存储。 (16M)
• BLOB——二进制对象。支持65535个字符。需要长度+2字节的存储。 (64KB)
• LONGBLOB——大的的二进制对象。支持4294967295个字符。需要长度+4字节的存储。 (4G)
###
• ENUM——枚举。只能有一个指定的值,即NULL或"",最大有65535个值
ENUM('value1','value2',...) enum('a','b','c') enum('true','false')
枚举。一个仅有一个值的字符串对象,这个值式选自与值列表'value1'、'value2', ...,或NULL。一个ENUM最多能有65535不同的值。
• SET——一个集合。可以有0到64个值,均来自于指定清单.
SET('value1','value2',...)
一个集合。能有零个或多个值的一个字符串对象,其中每一个必须从值列表'value1', 'value2', ...选出。一个SET最多能有64个成员。
3、日期
###字符日期
• DATETIME——格式:'YYYY-MM-DD HH:MM:SS',范围:'1000-01-01 00:00:00'到'9999-12-31 23:59:59'
• DATE——格式:'YYYY-MM-DD',范围:'1000-01-01'到'9999-12-31'
• YEAR——格式:'YYYY,范围:'1901'到'2155' ---->可以放弃了。。
###时间戳
• TIMESTAMP——格式:'YYYYMMDDHHMMSS'、'YYMMDDHHMMSS'、'YYYYMMDD'、'YYMMDD',范围:'1970-01-01 00:00:00'到'2037-01-01 00:00:00'
• TIME——格式:'HH:MM:SS' -》放弃
4、常用字符
//经纬度:总长度为20,保留小数点后面17位
DOUBLE 20,17
//货币,总长度为9,保留小数点后面2位
DECIMAL(9,2)