mysql登录
找bin目录,cmd:
mysql -u root -p
mysql -h localhost -P 3306 -u root -p
然后就进入到mysql命令行:
进入到数据库
- 如果需要先查看已有的数据库列表:
show databases;
2. 如果需要
创建数据库那么就输入创建数据库语句,如果不用创建数据库那么就下一步
-- 每条完整的sql语句末尾都要有分号;;;
create database 数据库名; -- 最简单的创库语句,其他的都会使用默认
create database 数据库名 character set utf8; -- 创建数据库并且设置数据库的字符编码
3. 然后就是进入到数据库中,因为刚登录到mysql时,并没有进入到具体的数据库,而创表又或是查询要先进入到对应的数据库中:
-- 进入到数据库,一般大部分操作都需要先进入到数据库
use 数据库名;
建表
建表 先直接写固定格式:
create table 表名(
字段名(也就是列名) 字段数据类型(括号里是对应的长度) 字段的一些规则, -- 最后一个字段不要加逗号,,,
);
字段名(他会提供,就是个名称,比如name、id、age) 数据类型(常见的如下表) 约束 默认值
id INT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT DEFAULT 1
下面是对这个语句各部分的详细解释:
id:列名,用来标识表中的某一列。在这里,id是这一列的名称。INT:数据类型,表示该列存储的数据是整数类型。在这里,id列被定义为整数型。(10):数据长度NOT NULL表示不能为nullPRIMARY KEY:主键约束,用来标识表中的唯一记录,并且确保每条记录都有一个唯一的标识。在这里,id列被指定为表的主键,这意味着表中的每行数据都将有一个唯一的、非空的id值。AUTO_INCREMENT:自增关键字,用于自动为列生成唯一的递增值。通常与整数类型的主键列一起使用,以确保每次插入新记录时,id列的值会自动比上一条记录的id值大1。DEFAULT 1表示默认值为1,这里只是展示,一般id不设置默认值
实例:
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') |
| json | json | json |
-
一般来说他让建表的时候会直接就说用什么数据类型和对应的长度,记得语法就好,集合和枚举类型要记一下设置的值,他会让设置几个值,就像上面
-
枚举和集合的区别:语法差不多,但是在赋值的时候枚举只能为其中一个,如果没有赋值就是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 主表名称(主表相关联字段) |
关于外键的话,事实上我理解得也少,因为:
图为阿里mysql规范 -- 为什么不推荐使用外键约束 - 知乎 (zhihu.com)
但是我们还是得学,理解的少所以就找了篇通俗易懂的文章(或者看课本P-69)MySQL数据库--外键约束及外键使用_51CTO博客_外键约束
在已经创建好的表的基础上修改表
他说是有的,就比如已经创建好了一个商品表,需要修改某个字段的某些东西又或者再追加一个字段
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");
-- 每一个括号就是对应一行数据,之间用逗号分隔,最后一行不用