库的管理
库的切换
USE 库名;
库的查看
SHOW DATABASES;
库的表查看
SHOW TABLES;
库的创建
CREATE DATABASE [IF NOT EXISTS] 库名 [CHARACTER SET 字符集];
库的修改
修改库名
关闭Mysql服务器 -> 到data目录下手动修改库名 -> 重启Mysql服务器即可
修改库的字符集
ALTER DATABASE 库名 CHARACTER SET 字符集;
库的删除
DROP DATABASE [IF EXISTS] 库名;
表的管理
表的结构查看
DESC 表名;
表的创建
CREATE TABLE 表名(
列名 列的类型 [(长度)] [约束],
列名 列的类型 [(长度)] [约束],
...
列名 列的类型 [(长度)] [约束]
);
表的修改
修改表名
ALTER TABLE 旧表名 RENAME TO 新表名;
添加列
ALTER TABLE 表名 ADD COLUMN 列名 数据类型 [FIRST | AFTER 字段名];
修改列名
ALTER TABLE 表名 CHANGE COLUMN 旧列名 新列名 数据类型;
修改列类型或约束
ALTER TABLE 表名 MODIFY COLUMN 列名 新类型 [新约束];
删除列
ALTER TABLE 表名 DROP COLUMN 列名;
表的删除
DROP TABLE [IF EXISTS] 表名;
表的复制
复制表结构
CREATE TABLE 复制表名 LIKE 表名;
复制表结构+数据
CREATE TABLE 复制表名 SELECT * FROM 表名;
复制表部分结构
CREATE TABLE 复制表名 SELECT 列1[,列2..] FROM 表名 WHERE 0;
数据类型
分类
数值型:
整型:TINYINT、SMALLINT、MEDIUMINT、INT/Integer、BIGINT
小数:
定点数:DECIMAL(M, D)
浮点数:FLOAT(M, D)、DOUBLE(M, D)
字符型:
字符串:CHAR、VARCHAR
文本:TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
二进制:TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB
日期型:
YEAR、TIME、Date、DATETIME、TIMESTAMP
数值型
整型
类型 字节 范围(有符号) 范围(无符号) 用途
TINYINT 1 -2^7 ~ 2^7-1 0 ~ 2^8-1 微小整数
SMALLINT 2 -2^15 ~ 2^15-1 0 ~ 2^16-1 小整数
MEDIUMINT 3 -2^23 ~ 2^23-1 0 ~ 2^24-1 中整数
INT(Integer) 4 -2^31 ~ 2^31-1 0 ~ 2^32-1 大整数
BIGINT 8 -2^63 ~ 2^63-1 0 ~ 2^64-1 极大整数
1、默认有符号,通过UNSIGNED关键字设置无符号
2、数值超出范围,会报out of range异常警告,并且插入临界值
3、如果不设置长度,会有默认的长度
4、长度代表显示的最大宽度,如果不够则左边用0填充,但必须搭配ZEROFILL才会显示,并默认变为无符号整型
小数型
类型 字节 范围 用途
FLOAT(M, D) 4 ±1.75494351E-38~ ±3.402823466E+38 单精度浮点数(8位精度)
DOUBLE(M, D) 8 ±2.2250738585072014E-308~ ±1.7976931348623157E+308 双精度浮点数(16位精度)
DECIMAL(M, D) M>D为M+2,否则D+2 依赖于M和D的值 定点数
1、M:整数部位+小数部位,D:小数部位
2、如果超过范围,会报out of range异常警告,并且插入临界值
3、M和D都可以省略,如果是定点数,M默认为10,D默认为0
4、如果精确度要求较高,则优先考虑使用定点数
字符型
类型 字节 用途
CHAR 0 ~ 2^8-1 固定长度字符串
VARCHAR 0 ~ 2^16-1 可变长度字符串
TINYBLOB 0 ~ 2^8-1 微小的二进制形式文本数据
TINYTEXT 0 ~ 2^8-1 微小的文本数据
BLOB 0 ~ 2^16-1 小的二进制形式文本数据
TEXT 0 ~ 2^16-1 小的文本数据
MEDIUMBLOB 0 ~ 2^24-1 中等的二进制形式文本数据
MEDIUMTEXT 0 ~ 2^24-1 中等的文本数据
LONGBLOB 0 ~ 2^32-1 极大的二进制形式文本数据
LONGTEXT 0 ~ 2^32-1 极大的文本数据
日期型
类型 字节 范围 格式 用途
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 4 1970-01-01 00:00:00/2038-1-19 11:14:07 YYYYMMDD hh:mm:ss 时间戳值(结束时间是第 2147483647 秒)
1、TIMESTAMP是UTC时间戳,与时区相关。
2、DATETIME的存储格式是一个YYYYMMDDHHmmSS的整数,与时区无关。
3、DATETIME的存储范围大于TIMESTAMP。
4、TIMESTAMP的列可以自动更新。
5、除非有特殊需求,否则建议使用TIMESTAMP。
ENUM、SET、BIT
1、ENUM列允许在列中存储一组定义值中的单个值。
2、SET列允许在列中存储一组定义值中的一个或多个值。
3、BIT在InnoDB中其实是一个最小的整数类型。而MySQL在检索BIT的时候会将其当做字符串,而不是整数,这可能会导致一些奇怪的行为。
4、不建议使用这三个类型:用整数代替。
约束
语法:
1、创建表时添加约束
CREATE TABLE 表名(
字段名 字段类型 列级约束,
字段名 字段类型,
[CONSTRAINT 约束名] 约束类型(字段名) [外键的引用]
);
2、修改表时添加约束
ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型 新约束; # 列级约束
ALTER TABLE 表名 ADD [CONSTRAINT 约束名] 约束类型(字段名) [外键的引用]; # 表级约束
3、查看约束
DESC 表名;
SHOW INDEX FROM 表名;
含义:
一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
分类:
主键约束(PRIMARY KEY):唯一性,非空性。
唯一约束(UNIQUE):唯一性,可以空,但只能有一个。
检查约束(CHECK):对该列数据的范围、格式的限制。[MySQL中不支持]
非空约束(NOT NULL):所约束的列不能为NULL值。
外键约束(FOREIGN KEY):需要建立两表间的关系并引用主表的列。
默认约束(DEFAULT):该数据的默认值。
约束支持:
列级约束:主键、唯一、检查、非空、默认
表级约束:主键、唯一、检查、外键
案例:
1、创建表时添加约束
CREATE TABLE IF NOT EXISTS stuinfo(
id INT PRIMARY KEY, # 主键
stuname VARCHAR(20) NOT NULL, # 非空
gender CHAR(1) CHECK(gender='男' OR gender ='女'), # 检查
age INT DEFAULT 18, # 默认
seat INT UNIQUE, # 唯一
majorid INT,
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id) # 外键
);
2、修改表时添加约束
案例1:添加主键
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY; # 列级约束
ALTER TABLE stuinfo ADD PRIMARY KEY(id); # 表级约束
案例2:添加外键
ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id);
3、修改表时删除约束
案例1:删除默认约束
ALTER TABLE stuinfo MODIFY COLUMN age INT ;
案例2:删除主键
ALTER TABLE stuinfo DROP PRIMARY KEY;
案例3:删除唯一
ALTER TABLE stuinfo DROP INDEX seat;
案例4:删除外键
ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;
标识列
含义:
可以不用手动的插入值,系统提供默认的序列值
特点:
1、标识列必须和key搭配
2、一个表只能有一个标识列
3、标识列的类型只能是数值型
4、标识列可以通过 SET auto_increment_increment=3;设置步长
案例:
1、创建表时添加标识列,并设置起始值
CREATE TABLE IF NOT EXISTS stuinfo(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL
) AUTO_INCREMENT = 1000;
2、修改表时添加标识列
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY AUTO_INCREMENT;
3、修改表时删除标识列
ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
4、修改标识列起始值
ALTER TABLE stuinfo AUTO_INCREMENT = 2000;