一文解决Mysql增删查改操作(linux下非图形界面)

对于初学数据库的开发者,可以只了解CRUD操作,当然这些远远不够,后续改补的基础等还是要补的.

关于数据库的概念等,这里就不多说了,可以在B站上找一找和数据库概论相关的视频.
我后续也会更新计算机基础知识的内容.

第零部分:开启数据库
su - 切换到root用户
service mysql start 启动mysql
mysql -u root 以root用户的身份登入mysql
第一部分:创建数据库与建表

mysql作为关系型数据库,数据都是存在表中.
我们先建一个数据库(上面说的mysql是数据库管理系统,为了方便叫数据库)

show databases; 查看目前有哪些数据库
CREATE DATABASE 数据库名字; 创建一个数据库

创建完数据库,我们就可以在数据库中建表了
注意:每一条SQL语句都要以;结尾,才代表结束.

USE 数据库名字;
show tables;
CREATE TABLE 表名(列名 数据类型(数据长度) 约束, 列名 数据类型(数据长度) 约束);
第二部分:增加

使用INSERT语句对建好的表进行数据插入。

INSERT 表名 VALUES(数据,数据); // 这种的插入,要求对表中所有列都有有效插入。
INSERT 表名(列名,列名) VALUES(数据,数据); // 这种的插入,只对已有列名,进行插入,未包含的列名值为NULL(如果该列约束为NOT NULL,会报错)
第二点五部分:增加的扩展:约束

对于一些列,它们的数据在应用中有要求,那么我们可以在建表时,就对这些列做一些约束,使加入数据时符合应用要求。

  1. 主键:对于每一个元组进行区别时,要有唯一的一个数据,这个数据就是主键。主键的数据不能相同。
    创建主键:在前面建表时,的约束位置 写 PRIMARY KEY 这样,这列就为主键了。
    也可以后续添加
CONSTRAINT 主键名(这个自定义) PRIMARY KEY (列名);

这里CONSTRAINT 是添加约束的一种方式,假如,在创建列名那里不想加约束,那就可以在后面用这个关键词,单独增加约束,与上面效果相同。
复合主键:可以多个列共同为主键,这种只能使用后续添加的形式
CONSTRAINT 主键名 PRIMARY KEY(列名1,列名2);

  1. 默认值约束:当插入时没有给这个列赋值,若设置了默认值约束,那么这个值不是NULL而是你设置的值
    与上面主键的用法类似,都是在统一位置使用DEFAULT 默认值

  2. 唯一约束:对于数据中列既不是主键,还想让它唯一,就可以使用唯一约束
    与CONSTRAINT类似,在后面添加 UNIQUE (列名)
    如果插入的数据,在这一列重复,会报错

  3. 外键约束:外键:在这张表不是主键,但是在另一张表是主键。使用外键约束可以实现数据的完整性,以及体现表与表的关系。
    使用 FOREIGN KEY (外键) REFERENCES 外键对应表(外键对应表的主键)
    使用了外键后,若对该表进行插入,那么这个元组的数据中外键,在对应的那张表一定要存在。

  4. 非空约束:加了非空,那么这个列一定有效。
    与默认约束位置相同,列名 数据类型(数据长度) NOT NULL

对上面的约束做一个实例:

CREATE TABLE XXX(
aaa INT(10) PRIMARY KEY DEFAULT 1 NOT NULL,
bbb INT(10) NOT NULL,
UNIQUE(bbb),
FOREIGN KEY bbb REFERENCES ZZZ(bbb)); 

ZZZ为表1,主键为bbb。

第三部分:查找

这一部分是东西最多,也比较复杂

  1. 基本查找:SELECT 列名 FROM 表名;

  2. 根据条件查找: SELECT 列名 FROM 表名 WHERE 单个判断条件;

  3. 使用多个判断条件:SELECT 列名 FROM 表名 WHERE 单个判断条件 AND/OR 单个判断条件;
    这里,AND表示,要同时满足这两个条件,OR表示,只要满足一个就可以。

  4. 查看某个数据是否在某个范围内:SELECT 列名 FROM 表名 WHERE 列名 IN/NOT IN (范围)
    IN代表,满足一个就可以。
    NOT IN 表示,范围内都不满足。

  5. 模糊查找;使用通配符 "__“和”%“与关键字LIKE
    其中”_“代表一个字符,”%"代表未知字符

SELECT 列名 FROM 表名 WHERE 列名 LIKE ****_**** / ***%*;
  1. 对查询结果进行排序:可对结果进行升序或降序的操作
SELECT 列名 FROM 表名 WHERE 判断条件 ORDER BY 列名 DESC/ASC

DESC 将结果降序
ASC 将结果升序
ORDER BY 默认升序

  1. 内置函数与计算:操作查询的结果
    常用的内置函数: COUNT(统计查询结果的个数), SUM(对结果进行求和), AVG(对结果进行求平均), MAX(对结果求最大), MIN(对结果求最小)
    注意:其中COUNT 随便用;SUM,AVG只能计算结果为数字;MAX,MIN只能操作数值,字符串,时间。
我们前面进行的操作都是单表操作,子查询与连接查询提供了多个表组合查询的操作。
  1. 子查询:一个SELECT里面套一个SELECT,借助里面进行查询的结果,得到我们想要的外层的数据。
    例:
    表一XXX:列名 aaa, bbb,ccc
    表二 ZZZ:列名 aaa,ddd,fff
SELECT ddd FROM ZZZ
WHERE aaa IN
(SELECT aaa FROM ddd);

这就是一个简单的子查询代码。
所谓的子查询,原理就是通过两个两个表的相同部分,进行筛选。
子查询可以继续扩增

  1. 连接查询:这个是将两张表做一个笛卡尔乘积,就是将两张表合成一张大表。如果子查询没有掌握好的话,用这个也可以。
SELECT 列名
FROM 表1,表2
WHERE 表1.共同列=表2.共同列,判断条件;

使用连接查询有一个点要注意:
1、列的来源要注意,在WHERE中要确定这个列是从哪来的。
2、一定要有共同列相等,不然查询的结果会失败。
另一种形式的连接

FROM1 JOIN2

第四部分:改与删

  1. 删除数据库和表:使用DROP关键字
DROP DATABASE 数据库名
DROP TABLE  表名
  1. 重命名一张表(数据库是禁止重命名的,据说会出bug)
 RENAME TABLE 原名 TO 新名字
 ALTER TABLE 原名 RENAME 新名
 ALTER TABLE 原名 RENAME TO 新名

ALTER是修改表名或修改表字段会使用的关键字

  1. 对列进行修改
//增加列
ALTER TABLE 表名 ADD COLUMN 列名 数据类型 约束;
ALTER TABLE 表名 ADD 列名 数据类型 约束;  //使用ADD关键字对表进行增加列
//删除列
ALTER TABLE 表名 DROP 列名;
//重命名列
ALTER TABLE 表名 CHANGE 原列名 新列名 数据类型 约束 //如果你想对某列新增约束或者修改列名 可以在对应位置修改为新的 不需要换的 原封不动写上就行
//修改列的数据类型
ALTER TABLE 表名 MODIFY 列名 数据类型 //这个只能用来修改列的数据类型
  1. 修改表中的某个值
 UPDATE 表名 SET1=1,2=2 WHERE 条件;

这个一定要有WHERE条件,不然就是一下改一列

DELETE FROM 表名 WHERE 条件 //这个是一下删一行

到这里我们对与MySQL的CRUD操作已经了解了。但MySQL不止CRUD,后续要对于MySQL有深入的学习。
这里推荐两本书
《sql必知必会》
《mysql必知必会》
两本书的作者是同一个人,MySQL是对sql的中MySQL部分的深入。
如果有时间可以去看看数据库概论,了解下数据库是怎么设计的,两个表是怎么进行连接的,数据库的三范式是什么样的。

你可能感兴趣的:(数据库)