Skip to content

DDL

数据库的增删改查

sql
/* 查询所有数据库 */
SHOW DATABASES;

/* 查询当前数据库 */
SELECT DATABAS();

/*
    创建数据库
    注意:mysql中一般制定字符集不会为utf8,而是utf8mb4,考虑utf8存储一个汉字为3个字符,
         但是有些符号需要4个字节,utf8不满足,可以考虑utf8mb4
*/
create database [if not exists] 数据库名称 [default charset 字符集] [collate 排序规则];

/* 删除数据库 */
drop database [if exists] <数据库名>;

/* 使用数据库 */
use <数据库名>;

表的查询与新增

sql
/*
   查询当前所在数据库的所有表
   注意:要先切换到数据库 (use xxxx;) 才能使用show tables;
*/
show tables;

/* 查询表结构 */
desc <表名>;

/* 查询指定表的建表语句 */
show create table <表名>;

/*
   创建表
   注意: 最后一个字段后面没有逗号
*/
create table 表名(
   字段1 类型 [comment 字段注释],
   字段2 类型 [comment 字段注释],
   字段3 类型 [comment 字段注释],
   字段4 类型 [comment 字段注释],
   ....
   字段n 类型 [comment 字段注释]
) [comment 表注释];

案例:用 sql 语句编写下表的创建语句

sql
create table user(
    id int primary key auto_increment comment "ID",
    name varchar(50) not null comment "姓名",
    age int not null comment "年龄",
    gender char(1) not null comment "性别"
) comment "员工信息表";

mysql 的数据类型

主要分为三大类

  • 数值类型
  • 字符串类型
  • 日期时间类型

- 数值类型

提示

decimal 类型中有精度标度的概念,精度指的是整个数值的长度,标度指的是小数位数占的长度 例如: 123.45 ---> 精度为 5,标度为 2 --> decimal(5,2)

  • 示例
sql
-- 年龄 (年龄可以用一个整数表示0-女,1-男,2-未知)且不需要符号
age tinyint unsigned

-- 分数 (分数为小数,且最长4位,例如110.5,最多一位小数)
score double(4,1)

- 字符串类型

提示

带有 blob 的是存储二进制数据的(二进制一般是存储到文件服务器,很少存储到数据库,意识性能不好,二是管理不方便) 带有 text 的是存储长文本数据的

  • char(10):最多只能存储 10 个字符长度,不论输入有没有到达 10 个字符,也都会占用 10 个字符, 相对于 varchar 性能更好
  • varchar(10):最多只能存储 10 个字符,实际占用的空间为内容的长度,需要实时计算所用空间,性能相对 char 较差

- 日期时间类型

练习题

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

  1. 编号(纯数字)
  2. 员工工号(字符串类型,长度不超过 10 位)
  3. 员工姓名(字符串类型,长度不超过 10 位)
  4. 性别(男/女,存储一个汉字)
  5. 年龄(正常人年龄,不可能存储负数)
  6. 身份证号(二代身份证号均为 18 位,身份证中有 X 这样的字符)
  7. 入职时间(取值年月日即可)
sql
create table emp(
    id int primary key auto_increment comment '编号',
    emp_no varchar(10) comment '工号',
    emp_name varchar(10) comment '姓名',
    gander char(1) comment '性别',
    age tinyint unsigned comment '年龄',
    id_card char(18) comment '身份证号',
    join_time date comment '入职时间'
) comment '员工表';

表的修改与删除

- 添加字段

  • 语法
sql
alter table 表名 add 字段名 类型(长度) [comment 字段注释] [约束];
  • 示例,给 user 表新增一个 nickname 字段
sql
alter table user add nickname varchar(20) comment '昵称';

- 仅修改数据类型

  • 语法
sql
alter table 表名 modify 字段名 新数据类型(长度);
  • 示例:将 nickname 长度修改为 50
sql
alter table user modify nickname varchar(50);

- 修改字段名和数据类型

  • 语法
sql
alter table 表名 change 旧字段名 新字段名 新字段类型(长度) [comment 字段注释] [约束];
  • 示例:修改 user 表的 nickname 为 nick_name 长度为 100
sql
alter table user change nickname nick_name varchar(100);

- 删除字段

  • 语法
sql
alter table 表名 drop 字段名;
  • 示例:将 user 表的 nick_name 删除
sql
alter table user drop nick_name;

- 修改表名

  • 语法
sql
alter table 表名 rename to 新表明;
  • 示例:将 user 表名修改问 emp
sql
alter table user rename to emp;

- 删除表

注意

在删除表时,无论是哪种形式,表里的数据都会被删除

  • 语法
sql
/* 删除表 []表示内容可选*/
drop table [if exists] 表名;

/* 删除制定表,并重新创建该表(用于清空表数据) */
truncate table 表名;
  • 示例:删除 user 表
sql
drop table if exists user;

小结

  • 数据库操作
sql
show databases;

create database 数据库名;

use 数据库名;

selece databases(); -- 查询当前所在的数据库

drop database 数据库名;
  • 表操作
sql
show tables;

create table 表名(字段 字段类型, 字段 字段类型);

desc 表名;

show create table 表名;

alter table 表名 add/modify/change/drop/rename to ....;

drop table 表名;