SQL 分类
通常把sql分为三类:
- DDL (Data Definition Language): 数据定义语言,如 CREATE、DROP、ALTER、TRUNCATE
- DML (Data Manipulation Language): 数据操作语言,如 INSERT、UPDATE、DELETE、CALL
- 细分还可以分出一类 DQL (Data Query Language): 数据查询语言,如 SELECT
- DCL (Data Contral Language): 数据查询语言,如 GRANT、REVOKE
- 写在前面:mysql数据库没有像linux里面那样严格的大小写敏感,但是自己创建的内容必须遵循大小写,我们可以理解为一个新的语言
- 常用命令
创建数据库
- CREATE DATABASE test_DB;(分号意味着结尾,没有分号代表换行)
创建表
- USE test_DB(这个不用分号,指直接转到某某库)
- CREATE TABLE player (
id INT,
name VARCHAR(100),
level INT,
exp INT,
gold DECIMAL(10, 2)
); - 这里我做了一个游戏里面的玩家表格,分别对应的是游戏id、游戏名、等级、经验、金币系统,这里可以看见我们在后面有不同的数据类型,分别为int(整数),varchar(100)[字符最大为100] decimal(10,2)[总长度10位数,保留两位小数,保留的两位小数同样包含在10位数里,所以我们可以得到最大值为99999999.99];
- DESC player;
- 显示表格目录,我们可以清楚看见输出,用navicat表示如下
ALTER TABLE player MODIFY COLUMN NAME VARCHAR(200);- 这个命令的意思是我们在实际中发现玩家100字符并不能满足我们的日常需求,为此我们将100字符上限改为200字符,ALTER TABLE player为指定"player"的表格;MODIFY COLUMN 修改字段属性,语法为 MODIFY COLUMN + 表头 + 数据类型。
- ALTER TABLE player RENAME COLUMN NAME TO nick_name
- 同样的,既然可以改数据类型就可以修改名字,这个命令的意思就是修改表头name的名字为nick_name (名字并不重要,起名鬼才23333)
- 再用DESC player;可以看见修改完成!

- ALTER TABLE player add COLUMN last_login DATETIME
- 类似的还有添加,在
player玩家表中,新增一列,列名last_login,类型为日期时间DATETIME,用于记录玩家最后一次登录时间。 - ALTER TABLE player DROP COLUMN last_login;
- 删除某行
- DROP TABLE player;
- 删除整个表格
数据的增删改查
- INSERT INTO player (id, nick_name, level, exp, gold) VALUES (1, '张三', 1, 1, 1);
- 现在我们要在表中写入一些特定的数据,我们可以指定全部,也可以指定单个进行修改,也可以同时插入多条数据用逗号隔开,格式为(1,'张三',1,1,1),(2,'李四',1,1,1),字符必须用分号隔开,注意中英文,于linux里相同,这里不做多赘述
- SELECT * FROM player; 输出表格内容,上面是表头,注意区分

- 我们再进行修改,让这个数据库更加合理,我们都知道,游戏开局玩家的等级通常都是1,而不是为空,所以,我们可以用如下命令来进行修改
- ALTER TABLE player MODIFY LEVEL INT DEFAULT(1)
- 其实和上面的那条修改数据命令是一样的,只是我们这修改条件为:level这一条的值为整数且默认值为一,毕竟等级没有小数不是~
- 其实以上我们提到的是表格里面的约束,因为有约束才会显得更加合理,常见的约束有如下几种:默认值(如上)、非空(如果不插入内容会报错)、唯一约束(具有唯一性,不重复性)、主键约束(不能重复、不能空、作为索引)、外键约束(分父子表,子表内容里必须包含父表)

- 这里我们可以看见李四是先创建,并没有更新level,我们可以用如下指令来进行更新
- UPDATE player SET LEVEL = 1 WHERE nick_NAME = '李四';
- 更新表格里的索引到李四行的level改为1

- 但是我们看见还有2人的exp和gold为0,我们刚开服初始化所以玩家数据,可以用到这个指令
- UPDATE player set exp=0, gold=0;(直接对全局修改,而非数据类型,所以全局都会受到影响)

- DELETE FROM player WHERE gold=0;
- 最后一个,就是我们的删了,其实这个有点类似我们英语语法里面的从句,当gold为0时直接删除,我们表格直接清空