MySQL手册
1.登录
# 本地登录
mysql -uroot –p //隐藏密码
mysql -u root -p
mysql -uroot -proot //明文密码(注意:-p后没有空格)
mysql -u root -proot
# 远程登录
mysql -h127.0.0.1 -P3306 -uroot -p
mysql -h 127.0.0.1 -P 3306 -u root -p
mysql -h127.0.0.1 -P3306 -uroot -proot
mysql -h 127.0.0.1 -P 3306 -u root -proot
mysql -h 127.0.0.1 -P 3306 --user=root --password=root
2.数据类型
数值类型
类型 | 存储大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 byte(字节) | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 byte(字节) | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 byte(字节) | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 byte(字节) | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 byte(字节) | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
布尔类型
类型 | 存储大小 | 说明 | 用途 |
---|---|---|---|
BOOL | - | MySQL 不存在 BOOL,但是是TINYINT(1)的同义词 | 布尔值 |
BOOLEAN | - | MySQL 不存在 BOOLEAN,但是是TINYINT(1)的同义词 | 布尔值 |
TINYINT(1) | 1 byte(字节) | zero(0)值被视为假。非zero(0)值视为真。 | 布尔值 |
浮点类型
UNSIGNED:无符号、ZEROFILL:0填充
类型 | 存储大小 | 说明 | 用途 |
---|---|---|---|
FLOAT | 4 byte(字节) | FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] M是小数总位数,D是小数点后面的位数。 如果M和D被省略,根据硬件允许的限制来保存值。单精度浮点数精确到大约7位小数位。 |
单精度 浮点数值 |
DOUBLE | 8 byte(字节) | DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] M是小数总位数,D是小数点后面的位数。 如果M和D被省略,根据硬件允许的限制来保存值。双精度浮点数精确到大约15位小数位。 |
双精度 浮点数值 |
DECIMAL(M,D) | 对DECIMAL(M,D) 如果M>D,为M+2 否则为D+2 |
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] 压缩的“严格”定点数。M是小数位数(精度)的总数,D是小数点(标度)后面的位数。 小数点和(负数)的‘-’符号不包括在M中。 如果D是0,则值没有小数点或分数部分。 DECIMAL整数最大位数(M)为65。 支持的十进制数的最大位数(D)是30。 如果D被省略, 默认是0。如果M被省略, 默认是10。 |
定点 小数值 |
日期和时间类型
类型 | 存储大小 | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 byte(字节) | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 byte(字节) | ‘-838:59:59’/‘838:59:59’ | HH:MM:SS | 时间值 |
YEAR | 1 byte(字节) | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 byte(字节) | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 日期和时间 |
TIMESTAMP | 4 byte(字节) | 1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒 北京时间为:2038-1-19 11:14:07 格林尼治时间为: 2038年1月19日 凌晨 03:14:07 |
YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
字符串类型
类型 | 说明 | 用途 |
---|---|---|
CHAR(n) | n:表示要存储的最大字符数 长度范围:0-255 byte(字节) |
定长字符串 |
VARCHAR(n) | n:表示要存储的最大字符数 长度范围:0-65535 byte(字节) VARCHAR值保存时不进行填充。 当值保存和检索时尾部的空格仍保留,符合标准SQL。 |
变长字符串 |
TINYBLOB | 长度范围:0-255 bytes | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 长度范围:0-255 bytes | 短文本字符串 |
BLOB | 长度范围:0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 长度范围:0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 长度范围:0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 长度范围:0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 长度范围:0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 长度范围:0-4 294 967 295 bytes | 极大文本数据 |
枚举类型 | 其值是从允许值的列表中选择的 | - |
SET类型 | ET由多个set成员组成的列值用用逗号(,)分隔的成员指定。 这样的结果是 SET成员值本身不应包含逗号。 |
- |
3.DDL:数据定义语言
--查看所有数据库
show databases;
--查看某个数据库的定义的信息
show create database `数据库名`;
--创建数据库
CREATE {
DATABASE | SCHEMA} [IF NOT EXISTS] db_name [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name;
CREATE DATABASE IF NOT EXISTS `数据库名` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
--删除数据库
DROP DATABASE [IF EXISTS] `数据库名`;
--查看正在使用的数据库
select database();
--使用某个数据库
use `数据库名`;
-- 创建表
CREATE TABLE IF NOT EXISTS `表名` (
`id` BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT 'ID',
`字段名` 类型(长度) 是否为空 默认值 约束 注释,
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT = '表注释' ROW_FORMAT = Dynamic;
--查看所有表
show tables;
--查看表结构
desc `表名`;
--删除表
drop table `表名`;
--修改表:修改表名
RENAME TABLE 表名 to 新表名;
ALTER TABLE 表名 RENAME TO 新表名;
--修改表:修改表注释
ALTER TABLE 表名 COMMENT '新的注释';
--修改表:删除字段
ALTER TABLE 表名 DROP 字段名;
--修改表:添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [约束] COMMENT '字段注释'; //自动添加到表字段的末尾
ALTER TABLE 表名 ADD 字段名 类型(长度) [约束] COMMENT '字段注释' FIRST; //设定位第一列
ALTER TABLE 表名 ADD 字段名 类型(长度) [约束] COMMENT '字段注释' AFTER 字段名; //设定位于某个字段之后
--修改表:修改字段类型
ALTER TABLE 表名 MODIFY 字段名 类型(长度) [约束];
--修改表:修改字段注释
ALTER TABLE 表名 MODIFY 字段名 类型(长度) [约束] COMMENT '新的注释';
--修改表:修改字段类型、字段名、注释
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型(长度) [约束] 默认值 注释;
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型(长度) NULL DEFAULT NULL COMMENT '注释' FIRST;
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型(长度) NULL DEFAULT NULL COMMENT '注释' AFTER `字段名`;
4.DML:数据操作语言
-- 插入表记录
insert into 表 (字段1,字段2,字段3..) values (值1,值2,值3..); --向表中插入某些字段
insert into 表 values (值1,值2,值3..); --向表中插入所有字段,字段的顺序为创建表时的顺序
-- 更新表记录
update 表名 set 字段名=值,字段名=值,...; --更新所有记录的指定字段
update 表名 set 字段名=值,字段名=值,... where 条件; --更新符合条件记录的指定字段
-- 删除记录
DELETE FROM 表名称 WHERE 列名称 = 值; --如果删除表中的部分数据
DELETE 别名 FROM 表名称 别名 WHERE 列名称 = 值; --如果删除表中的部分数据
delete from 表名称; --是从表中把数据一条一条的删除,所以这样删除大表数据的时候一条一条删会很慢
truncate table 表名称; --它不管表中有多少记录,它会先摧毁这个表结构,然后重建表结构,所以这样在删除大表数据的时候就会很快;
5.DQL:数据查询语言
语法:select [distinct] * | 列名,列名 from 表 where 条件;
-- 简单查询
select * from 表名; --查全表
select 字段1,字段2,…… from 表名; --按字段查找
-- 别名查询.使用的关键字是as(as可以省略的)
select 表别名.字段1,表别名.字段2,…… from 表名 表别名; --表别名
select 字段1 别名,字段2 别名,…… from 表名; --列别名(1.更清楚的标记这一列是什么 2.简化列名)
-- 去掉重复值
select distinct 字段 from 表名;
-- 查询结果是表达式(运算查询)
select 名称,价格 旧,(价格+10) 新 from 表名;
-- 条件查询
-- 查询指定字段 = 指定值的所有信息
SELECT * FROM 表名 WHERE 字段名 = 值;
-- 查询指定字段 != 指定值的所有信息
SELECT * FROM 表名 WHERE 字段名 != 值;
-- 查询指定字段 > 指定值的所有信息
SELECT * FROM 表名 WHERE 字段名 > 值;
-- 查询指定字段 在指定范围内 的所有信息
SELECT * FROM product WHERE price >= 2000 AND price <=10000; --标准写法
SELECT * FROM product WHERE price BETWEEN 2000 AND 10000; --简易写法 效果一样
-- 查询指定字段<指定值 或 指定字段>指定值 的所有信息
select * from 表名 where 字段名 > 值