目录
SQL通用语法
SQL分类
DDL
数据库操作
表操作-查询
1.查询当前数据库所有表
2.查询表结构
3.查询指定表的建表语句
表操作-创建
表操作-数据类型
数值类型
字符串类型
日期类型
DDL小案例
表操作-修改&删除
1.添加字段
2. 修改数据类型
3.修改字段名和字段类型
4.删除字段
5.修改表名
6.删除表&删除并重新创建表
DDL总结
数据库操作
表操作
SQL(1)
分为六点内容:
- SQL通用语法
- SQL分类
- DDL
- DML
- DQL
- DCL
SQL通用语法
- SQL语句可以单行或多行书写,以分号结尾。
- SQL语句可以使用空格/缩进来增强语句的可读性。
- MySQL数据库的SQL语句不区分大小写,但关键字建议使用大写。
- 注释:
单行注释: --注释内容 或 #注释内容 (MySQL特有)
多行注释: /*注释内容*/
SQL分类
分类 | 全称 | 说明 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,用来定义数据对象(数据库,表,字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户、控制数据库的访问权限 |
DDL
数据库操作
1.查询所有数据库
SHOW DATABASES;
2.查询当前数据库
SELECT DATABASE();
3.创建
CREATE DATABASE IF NOT EXISTS 数据库名 DEFAULT CHARSET 字符集 COLLATE 排序规则;
解释:
4.删除
DROP DATABASE IF EXISTS 数据库名;
解释:
此处的IF EXISTS与第3点的作用类似。
5.使用
USE 数据库名;
表操作-查询
1.查询当前数据库所有表
SHOW TABLES;
2.查询表结构
DESC 表名;
3.查询指定表的建表语句
SHOW CREATE TABLE 表名;
表操作-创建
CREATE TABLE 表名(字段1 字段1类型[COMMENT 字段1注释],字段2 字段2类型[COMMENT 字段2注释],字段3 字段3类型[COMMENT 字段3注释],......字段n 字段n类型[COMMENT 字段n注释]
)[COMMENT 表注释];
注意:[......]为可选参数,最后一个字段后面没有逗号.
我们来尝试一下,创建数据库->使用数据库->建表
->查看表结构->查询表的建表语句。
表操作-数据类型
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
数值类型
分类 | 类型 | 大小 | 描述 |
---|---|---|---|
数值类型 | TINYINT | 1 byte | 小整数值 |
SMALLINT | 2 bytes | 大整数值 | |
MEDIUMINT | 3 bytes | 大整数值 | |
INT 或 INTEGER | 4 bytes | 大整数值 | |
BIGINT | 8 bytes | 极大整数值 | |
FLOAT | 4 bytes | 单精度浮点数值 | |
DOUBLE | 8 bytes | 双精度浮点数值 | |
DECIMAL | / | 小数值(精度确定点数) |
注:DECIMAL依赖于M(精度)和D(标度)的值,例如:570.68,其精度为5,标度为2;
使用DOUBLE时也需要标明精度和标准,如分数80.5、100.0,记为:score DOUBLE(4,1).
我们之前写的age实际上用不到INT这样稍微大的空间,而且因为其一定为整数,所以可以改写为:age TINYINT UNSIGNED.
字符串类型
分类 | 类型 | 描述 | 大小 |
---|---|---|---|
字符串类型 | CHAR | 定长字符串 | 0-255 bytes |
VARCHAR | 变长字符串 | 0-65535 bytes | |
TINYBLOB | 不超过255个字符的二进制数据 | 0-255 bytes | |
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 |
重点解释一下char(定长字符串)和varchar(变长字符串)的区别:
char在给定字符长度的情况下,只能固定占用一定的空间,
而varchar在给定字符长度的情况下,会对数据进行计算之后再占用空间。
例如:char(10)和varchar(10),二者都存储着4个字节的数据,char占用10个字节,而varchar则只会占用4个字节。
性能上,char比varchar更好,不需要对数据的大小进行计算。
日期类型
分类 | 类型 | 描述 | 大小 | 格式 | 范围 |
---|---|---|---|---|---|
日期类型 | DATE | 日期值 | 3 | YYYY-MM-DD | 1000-01-01至9999-12-31 |
TIME | 时间值或持续时间 | 3 | HH:MM:SS | -838:59:59至838:59:59 | |
TEAR | 年份值 | 1 | YYYY | 1901至2155 | |
DATETIME | 混合日期和时间值 | 8 | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00至9999-12-31 23:59:59 | |
TIMESTAMP | 混合日期和时间值,时间戳 | 4 | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01至2038-01-19 03:14:07 |
DDL小案例
根据需求创建表(设计合理的数据类型、长度)
设计一张员工信息表,要求如下:
- 编号(纯数字)
- 员工工号(字符串类型,长度不超过10位)
- 员工姓名(字符串,长度不超过10位)
- 性别(男/女,存储一个汉字)
- 年龄(正常人年龄,不可能存储负数)
- 身份证号(二代身份证号均为18位,身份证中有X这样的字符)
- 入职时间(取值年月日即可)
代码:
CREATE TABLE emp(id INT COMMENT '编号',worknumber VARCHAR(10) COMMENT '工号',name VARCHAR(10) COMMENT '姓名',gender CHAR(1) COMMENT '性别',age TINYINT UNSIGNED COMMENT '年龄',idcard CHAR(18) COMMENT '身份证号',entrydate DATE COMMENT '入职时间'
)COMMENT '员工表';
创建之后查询表格情况(DESC EMP;):
表操作-修改&删除
1.添加字段
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释];
为emp表增加一个新的字段“昵称”为nickname,类型为varchar(20)
2. 修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
3.修改字段名和字段类型
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释];
将emp表的nickname字段修改为username,类型为varchar(30):
4.删除字段
ALTER TABLE 表名 DROP 字段名;
将emp表的字段username删除:
5.修改表名
ALTER TABLE 表名 RENAME TO 新表名;
将emp表的表名修改为employee:
6.删除表&删除并重新创建表
删除表
DROP TABLE [IF EXISTS] 表名;
删除指定表,并重新创建该表
TRUNCATE TABLE 表名;
(后者保留表结构)
注意:在删除表时,表中的全部数据也会被删除。
删除表操作:
删除并重建表操作:
DDL总结
数据库操作
SHOW DATABASES;
CREATE DATABASE 数据库名;
USE 数据库名;
SELECT DATABASE();
DROP DATABASE 数据库名;
表操作
SHOW TABLES;
CREATE TABLE 表名(字段 字段类型,字段 字段类型);
DESC 表名;
SHOW CREATE TABLE 表名;
ALTER TABLE 表名 ADD/MODIFY/CHANGE/DROP/RENAME TO ...;
DROP TABLE 表名;
end
学习自:黑马程序员——MySQL数据库