import{_ as s,o as a,c as l,R as n}from"./chunks/framework.a304f0f7.js";const D=JSON.parse('{"title":"MySQL","description":"","frontmatter":{},"headers":[],"relativePath":"note/MySQL.md","lastUpdated":1683038278000}'),e={name:"note/MySQL.md"},t=n(`
在命令行窗口输入
mysql -uroot -p1234 -hlocalhost -P3306
指定用户名为 root
密码为 1234
连接host为 localhost
端口号为 3306
除了以明文方式输入密码,也可以通过另一种方式登录:
mysql -u root -p
1234
进入mysql命令行工具后,查看所有表:
show databases;
MySQL默认为我们创建了四个表 information_schema
mysql
performance_schema
sys
创建一个新的数据库:
create database dbtest1;
使用数据库:
use dbtest1;
创建一张表,初始化id
与name
字段:
create table employees(id int, name varchar(15));
查看表中数据:
select * from emoloyees;
插入一条数据:
insert into employees values(1001, 'Tom');
insert into employees values(1002, 'Jack');
当我们向表中插入中文数据时,5.7
版本的MySQL会报错,而8.0
版本则不会:
insert into employees values(1003, '杰瑞');
检查一下表的信息:
show create table employees;
可以发现,表的默认字符集是 CHARSET=latin1
拉丁字符集,不包含汉字。
查看编码与比较规则:
百分号%
表示一个到多个字符
show variables like 'character_%';
show variables like 'collation_%';
若是5.7
版本,默认的编码字符集为latin1
,而最新的8.0
为utf8
。配置文件可以在my.ini
中修改
删除一个数据库
drop database dbtest1;
DataDefinitionLanguage
用于定义数据库对象(数据库 表 字段) CREATE
DROP
ALERT
等DataManipulationLanguage
用于对数据库表中的数据进行增删改查 INSERT
DELETE
UPDATE
SELECT
等SELECT
是SQL语言的基础,最为重要DataQueryLanguage
用来查询数据库中表的记录 DataControlLanguage
用来创建数据库用户、控制数据库的访问权限 GRANT
REVOKE
COMMIT
ROLLBACK
SAVEPOINT
等;
或 \\g
或 \\G
结束--注释内容
或 # 注释内容
(MySQL独有)SHOW DATABASES;
SELECT DATABASE();
CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];
DROP DATABSE [IF EXISTS] 数据库名
USE 数据库名
mysql -u root -p # 进入mysql
SHOW DATABASES; # 展示所有数据库
CREATE DATABASE custom; # 创建一个名为custom的数据库
USE custom; # 使用custom数据库
SELECT DATABASE(); # 当前使用的是custom数据库
在命令行下,可以在多行内编写一个SQL语句
SHOW TABLES; # 查询当前数据库所有表
DESC 表名; # 查询 表结构
SHOW CREATE TABLE 表名; # 查询指定表的建表语句
# 创建表
CREATE TABLE custom(
param1 type1 [comment ''],
param2 type2 [comment ''],
param3 type3 [comment ''],
param4 type4 [comment '']
)[comment '']
# 创建一个tb_user表
create table tb_user(
id int comment '编号',
name varchar(50) comment '姓名',
age int comment '年龄',
gender varchar(1) comment '性别'
) comment '用户表';
# 展示数据库中所有表
show tables;
# 查询表内所有字段
desc tb_user;
# 展示表的所有信息(包含字段注释、存储引擎、默认字符集、排序规则等信息)
show create table tb_user;
案例 - 员工信息表
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 '员工表';
创建成功后,输入desc emp
查看
mysql> desc emp;
+-----------+------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| id | int | YES | | NULL | |
| workno | varchar(10) | YES | | NULL | |
| name | varchar(10) | YES | | NULL | |
| gender | char(1) | YES | | NULL | |
| age | tinyint unsigned | YES | | NULL | |
| idcard | char(18) | YES | | NULL | |
| entrydate | date | YES | | NULL | |
+-----------+------------------+------+-----+---------+-------+
7 rows in set (0.00 sec)
# 添加一个字段
alter table 表名 add 字段名 类型(长度) [comment '']
# 修改一个字段
alter table 表名 modify 旧字段名 新字段名 类型(长度) [comment '']
# 删除一个字段
alter table 表名 drop 字段名
# 修改表名
alter table 表名 rename to 新表名
alter table emp add nickname varchar(20) comment '昵称'
alter table emp modify nickname username varchar(30)
alter table emp drop username
alter table emp rename to employee
在定义字段时,通过关键字UNSIGNED
确定其无符号 / 有符号
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 Bytes | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 Bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 Bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 Bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 Bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 Bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 Bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于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(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。CHAR性能更优
BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。
类型 | 大小 ( bytes) | 范围 | 格式 | 用途 |
---|---|---|---|---|
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:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |