MySQL 数据库基础

数据类型

整型

类型范围备注
bit1~64Bbit(2)表示2个二进制位,取值范围为0~3
tinyint1B标记 UNSIGNED 时,取值范围为0~255。当标记 ZEROFILL 且同时标记了 UNSIGNED,当位数不足 M 时,添加前导 0。例如 tinyint(5),当值为 123时,会添加两个前导0,即00123
smallint2B同上
mediumint3B同上
int4B同上
integer4B与 int 完全相同
bigint8B同上

浮点数

类型范围备注
float正负3.4E38float(5,2)表示长度为5,其中2位小数。与Java中float精度相同
double正负1.79E308同上
numeric小数点前后有效位数之和不大于65位使用与float、double相同,但存储方式不同,把9位十进制压缩成4个字节来存储。相当于把浮点数当成字符来保存,但进行了压缩,比float、double更安全可靠,不会出现精度缺失的问题
decimal65位在MySQL中,decimal与numeric完全相同,二者在表示钱时,很有用

字符串

类型范围备注注意
char255B固定长度字符串类型。char(4),当数据长度为2时,会在后边添加2个空格补位长度固定,所以存取效率比 varchar 快,但会占据多余空间,是以空间换时间
varchar65535B可变长度字符串。varchar(4),当数据长度为2时,不会添加空格补位。占3个字节,其中一个字节用来记录长度,当数据长度大于255时,记录长度就需要2个字节了相比 char 存取速度慢,因其长度可变,所以不会浪费多余的空间,是以时间换空间
tinytext2^8~1B可变长度字符串
text2^16~1B同上用于存储较大字符串,有一个字符集,并且会根据字符集的校对规则对值进行排序和比较
mediumtext2^24~1B同上
longtext2^32~1B同上

布尔类型

类型范围备注
bool布尔值,但实际上是用tinyint(1)表示的。当值为0时表示假,当值为非0时表示真。-128也是真
boolean与bool完全相同

日期类型

类型范围备注
dateyyyy-mm-dd
datetimeyyyy-mm-dd hh:mm:ss
timestamp时间戳,用在记录插入与更新自动记录时间
yearyear(2),表示两位的年
time只表示时间

二进制

类型范围备注注意
binary255B固定长度二进制类型。binary(10),当数据为5B时,会添加5B来补位,即长度为10B
varbinary255B可变长度二进制类型。varbinary(10),当数据为5B时,不会补位,长度为6B,其中1B用来记录长度
tinyblob2^8~1B(256B)可变长度二进制类型
blob2^16~1B(64K)同上存储二进制数据,没有字符集
mediumblob2^24~1B(16M)同上

SQL 语句格式

用户

功能格式备注
创建CREATE USER { 用户名@IP地址 | 用户名@‘%’ } IDENTIFIED BY 密码;用户名@IP地址:用户只能在指定的IP地址上登录;
用户名@‘%’:用户可以在任意IP地址上登录。
删除DROP USER ‘用户名@IP地址’;
修改用户RENAME USER ‘用户名@IP地址’ TO ‘新用户名@IP地址’;
修改密码SET PASSWORD [‘用户名@IP地址’] = PASSWORD(新密码);

权限

功能格式备注
查看用户权限SHOW GRANTS FOR ‘用户名@IP地址’;
授权GRANT ALL PRIVILEGES ON 数据库.* TO 用户名@IP地址;
GRANT { CREATE | ALTER | DROP | INSERT | UPDATE | DELETE | SELECT } ON 数据库名.* TO 用户名@IP地址;
取消授权REVOKE 权限 ON 库名.表名 FORM 用户名@IP地址;

数据库

功能格式备注
连接数据库mysql -uroot -p
断开连接quit 或 exit
创建CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARSET SET utf8];数据库中数据编码采用的是安装时指定的默认编码 utf8
删除DROP DATABASE [IF EXISTS] 数据库名;
查看全部SHOW DATABASES;
切换数据库USE 数据库名;
查看定义信息SHOW CREATE DATABASE 库名;
查看所有的编码SHOW VARIABLES LIKE ‘char%’;
修改编码ALTER DATABASE 数据库名 CHARACTER SET utf8;
查看正在使用的数据库SELECT DATABASE();

功能格式备注
创建CREATE TABLE [IF NOT EXISTS] 表名(
`列名` 数据类型 [列属性] [列索引] [列注释] , …,
PRIMARY KEY (`列名`),
KEY `外键名` (`作为外键的列`),
CONSTRAINT `外键名` FOREIGN KEY (`作为外键的列`) REFERENCES `目标表` (`目标列`)
)ENGINE = INNODB DEFAULT CHARSET = utf8;
删除DROP TABLE [IF EXISTS] 表名;
修改表名ALTER TABLE 旧表名 RENAME { AS | TO } 新表名;
查看所有表SHOW TABLES;
查看创表代码SHOW CREATE TABLE 表名;
查看表结构(列名及属性等)DESC 表名;
修改表的字符集ALTER TABLE 表名 CHARACTER SET 字符集;

表字段

功能格式备注
添加ALTER TABLE 表名 ADD 列名 数据类型 [列属性];
删除ALTER TABLE 表名 DROP 列名;
修改列的类型及约束ALTER TABLE 表名 MODIFY 列名 数据类型 [列属性];MODIFY 关键字不能用来列名的重命名,只能修改列的类型和约束
修改列名ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [列属性];CHANGE 关键字用来列名的重命名,不能修改列的类型和约束;
修改默认值ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值;
删除默认值ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;

表主键

功能格式备注
添加ALTER TABLE 表名 ADD PRIMARY KEY(列名);
删除ALTER TABLE 表名 DROP PRIMARY KEY;

表外键

功能格式备注
添加ALTER TABLE 表名 ADD CONSTRAINT `外键名` FOREIGN KEY (`作为外键的列`) REFERENCES `目标表` (`目标列`);
删除ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

表数据

功能格式备注注意
添加INSERT INTO `表名` [(列名,…)] values (值,…)[,(值,…)];
删除DELETE FROM `表名` [WHERE 条件];DELETE 删除数据,如果是 Innodb,自增会从0开始(存在内存中,断电即失);如果是Myisam,则继续从上一个子增量开始(存在文件中,不会丢失);一条条删除,不清空 auto_increment 记录数
删除TRUNCATE TABLE `表名`;TRUNCATE 删除数据,不会改变表结构和索引约束,自增清零将表删除,重新建表,auto_increment 将置为0
更新UPDATE `表名` SET `列名` = 值[,…] [WHERE 条件];
查看SELECT [ALL | DISTINCT] {* | table.* | [table.列名 [as 别名][,…]]} FROM `表名` [as 别名] [left | right | inner join `表名`] [WHERE 条件] [GROUP BY 分组列[,…]] [HAVING 过滤条件] [ORDER BY 排序列[,…]] [LIMIT {[offset,]页码 | 条目数 offset}]

事务

功能格式备注
开启/关闭SET autocommit = {0 | 1};0 关闭自动提交;1 开启自动提交(默认)
开始START TRANSACTION;
提交COMMIT;
回滚ROLLBACK;

事务保存点

功能格式备注
新增SAVEPOINT 保存点名;
回滚到某个保存点ROLLBACK TO SAVEPOINT 保存名;
删除RELEASE SAVEPOINT 保存点;

索引

功能格式备注
新增CREATE {INDEX | UNIQUE INDEX | FULLTEXT INDEX} 索引名 ON `表名` (`列名`);不能用来创建主键索引,必须用 ALTER TABLE 来代替创建
新增ALTER TABLE `表名` ADD {PRIMARY KEY | INDEX | UNIQUE | FULLTEXT} 索引名 (`列名`);
删除DROP INDEX 索引名 ON `表名`;
删除ALTER TABLE `表名` DROP INDEX 索引名;

运算符

比较运算符

运算符描述注意
> < <= >= = <>大于、小于、小于等于、大于等于、等于、不等于
BETWEEN … AND …在某一区间中含头含尾
IN在 in 列表中的值
LIKE 通配符模糊查询% 用来匹配多个字符
_ 用来匹配一个字符
IS NULL判断为空
IS NOT NULL判断不为空

逻辑运算符

运算符描述
and多个条件同时成立
or多个条件任意一个成立
not取反

视图(view)

  • 视图是一个虚拟表,其内容有查询定义。其与真实表一致,包含列和行数据;
  • 它并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成;
  • 定义视图的筛选可以来自当前或其他数据库的表或视图。

创建视图

-- 格式:CREATE VIEW 视图名 AS SQL语句
CREATE VIEW getAreaDayInfo AS 
	SELECT * FROM area_day_info WHERE pollutantCode IN('6','7'); 

删除视图

-- 格式:DROP VIEW 视图名称
DROP VIEW getAreaDayInfo;

修改视图

-- 格式:ALTER VIEW 视图名称 AS SQL 语句
ALTER VIEW getAreaDayInfo AS
	SELECT * FROM area_day_info WHERE pollutantCode IN('6','7','8');

使用试图

-- 格式:SELECT * FROM 视图名称
SELECT * FROM getAreaDayInfo

函数(function)

在MySQL中有很多内置函数,比如SUM()、MAX()等,函数可以传参数,也可以接受返回值,但是函数没办法得到执行语句得到的结果。

创建函数

DELIMITER \\
CREATE FUNCTION functionName(
	i1 int,
	i2 int)
RETURNS int
READS SQL DATA
## 由于开启了二进制文件,就必须指定函数状态
## 函数状态有三种:DETERMINISTIC(不确定的)、NO SQL(没有SQL语句,不会修改数据)、READS SQL DATA(只读,不修改数据) 
BEGIN
	DECLARE num int;
	SET num = i1 + i2;
	RETURN(num);
END \\
DELIMITER ;

删除函数

-- 格式:DROP FUNCTION functionName;
DROP FUNCTION functionName;

执行函数

-- 获取返回值
DECLARE @i VARCHAR(32);
SELECT UPPER('alex') into @i;
SELECT @i;

-- 在查询中使用
SELECT f1(1,2);

触发器(trigger)

当你在执行这条语句之前或者之后触发一次增删改查,触发器用于定制用户对表的行进行【增/删/改】前后的操作。

创建触发器

-- 格式:CREATE TRIGGER 触发器名 <before|after> <insert|update|delete> ON <表名> FOR EACH ROW BEGIN ... END;
-- 实例:插入后操作
DELIMITER //
CREATE TRIGGER triggerName AFTER INSERT ON user FOR EACH ROW 
BEGIN
	IF NEW.NAME == 'xkf' THEN
		INSERT INTO user_info(NAME) VALUES('xxx')
	END
END //
DELIMITER ;

删除触发器

-- 格式:DROP TRIGGER triggerName;
DROP TRIGGER triggerName;

使用触发器

-- 格式:增删改的操作可以用来触发触发器
INSERT INTO user(name) VALUES('XXX');

存储过程(procedure)

创建存储过程

DELIMITER // -- 自定义sql语句结尾符号
CREATE PROCEDURE procedureName()
BEGIN
	SELECT * FROM user;
END //
DELIMITER ; -- 自定义sql语句结尾符号

带参的存储过程

  • in 仅用于入参
  • out 仅用于返回值
  • inout 既可以用于入参又可以当作返回值
DELIMITER \\
CREATE PROCEDURE procedureName(
	in i1 int,		-- 入参
	inout i3 int,	-- 即入参又能用于出参
	out r1 int		-- 出参
)
BEGIN
	DECLARE temp1 int; -- 声明变量
	SET temp1 = 1;
	SET i3 = temp1 + 100;
	SET r1 = temp1;
END \\
DELIMITER ;

-- 执行存储过程
DECLARE @t1 INT DEFAULT 3;  -- 设置变量默认值为3
DECLARE @t2 INT;
CALL procedureName(1,@t1,@t2);
SELECT @t1,@t2;

执行存储过程

-- 格式:call 存储过程名();
CALL procedureName();

删除存储过程

-- 格式:DROP PROCEDURE 存储过程名;
DROP PROCEDURE procedureName;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值