MySQL_基础_DDL数据定义语言
库的管理
库的切换 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;