时间:2021-07-01 10:21:17 帮助过:4人阅读
MySQL支持所有标准SQL数值数据类型。
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。
作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。
| 类型 | 大小 | 范围(有符号-默认) | 范围(无符号) | 用途 |
|---|---|---|---|---|
| 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的值 | 小数值 |
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
TIMESTAMP类型有专有的自动更新特性,将在后面描述。
| 类型 | 大小 (字节) | 范围 | 格式 | 用途 |
|---|---|---|---|---|
| DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
| TIME | 3 | ‘-838:59:59‘/‘838:59:59‘ | HH:MM:SS | 时间值或持续时间 |
| YEAR | 1 | 1901/2155 | YYYY | 年份值 |
| DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
| TIMESTAMP | 8 | 1970-01-01 00:00:00/2037 年某时 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
| 类型 | 大小 | 用途 |
|---|---|---|
| CHAR | 0-255字节 | 定长字符串 |
| VARCHAR | 0-65535 字节 | 变长字符串 |
| TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
| TINYTEXT | 0-255字节 | 短文本字符串 |
| BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
| TEXT | 0-65 535字节 | 长文本数据 |
| MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
| MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
| LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
| LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
BINARY和VARBINARY类类似于CHAR和VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。它们只是可容纳值的最大长度不同。
有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求。 mysql命令: 数据库操作: 1、显示所有数据库:Show databases; 2、创建数据库:Create database 数据库名; 3、删除数据库:Drop database 数据库名; 表操作: CREATE TABLE 表名( 属性名 数据类型 [完整性约束条件], 属性名 数据类型 [完整性约束条件], . . 属性名 数据表格 [完整性约束条件] );| 约束条件 | 说明 |
| PRIMARY KEY | 标识该属性为该表的主键,可以唯一的标识对应的记录 |
| FOREIGN KEY | 标识该属性为该表的外键,与某表的主键关联 |
| NOT NULL | 标识该属性不能为空 |
| UNIQUE | 标识该属性的值是唯一的 |
| AUTO_INCREMENT | 标识该属性的值自动增加 |
| DEFAULT | 为该属性设置默认值 |
CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)//设置Id_P和LastName都为唯一并命名为uc_PersonID
//删除唯一约束
ALTER TABLE Persons
DROP INDEX uc_PersonID
建表时创建外键
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)//设置本表Id_p字段和Persons表的Id_p主键关联
查看表结构:
1,查看基本表结构: DESCRIBE(或DESC) 表名;//返回表字段及其详细信息表格
2,查看表详细结构: SHOW CREATE TABLE 表名;//返回结果是创建表的sql
删除/清空 表:
1、 drop table 表名; //彻底删除表格,删除字段数据,释放内存空间
2、 truncate 表名; //删除表格数据,不删除字段,释放内存空间
3、 delete from 表名;或delete * from 表名;// 删除内容不删除定义,不释放空间,系统一行一行地删,效率较truncate低
truncate和delete对比:
1、truncate 将重新设置高水平线和所有的索引。在对整个表和索引进行完全浏览时,经过 truncate 操作后的表比Delete操作后的表要快得多。 当表被清空后表和表的索引将重新设置成初始大小,而delete则不能。
2、truncate 是隐式提交,不能触发任何Delete触发器,不能通过rollback命令撤回,而delete可以,因为delete 语句每次删除一行,都在事务日志中为所删除的每行记录一项 ;
3、truncate table 在功能上与不带 WHERE 子句的 delete语句相同:二者均删除表中的全部行。但 truncate 比 delete速度快,且使用的系统和事务日志资源少,因为delete是一行一行的删除。
注意:truncate不能清空父表
修改表:
1,修改表名 ALTER TABLE 旧表名 RENMAE 新表名 ;
2,修改字段 ALTER TABLE 表名 CHANGE 旧属性名 新属性名 新数据类型
3,增加字段 ALTER TABLE 表名 ADD 属性名 数据类型 [完整性约束条件] [FIRST | AFTER 属性名 2]
4,删除字段 ALTER TABLE 表名 DROP 属性名
插入数据
如:SELECT * from t_book,t_booktype; 返回结果将两个表的所有组合结果返回
1、内连接查询:
内连接查询是一种最常用的连接查询。内连接查询可以查询两个或者两个以上的表;
SELECT * from t_book b,t_booktype t where t.id=b.id;
或SELECT * from t_book,t_booktype where t_book.id=t_booktype.id;
查询结果:
也可这么写来查询需要的字段:SELECT bookName,author,bookTypeName from t_book,t_booktype where t_book.id=t_booktype.id;
注意:如果查询的字段(如id)中两个表都有时这种写法会出错,因为无法得知id是哪个表的字段,所以平时多表查询时要写别名
修改为:SELECT tb.bookName,tb.author,tby.id from t_book tb ,t_booktype tby where tb.id=tby.id;
2、外连接查询
外连接可以查出某一张表的所有信息;
SELECT 属性名列表 FROM 表名 1 LEFT|RIGHT JOIN 表名 2 ON 表名 1.属性名 1=表名 2.属性名 2;
注意查询视图字段时有别名的话按照别名查询,没有别名可以按照原字段名称查询;
第四节:查看视图
4.1 DESCRIBE 视图名称; //查看视图字段属性信息
4.2 SHOW TABLE STATUS LIKE ‘视图名称’;// 查看视图基本信息,因为视图是虚表,故查询结果字段都为空;此sql也可以查询普通表的基本信息;后面没有like指定视图时表示查询库中所有表和视图的基本信息
4.3 SHOW CREATE VIEW 视图名称;//查看视图详细信息
4.3 在 views 表中查看视图详细信息
第五节:修改视图
5.1 CREATE OR REPLACE VIEW 语句修改视图
CREATE OR REPLACE [ ALGORITHM ={ UNDEFINED | MERGE | TEMPTABLE }]
VIEW 视图名 [( 属性清单 )]
AS SELECT 语句 [ WITH [ CASCADED | LOCAL ] CHECK OPTION ];
如:create or replace view v1 as select * from mytable where bookId < 30;
5.2 ALTER 语句修改视图
ALTER [ ALGORITHM ={ UNDEFINED | MERGE | TEMPTABLE }]
VIEW 视图名 [( 属性清单 )]
AS SELECT 语句
[ WITH [ CASCADED | LOCAL ] CHECK OPTION ];
如:alter view v1 as select * from mytable;
第六节:更新视图
更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为视图是一个虚
拟的表,其中没有数据。通过视图更新时,都是转换基本表来更新。更新视图时,只能更新权限范围内的数据。
超出了范围,就不能更新。
6.1 插入(INSERT)
CREATE VIEW v1(b,p) AS select bookId,bookName from mytable;
INSERT into v1 values(44,‘think in java‘);//插入视图,再次查看视图v1时会看到插入的数据,视图操作实际是对表的操作,可以看到mytable表中增加了一条数据,但是其他没有插入的字段则是显示默认值
6.2 更新(UPDATE)
update v1 set b=8,p=‘设计模式‘ where b=44
6.3 删除(DELETE)
delete from v1 where b=44;
第七节:删除视图
删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据;
DROP VIEW [ IF EXISTS ] 视图名列表 [ RESTRICT | CASCADE ]
如: DROP VIEW IF EXISTS v1;
触发器
第一节:触发器的引入
触发器(TRIGGER)是由事件来触发某个操作。这些事件包括 INSERT 语句、UPDATE 语句和 DELETE 语句。
当数据库系统执行这些事件时,就会激活触发器执行相应的操作。
第二节:创建与使用触发器
2.1 创建只有一个执行语句的触发器
CREATE TRIGGER 触发器名 BEFORE | AFTER 触发事件
ON 表名 FOR EACH ROW 事件发生时要执行的语句
如:CREATE TRIGGER trig_book AFTER INSERT
ON t_book FOR EACH ROW
UPDATE t_bookType SET bookNum=bookNum+1 WHERE new.bookTypeId=t_booktype.id;
表示t_book表中国执行插入操作时触发t_bookType的更新操作,将bookNum加1
注:new是中间量,表示插入(更新)时的那条数据,如果是删除时用old,表示删除的那条数据
2.2 创建有多个执行语句的触发器
CREATE TRIGGER 触发器名 BEFORE | AFTER 触发事件
ON 表名 FOR EACH ROW
BEGIN
执行语句列表
END
如:
DELIMITER |
CREATE TRIGGER trig_book2 AFTER DELETE
ON t_book FOR EACH ROW
BEGIN
UPDATE t_bookType SET bookNum=bookNum-1 WHERE old.bookTypeId=t_booktype.id;
INSERT INTO t_log VALUES(NULL,NOW(),‘在book表里删除了一条数据‘);
DELETE FROM t_test WHERE old.bookTypeId=t_test.id;
END
|
DELIMITER ;
注:DELIMITER | 包裹起来避免触发多条sql时遇到分号中断执行的情况
第三节:查看触发器
3.1 SHOW TRIGGERS; 语句查看触发器信息
3.2 在 triggers 表中查看触发器信息
第四节:删除触发器
DROP TRIGGER 触发器名;
mysql常用函数(部分举例)
第一节:日期和时间函数
1,CURDATE() 返回当前系统日期; 如:select CURDATE() ,CURTIME(),MONTH(created_at) from theme13;
2,CURTIME() 返回当前系统时间;
3,MONTH(d) 返回日期 d 中的月份值,范围是 1~12
第二节:字符串函数
1,CHAR_LENGTH(s) 计算字符串 s 的字符数;
2,UPPER(s) 把所有字母变成大写字母;
3,LOWER(s) 把所有字母变成小写字母;
第三节:数学函数
1,A BS(x) 求绝对值
2,SQRT(x) 求平方根
3,MOD(x,y) 求余
第四节:加密函数
1,PASSWORD(str) 一般对用户的密码加密 不可逆
2,MD5(str) &nbs