主题
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 较差
- 日期时间类型
练习题
设计一张员工信息表,要求如下:
- 编号(纯数字)
- 员工工号(字符串类型,长度不超过 10 位)
- 员工姓名(字符串类型,长度不超过 10 位)
- 性别(男/女,存储一个汉字)
- 年龄(正常人年龄,不可能存储负数)
- 身份证号(二代身份证号均为 18 位,身份证中有 X 这样的字符)
- 入职时间(取值年月日即可)
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 表名;