前言
DDL
全称Data Definition Language,数据定义语言,用来定义数据库对象(数据库,表,字段)
数据库操作
show databases ;
select database ( ) ;
create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序
规则 ] ;
create database xiaobai_db;
create database if not exists xiaobai_db1;
create database xiaobai_db2 default charset utf8mb4;
drop database [ if exists ] 数据库名;
drop database if exists xiaobai_db;
use 数据库名;
use test_db;
表操作
查询操作
show tables ;
use sys;
show tables ;
desc 表名;
show create table 表名;
CREATE TABLE 表名(
字段1 字段1 类型 [ COMMENT 字段1 注释 ] ,
字段2 字段2 类型 [ COMMENT 字段2 注释 ] ,
字段3 字段3 类型 [ COMMENT 字段3 注释 ] ,
. . . . . .
字段n 字段n类型 [ COMMENT 字段n注释 ]
) [ COMMENT 表注释 ] ;
create table tb_user(
id int comment '编号' ,
name varchar ( 50 ) comment '姓名' ,
age int comment '年龄' ,
gender varchar ( 1 ) comment '性别'
) comment '用户表' ;
数据类型
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
数值类型
类型 大小 有符号(SIGNED)范围 无符号(UNSIGNED)范围 描述 TINYINT 1byte (-128,127) (0,255) 小整数值 SMALLINT 2bytes (-32768,32767) (0,65535) 大整数值 MEDIUMINT 3bytes (-8388608,8388607) (0,16777215) 大整数值 INT/INTEGER 4bytes (-2147483648,2147483647) (0,4294967295) 大整数值 BIGINT 8bytes (-263,2 63-1) (0,2^64-1) 极大整数值 FLOAT 4bytes (-3.402823466 E+38,3.402823466351 E+38) 0 和 (1.175494351 E-38,3.402823466 E+38) 单精度浮点数值 DOUBLE 8bytes (-1.7976931348623157E+308,1.7976931348623157E+308) 0 和(2.2250738585072014E-308,1.7976931348623157E+308) 双精度浮点数值 DECIMAL 依赖于M(精度)和D(标度)的值 依赖于M(精度)和D(标度)的值 小数值(精确定点)
字符串类型
类型 大小 描述 CHAR 0-255 bytes 定长字符串(需要指定长度) VARCHAR 0-65535 bytes 变长字符串(需要指定长度) TINYBLOB 0-255 bytes 不超过255个字符的二进制数据 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的性能会更高些。
日期时间类型
类型 大小 范围 格式 描述 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:01 至2038-01-19 03:14:07 YYYY-MM-DD HH:MM:SS 混合日期和时间值,时间戳
案例
设计一张员工信息表,要求如下:
编号(纯数字) 员工工号 (字符串类型,长度不超过10位) 员工姓名(字符串类型,长度不超过10位) 性别(男/女,存储一个汉字) 年龄(正常人年龄,不可能存储负数) 身份证号(二代身份证号均为18位,身份证中有X这样的字符) 入职时间(取值年月日即可) 建表语句
create table emp( id int comment '编号' , workno varchar ( 10 ) comment '工号' , name varchar ( 10 ) comment '姓名' , gender char ( 1 ) comment '性别' , age tinyint unsigned comment '年龄' , idcard char ( 18 ) comment '身份证号' , entrydate date comment '入职时间'
) comment '员工表' ;
修改
ALTER TABLE 表名 ADD 字段名 类型 ( 长度) [ COMMENT 注释 ] [ 约束 ] ;
ALTER TABLE emp ADD nickname varchar ( 20 ) COMMENT '昵称' ;
ALTER TABLE 表名 MODIFY 字段名 新数据类型 ( 长度) ;
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型 ( 长度) [ COMMENT 注释 ] [ 约束 ] ;
ALTER TABLE emp CHANGE nickname username varchar ( 30 ) COMMENT '昵称' ;
ALTER TABLE 表名 DROP 字段名;
ALTER TABLE emp DROP username;
ALTER TABLE 表名 RENAME TO 新表名;
ALTER TABLE emp RENAME TO employee;
删除
DROP TABLE [ IF EXISTS ] 表名;
DROP TABLE IF EXISTS tb_user;
TRUNCATE TABLE 表名;