1.1 数据库初识 DDL

198 阅读6分钟

MYSQL 数据库初识 DDL

链接数据库

mysql [-h 127.0.0.1] [-p 3306] [-u root] [-p]

mysql -u root -p

代码注释

  • 单行注释: -- 开头 (#开头 mysql特有)
  • 多行注释: /* */
  • 不区分大小写 , 关键字建议大写

SQL 分类 (定义,操作,查询,控制)

分类全程说明
DDLData Definition Language数据定义,用来定义数据对象(库,表,字段)
DMLData Manipulation Language数据操作,用来对表中的数据进行增删改查
DQLData Query Language数据查询,用来对表的数据查询
DCLData Control Language数据控制,用来创建数据库用户、控制数据库的访问权限

DDL 数据库操作

数据库操作

  • 查询
-- 查询所有数据库
SHOW DATABASES;

-- 查询当前数据库
SELECT DATABASE();
  • 创建
-- CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
CREATE DATABASE test;
CREATE DATABASE test DEFAULT CHARSET utf8mb4;
CREATE DATABASE IF NOT EXISTS test DEFAULT CHARSET utf8mb4;
  • 删除
-- DROP DATABASE [IF EXISTS] 数据库名;
DROP DATABASE test;
DROP DATABASE IF EXISTS test;
  • 使用
-- USE 数据库名;
USE test;
-- 查询当前使用的数据库
SELECT DATABASE();

表操作-查询

  • 查询当前库的所有表
SHOW TABLES;
  • 查询表结构
-- DESC 表名;
DESC test;
  • 查询指定表的建表语句
-- SHOW CREATE TABLE 表名;
SHOW CREATE TABLE test;
  • 创建表
CREATE TABLE 表名(
  字段1 字段1类型 COMMENT 字段1注释,
  字段2 字段2类型 COMMENT 字段2注释,
  ...
  字段n 字段n类型 COMMENT 字段n注释
)[COMMENT 表注释]

数据类型

主要包括以下五大类: 整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT

浮点数类型:FLOAT、DOUBLE、DECIMAL

字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB

日期类型:Date、DateTime、TimeStamp、Time、Year

其他数据类型:BINARY、VARBINARY、ENUM、SET、Geometry、Point、MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection等

  • 数值类型

整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT

浮点数类型:FLOAT、DOUBLE、DECIMAL

定义无符号范围 age TINYINT UNSIGNED

定义有符号范围 age TINYINT SIGNED

小数点后1位 小数点前3位 score double(4,1)

类型描述大小范围-有符号(SIGNED)范围-无符号(UNSIGNED)
TINYINT小整形1字节-2^7到(2^7)-10到(2^8)-1
SMALLINT短整形2字节-2^15到(2^15)-10到(2^16)-1
MEDIUMINT中整形3字节-2^23到(2^23)-10到(2^24)-1
INT或INTEGER整形4字节-2^31到(2^31)-10到(2^32)-1
BIGINT大整形8字节-2^63到(2^31)-10到(2^32)-1
FLOAT单浮点4字节
DOUBLE双浮点8字节
DECIMAL小数-依赖于M(精度)和D(标度)的值依赖于M(精度)和D(标度)的值
  • 字符串类型

字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB

类型描述大小备注
CHAR定长字符串0-255字节0到(2^8)-1
VARCHAR变长字符串0-65535字节0到(2^16)-1
TINYBLOB二进制数据的短文本数据0-255字节0到(2^16)-1
TINYTEXY短文本字符串0-255字节0到(2^16)-1
BLOB二进制的长文本数据0-65535字节0到(2^16)-1
TEXT文本字符串0-65535字节0到(2^16)-1
MEDIUMBLOB二进制的中等长度文本数据0-16777215字节0到(2^24)-1
MEDIUMTEXT中等长度文本字符串0-16777215字节0到(2^24)-1
LONGBLOB二进制的长文本数据0-4294967295字节0到(2^32)-1
LONGTEXT长文本字符串0-4294967295字节0到(2^32)-1
-- 定义 `tyep(length)` type类型,length可存储长度 

-- 存入数据长度不足10 自动补满10位,超过10 报错
char(10)

-- 存入数据长度不足15 不自动补位, 超过15 报错
varchar(15)

-- char 与 varchar 的性能对比 char > varchar
-- 原因 varchar 在使用中需要动态计算内容
  • 日期类型

日期类型:Date、DateTime、TimeStamp、Time、Year

类型描述大小范围格式
Date日期3字节1000-01-01 至 9999-12-31YYYY-MM-DD
Time时间or持续时间3字节-833:59:59 至 833:59:59HH:MM:SS
Year年份1字节1901 至 2155YYYY
DateTime混合日期和时间8字节1000-01-01 00:00:00 至 9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS
TimeStamp混合日期和时间,时间戳4字节1970-01-01 00:00:01 至 2038-01-19 03:14:07YYYY-MM-DD HH:MM:SS

表操作-修改

  • 添加字段

ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];

  • 修改数据类型

ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

  • 修改字段名和字段类型

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];

  • 删除字段

ALTER TABLE 表名 DROP 字段名;

  • 修改表名

ALTER TABLE 表名 RENAME TO 新表名

  • 删除表

DROP TABLE [IF EXISTS] 表名;

  • 删除指定表,并重新创建该表

TRUNCATE TABLE 表名;

总结

  • DDL 数据库操作
SHOW DATABASES;
CREATE DATABASE IF NOT EXISTS 数据库名;
USE 数据库名;
SELECT DATABASE();
DROP DATABASE 数据库名;
  • DDL 表操作
SHOW TABLES;

CREATE TABLE 表名 (
字段1名 字段1类型,
字段2名 字段2类型
);

DESC 表名;
SHOW CREATE TABLE 表名;

ALTER TABLE 表名 ADD/MODIFY/CHANGE/DROP/RENAME TO/...;

DROP TABLE 表名;


练习

  • 题1

设计一个员工信息表,要求如下:

  1. 编号(纯数字)
  2. 员工工号(字符串,长度max10)
  3. 员工姓名(字符串,长度max10)
  4. 性别(男/女,存一个汉字)
  5. 年龄(正常年龄,不可能存负数)
  6. 身份号(二代身份证均为18位,含有X字符)
  7. 入职时间(年月日即可)
  • 答1
-- 创建练习库
CREATE DATABASE IF NOT EXISTS exercises DEFAULT CHARSET utf8mb4;

-- 选择要使用的库
USE exercises;

-- 查看当前使用的库
SELECT DATABASE();

-- 创建员工信息表
CREATE TABLE emp(
    id         INT              COMMENT '编号',
    work_no    VARCHAR(10)      COMMENT '工号',
    name       VARCHAR(10)      COMMENT '姓名',
    gender     CHAR(1)          COMMENT '性别',
    age        TINYINT UNSIGNED COMMENT '年龄',
    id_card    CHAR(18)         COMMENT '身份证号',
    entry_date DATE             COMMENT '入职时间'
) COMMENT '员工信息表';

-- 查看表详情
DESC emp;

  • 题2

为emp表增加一个新的字段 '昵称' 为nickname,类型为VAARCHAR(20)

  • 答2
-- 给表emp 添加字段 nick_name
ALTER TABLE emp ADD nick_name VARCHAR(20) COMMENT '昵称';

-- 查看表详情 
desc emp;

  • 题3

将emp表的nick_name字段修改为username,类型为 VARCHAR(30)

  • 答3
-- 修改字段 nick_name 的字段名以及类型
ALTER TABLE emp CHANGE nick_name username VARCHAR(30) COMMENT '用户名';

-- 查看表详情 
desc emp;

  • 题4

将emp表的username字段删除

  • 答4
-- 删除字段 username
ALTER TABLE emp DROP username;

-- 查看表详情 
desc emp;

  • 题5

将emp表的表名修改为employee

  • 答5
--  修改表名
ALTER TABLE emp RENAME TO employee;

-- 查看当前库所有表
show tables;

  • 题6

删除表 employee 并重新创建该表,

  • 答6
--  删除表,并重建
TRUNCATE TABLE employee;

-- 查看当前库所有表
show tables;

  • 题7

删除表 employee

  • 答7
-- 删除表 employee ,不存在时报错
DORP TABEL employee;
-- 删除表 employee , 有则删除,无也不报错
DORP TABEL IF EXITS employee;

-- 查看当前库所有表
show tables;