.

150 阅读7分钟

mysql登录

找bin目录,cmd:

mysql -u root -p

mysql -h localhost -P 3306 -u root -p

然后就进入到mysql命令行:

image.png

进入到数据库

  1. 如果需要先查看已有的数据库列表:
show databases;

image.png 2. 如果需要创建数据库那么就输入创建数据库语句,如果不用创建数据库那么就下一步

-- 每条完整的sql语句末尾都要有分号;;;
create database 数据库名; -- 最简单的创库语句,其他的都会使用默认
create database 数据库名 character set utf8; -- 创建数据库并且设置数据库的字符编码

image.png 3. 然后就是进入到数据库中,因为刚登录到mysql时,并没有进入到具体的数据库,而创表又或是查询要先进入到对应的数据库中:

-- 进入到数据库,一般大部分操作都需要先进入到数据库
use 数据库名;

image.png

建表

建表 先直接写固定格式:

create table 表名(
字段名(也就是列名) 字段数据类型(括号里是对应的长度) 字段的一些规则, -- 最后一个字段不要加逗号,,,
);
字段名(他会提供,就是个名称,比如name、id、age) 数据类型(常见的如下表) 约束 默认值
id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT DEFAULT 1

下面是对这个语句各部分的详细解释:

  1. id:列名,用来标识表中的某一列。在这里,id 是这一列的名称。
  2. INT:数据类型,表示该列存储的数据是整数类型。在这里,id 列被定义为整数型。
  3. (10):数据长度
  4. NOT NULL 表示不能为null
  5. PRIMARY KEY:主键约束,用来标识表中的唯一记录,并且确保每条记录都有一个唯一的标识。在这里,id 列被指定为表的主键,这意味着表中的每行数据都将有一个唯一的、非空的 id 值。
  6. AUTO_INCREMENT:自增关键字,用于自动为列生成唯一的递增值。通常与整数类型的主键列一起使用,以确保每次插入新记录时,id 列的值会自动比上一条记录的 id 值大1。
  7. DEFAULT 1 表示默认值为1,这里只是展示,一般id不设置默认值

image.png image.png 实例:

create table 表名(
id int(11) not null,
name carchar(50) NOT null   -- sql语句中基本不区分大小写,没有规范要求的话怎么舒服怎么来
);

如果在命令行里面打错了的话,可以直接打一个分号;就回车,报错不用管,用方向键选择了修改就好,不一定要重新打

可能会用到的数据类型

类型描述示例
varchar变长字符串varchar(255) -- 他说用啥就用啥
char定长字符串char(100) -- 他说用啥就用啥
tinyint微小整数类型,1字节age tinyint
int数字int(10)
float单精度浮点型float(8,2) -- 长度为8,小数位长度为2
double双精度字符串同上
text文本字符串text(666)
date日期date -- 2023-12-11
time时间time -- 20:47:30
datetime日期和时间datetime -- 2023-12-11 20:47:30
timestamp时间戳timestamp
boolean布尔值boolean
enum枚举类型enum('男','女')
set集合类型set('手机','电脑','pad')
jsonjsonjson
  • 一般来说他让建表的时候会直接就说用什么数据类型和对应的长度,记得语法就好,集合和枚举类型要记一下设置的值,他会让设置几个值,就像上面

  • 枚举和集合的区别:语法差不多,但是在赋值的时候枚举只能为其中一个,如果没有赋值就是null或空;集合可以为多个且可以为空;他们都只能设置给定的值,比如表里面的枚举设置了('男','女'),那么赋值就只能为('男','女'),否则报错

不怎么常用的:

数据类型描述示例
SMALLINT小整数类型,2字节quantity SMALLINT
MEDIUMINT中等整数类型,3字节population MEDIUMINT
BIGINT大整数类型,8字节revenue BIGINT
BLOB二进制大对象,最多65535个字节image BLOB

约束

约束类型描述示例
PRIMARY KEY主键约束,唯一标识表中的每一行数据id INT PRIMARY KEY
UNIQUE唯一约束,确保列中的值不重复email VARCHAR(100) UNIQUE
NOT NULL非空约束,确保列中的值不为空name VARCHAR(50) NOT NULL
NOT NULL无符号约束,规定数据不为负数price decimal(7,2) UNSIGNED
DEFAULT默认值约束,在插入新行时如果未提供值,则使用默认值status ENUM('active', 'inactive') DEFAULT 'active'
AUTO_INCREMENT自增约束,用于自动为列生成唯一的递增值id INT AUTO_INCREMENT
FOREIGN KEY外键约束,确保列中的值与另一个表中的值相匹配FOREIGN KEY(需要设置外键约束的字段名) REFERENCES 主表名称(主表相关联字段)

关于外键的话,事实上我理解得也少,因为:

image.png 图为阿里mysql规范 -- 为什么不推荐使用外键约束 - 知乎 (zhihu.com) 但是我们还是得学,理解的少所以就找了篇通俗易懂的文章(或者看课本P-69)MySQL数据库--外键约束及外键使用_51CTO博客_外键约束

image.png

在已经创建好的表的基础上修改表

他说是有的,就比如已经创建好了一个商品表,需要修改某个字段的某些东西又或者再追加一个字段

mysql中修改或追加某个字段可以使用ALTER TABLE 语句

修改某个字段

ALTER TABLE table_name MODIFY COLUMN column_name new_data_type constraints;
  • table_name:要修改字段的表名。
  • column_name:要修改的字段名。
  • new_data_type:要修改字段的新数据类型。
  • constraints:可选项,用于定义字段的约束条件,如NOT NULL、DEFAULT等。
ALTER TABLE goods MODIFY COLUMN email VARCHAR(100) NOT NULL;

上面语句的意思就是将 goods 表中的email字段的数据类型和长度改为VARCHAR(100),并且设置了一个约束为非空 NOT NULL

追加一个字段

在表的最后一个字段追加
ALTER TABLE table_name ADD column_name column_definition;
  • table_name:要添加字段的表名。
  • column_name:要添加的字段名。
  • column_definition:对应的一些定义,比如数据类型、长度、约束等。
# 示例
ALTER TABLE goods ADD email VARCHAR(100) nut null;
在指定位置追加
ALTER TABLE table_name ADD column_name column_definition AFTER last_name;
  • table_name:要添加字段的表名。
  • column_name:要添加的字段名。
  • column_definition:对应的一些定义,比如数据类型、长度、约束等。
  • last_name:在这个字段后面追加
# 示例
ALTER TABLE goods ADD email VARCHAR(100) NOT NULL AFTER names;

删除某个字段

ALTER TABLE table_name DROP column_name;
  • table_name:要删除字段的表名。
  • column_name:要删除的字段名。
# 示例
ALTER TABLE goods DROP email;

修改字段顺序

# 修改到column_name_2字段的后面
ALTER TABLE table_name MODIFY column_name data_type AFTER column_name_2;

#修改为表的第一个字段
ALTER TABLE table_name MODIFY column_name data_type FIRST;
  • data_type:字段的数据类型。

增删改

  • UPDATE - 更新数据库中的数据

UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition; 
  • UPDATE:关键字
  • column_name:要修改的表名。
  • SET:关键字
  • column1 = value1:左边为字段名,右边为值
  • condition:条件

WHERE规定那条记录或哪些记录需要更新,如果省略了WHERE子句,那么每一条数据都会被修改和更新

# 示例
UPDATE goods SET name = '张三', email = 123 WHERE id > 3; 
-- 把 id 大于3的数据的name和email修改
  • DELETE - 从数据表中删除数据

delete from table_name where condition;
  • delete from:关键字
  • table_name:要删除数据的表名。
  • condition:条件

如果没有设置where那么所有的记录(每一行数据)都会被删掉

# 示例
delete from goods WHERE id = 3; 
-- 删除id等于3的数据
  • INSERT INTO - 向数据库中插入新数据

INSERT INTO table_name VALUES (value,value,value);

-- 常用 
INSERT INTO table_name (name,id) VALUES ("makc",123); 

# 一种是直接按表中字段的顺序插入一行记录,一种则是字段名对应value插入值
# 插入单行数据示例
insert into goods (id,name,email) values (1,"张三","123321");

# 插入多行数据
insert into goods (id,name,email) values 
(1,"张三","123321"),
(2,"张2","123321"),
(3,"张4","123321");
-- 每一个括号就是对应一行数据,之间用逗号分隔,最后一行不用