登录数据库
mysql -u用户名 -p
密码
数据库命令以**分号;**结尾,一条可以分为好几行,不区分大小写
注释方式是
单行 – 内容 注意–后面有一个空格
多行 /* */
SQL语句
分类 | 全称 | 说明 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,用来定义数据库结构和对象(数据库,表,字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中的记录 |
DCL | Data Control Language | 数据控制语言,用来创建或撤销用户账户,控制数据库的访问权限 |
数据库设计DDL
DDL数据库设计
创建数据库
database也可以改为schema
create database 数据库名字;
-- create schemas 数据库名字
如果创建的数据库已经有了会报错。加一个判断语句if not exists
create database if not exists 数据库名字;
CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
查询数据库
show databases
-- show schemas
切换数据库
use 数据库名字;
查看当前正在使用的数据库是哪个数据库
select database();
删除数据库
drop database 数据库名
如果该数据库已经没有了在删除会报错,此时使用判断语句if exists
drop database if exists 数据库名
DDL表操作
约束关键字
字段 | 描述 | 约束 |
---|---|---|
非空约束 | 该字段值不能为null | not null |
唯一约束 | 保证字段的所有有效数据都是唯一的,不能重复 | unique |
主键约束 | 主键是一个或数个的唯一标识,要求非空且唯一,主键自增auto_increment | primary key |
默认约束 | 保存数据时,如果未指定该字段值,则采用默认值 | default |
外键约束 | 让两张表的数据建立逻辑连接,保证数据的一致性和完整性 | foreign key |
创建表
create table 表名(
字段1 字段1类型 [约束] [comment '字段1注释' ],
字段2 字段2类型 [约束] [comment '字段2注释' ],
......
字段n 字段n类型 [约束] [comment '字段n注释' ]
) [ comment '表注释' ] ;
[]代表可写可不写
create table tb_user(
id int primary key comment '用户id',
username varchar(20) not null unique comment '用户账号', -- 约束可以多个存在
name varchar(5) not null comment '名字',
age int comment '年龄',
gender char(1) default '男' comment '性别'
)comment '用户表';
查询表
- 查看当前数据库所有表格:show tables;
- 查看表结构:desc 表名;
- 查看建表语句:show create table 表名;
修改表
- 添加字段:
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
- 修改字段类型:
alter table 表名 modify 字段名 新类型(长度);
- 修改字段名和字段类型:
alter table 表名 change 原字段名 新字段名 类型(长度) [comment 注释] [约束];
- 删除字段:
alter table 表名 drop column 字段名;
- 重命名表:
rename table 旧名 to 新名;
以上操作最好以可视化工具的方式修改,不使用sql语句
Mysql数据类型
数值类型
分类 | 类型 | 大小 (byte) | 有符号 (SIGNED) 范围 | 无符号 (UNSIGNED) 范围 | 描述 |
---|---|---|---|---|---|
数值类型 | tinyint | 1 | (-128, 127) | (0, 255) | 小整数值 |
smallint | 2 | (-32768, 32767) | (0, 65535) | 大整数值 | |
mediumint | 3 | (-8388608, 8388607) | (0, 16777215) | 大整数值 | |
int | 4 | (-2147483648, 2147483647) | (0, 4294967295) | 大整数值 | |
bigint | 8 | (-2^63, 2^63-1) | (0, 2^64-1) | 极大整数值 | |
float | 4 | (-3.402823466 E+38, 3.402823466351 E+38) | 0 和 (1.175494351 E-38, 3.402823466 E+38) | 单精度浮点数值 | |
double | 8 | (-1.7976931348623157 E+308, 1.7976931348623157 E+308) | 0 和 (2.2250738585072014 E-308, 1.7976931348623157 E+308) | 双精度浮点数值 | |
decimal | 小数值 (精度更高) |
关键字unsigned。控制是否有符号
-- 创建一个无字符的极小整数值
gender tinyint unsigned not null,
float(5,2):5表示整个数字长度,2 表示小数位个数
double(5,2):5表示整个数字长度,2 表示小数位个数
decimal(5,2):5表示整个数字长度,2 表示小数位个数
字符串类型
分类 | 类型 | 大小 | 描述 |
---|---|---|---|
字符串类型 | 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(10): 最多只能存10个字符,不足10个字符,占用10个字符空间 AB 性能高 浪费空间
varchar(10): 最多只能存10个字符,不足10个字符, 按照实际长度存储 ABC 性能低 节省空间
日期类型
分类 | 类型 | 大小(byte) | 范围 | 格式 | 描述 |
---|---|---|---|---|---|
日期类型 | 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 | 混合日期和时间值,时间戳 |
数据库操作DML
insert语法
- 插入字段映射规范插入:
insert into 表名 (字段1, 字段2) values (值1, 值2);
- 全部字段映射规范插入:
insert into 表名 values (值1, 值2, ...);
- 批量映射插入(指定字段):
insert into 表名 (字段1, 字段2) values (值1, 值2), (值1, 值2);
- 批量映射插入(全部字段):
insert into 表名 values (值1, 值2, ...), (值1, 值2, ...);
insert into table_emp(id, username, name, gender, img, entrydate, create_time, update_time)
values (null,'zhizhu','蜘蛛'