mysql学习之旅(六)——数据库表记录的操作

数据库表记录的操作

单表数据记录的插入

在使用数据库之前,数据库表中必须有数据,我们需要使用INSERT语句想数据库中插入数据。
插入数据的方式:
1、插入完整的记录
2、插入记录的一部分
3、插入多条记录
4、插入另一个查询的结果
一、为表的所有列插入数据
语法格式:
INSERT INTO table_name(column_list) VALUES (value_list);
eg:
1、INSERT INTO bookcategory(category_id,category,parent_id) VALUES(1,‘计算机’,0);

2、INSERT INTO bookcategory VALUES(2,‘医学’,0);

1和2的都可以实现表中插入值,但是2中没有写明字段,因此2的方法重必须按照表格里字段的顺序添加数据,否则就会出错。
在这里插入图片描述
二、为表的指定列插入数据
为表的注定列插入数据,就是在INSERT语句中只向部分列中插入值,而其他没有指定值的列所插入的数据为表定义时的默认值。
eg:
INSERT INTO readerinfo(card_id,NAME,tel) VALUES(‘201122344432211234’,‘阿三’,‘12345345465’);
在这里插入图片描述三、同时插入多条记录
INSERT语句可以同时向数据表中插入多条记录,插入时指定多个值列表,每个值列表之间用逗号隔开,基本语法如下
INSERT INTO table_name(column_list) VALUES(values_list1),(values_list2),…,(values_listn);
在这里插入图片描述四、将查询结果插入到表中
insert 可以将select语句查询的结果插入到表中。
语法格式:
INSERT INTO table_name1(column_list1) SELECT(column_list2) FROM table_name2 WHERE(condition);
例如:
INSERT INTO bookcategory SELECT * FROM test WHERE id>5;
在这里插入图片描述

设置自动编号

掌握给表添加自动增长列的方法

为什么设置自动编号?
在这里插入图片描述类别编号插入工作繁琐且没有必要,因为是自增有序的。
因此。。。。
设置表的属性值自动增加
语法格式:
列名 数据类型 AUTO_INCREMENT
注:AUTO_INCREMENT约束的字段可以是任何整数类型(tinyint,samllint,int等)
例如:
CREATE TABLE bookcategory(
category_id INT PRIMARY KEY AUTO_INCREMENT,
category VARCHAR(20) NOT NULL UNIQUE,
parent_id INT NOT NULL
);
自增列的初始值默认是1,每添加一条记录,自动增长1.
在建表时可用“AUTO_INCREMENT=n”选项来指定一个自增的初始值。
在这里插入图片描述设置自动编号:
在这里插入图片描述

为已有的表添加自增列

1、
CREATE TABLE bookcategory(
category_id INT PRIMARY KEY,
category VARCHAR(20) NOT NULL UNIQUE,
parent_id INT NOT NULL
);
ALTER TABLE bookcategory MODIFY category_id INT AUTO_INCREMENT;
2、
CREATE TABLE bookcategory(
category_id INT PRIMARY KEY AUTO_INCREMENT,
category VARCHAR(20) NOT NULL UNIQUE,
parent_id INT NOT NULL
);
ALTER TABLE bookcategory AUTO_INCREMENT=x;
修改后AUTO_INCREMENT列起始值从x开始。

3、去掉自增列
ALTER TABLE bookcategory MODIFY category_id INT;

4、如果将两张有关联的表进行自增操作,例如表bookcategory与bookinfo有关联关系,应该先去掉两个表的关系
1)ALTER TABLE bookinfo DROP FOREIGN KEY fk_bcid;
再添加自增列
2)ALTER TABLE bookcategory MODIFY category_id INT AUTO_INCREMENT;
最后在设定外键
3)ALTER TABLE bookinfo ADD CONSTRAINT fk_bcid FOREIGN KEY(book_category_id) REFERENCES bookcategory(category_id);

单表数据记录的更新

mysql中使用update语句更新表中的记录
1、更新特定的行
2、更新特定的列
语法格式:
UPDATE table_name SET column_name1=value1, column_name2=value2,…,
WHERE(condition);
例如:
在这里插入图片描述
1、插入借阅信息
INSERT INTO borrowinfo(book_id,card_id,borrow_date,return_date,STATUS)
VALUES(20190801,210210199901011111,‘2017-11-29’,‘2017-12-29’,‘否’);
2、查询书的余额
SELECT price FROM bookinfo WHERE book_id=20190801;
3、更新读者的余额
UPDATE readerinfo SET balance=balance -65*0.05 WHERE card_id=‘210210199901011111’;
4、更新书的库存数量
UPDATE bookinfo SET store=store-1 WHERE book_id=‘20190801’;

单表记录的删除

1、使用delete语句删除满足条件的记录,语法格式:
DELETE FROM table_name[WHERE ];
例如:
DELETE FROM readerinfo WHERE card_id=‘210210199901011111’;删除表中身份证号为。。。的记录
DELETE FROM readerinfo;删除表中所有的记录
2、如果想要删除表中的所有记录,还可以使用TRUNCATE TABLE语句,TRUNCATE TABLE将直接删除原来的表,并重新创建一个表,语句结构:
TRUNCATE TABLE table_name
eg:TRUNCATE TABLE readerinfo;

案例:
在这里插入图片描述
1、首先找出儿科学的类别编号
SELECT category_id FROM bookcategory WHERE category=‘儿科学’;
2、删掉图书信息表中类别编号为6的图书
SELECT category_id FROM bookcategory WHERE category=‘儿科学’;
DELETE FROM bookinfo WHERE book_category_id=6;
3、删除图书类别表中儿科学这一行
DELETE FROM bookcategory WHERE category=‘儿科学’;

单表数据记录查询

基本查询语句
MYSQL从数据表中查询数据的基本语句为SELECT语句。
语法结构:
SELECT select_expr [,select_expr…]
[
FROM table_references
[WHERE where_condition]
[GROUP BY {col_name|position}[ASC|DESC],…]
[HAVING where_condition]
[ORDER BY {col_name|expr|positon}[ASC|DESC],…]
[LIMIT {[offset,] row_count| row_count OFFSET offset}]
]
1、查询所有列:
在SELECT语句中使用星号“*”通配符查询所有列
如:SELECT * FROM bookcategory;
2、在SELECT语句中指定所有列
如:SELECT category_id,category,parent_id FROM bookcategory;
3、查询指定列
查询单个列:
SELECT category FROM bookcategory;
4、查询多个列:
SELECT category_id,category FROM bookcategory;
5、查询指定记录
在SELECT语句中通过WHERE子句,对数据进行过滤,语法格式为:
SELECT 列名1,列名2,…列名n
FROM 表名
WHERE 查询条件
如:SELECT book_id,book_name,price FROM bookinfo WHERE press=‘机械工业出版社’;

5、查询结果不重复
在SELECT语句中可以使用DISTINCE关键字指示MYSQL消除重塑的记录值。
SELECT DISTINCT 列名 FROM 表名;
如:SELECT DISTINCT press FROM bookinfo;
6、查询空值
在SELECT语句中使用IS NULL子句,可以查询某列内容为空的记录。
如:SELECT* FROM readerinfo WHERE age IS NULL;
eg:
SELECT * FROM bookcategory;
SELECT category FROM bookcategory;
SELECT category_id, category FROM bookcategory;

SELECT book_id,book_name,price FROM bookinfo WHERE press=‘机械工业出版社’;
SELECT press FROM bookinfo;
SELECT * FROM readerinfo WHERE age IS NULL;

对查询结果进行分组

1、掌握分组查询的操作
分组查询是对数据按照某个或多个列进行分组。
[GROUP BY 列名] [HAVING<条件表达式>]

2、查询结果分组:
Group by 通常和聚合函数一起使用例如:MAX(),MIN(),SUM(),AGE(),COUNT().
例如:
SELECT count() FROM readerinfo WHERE sex=‘男’;
SELECT sex,count(
) FROM readerinfo GROUP BY sex;

3、使用having过滤分组
[HAVING<条件表达式>]
HAVING限定显示记录所需满足的条件,只有满足条件的分组才会被显示。
例如:
SELECT sex FROM readerinfo GROUP BY sex HAVING count(sex)>2;
eg:
SELECT COUNT() FROM readerinfo WHERE sex=‘男’;
% 输出性别男的个数
SELECT sex FROM readerinfo GROUP BY sex;
% 按照性别分组
SELECT sex,COUNT(
) FROM readerinfo GROUP BY sex;
% 按照性别分组,并统计出每个性别的个数
SELECT sex FROM readerinfo GROUP BY sex HAVING COUNT(sex)>3;
% 按照性别分组并只输出性别个数大于3的性别

对查询结果进行排序

MYsql中可以通过ORDER BY 子句对查询结果进行排序。
语法结构:
ORDER BY 列名 [ASC|DSC]
一、单列排序
按照指定的某个列进行排序,默认升序。
例:SELECT * FROM bookinfo ORDER BY price;

二、多列排序
按照多个列进行排序,默认升序。
例:SELECT * FROM bookinfo ORDER BY price,store;

三、指定排序方向
排序分为升序和降序,默认为升序。升序ASC,降序DESC
例:SELECT * FROM bookinfo ORDER BY price ASC,store DESC;
eg:
SELECT * FROM bookinfo ORDER BY price;

SELECT * FROM bookinfo ORDER BY price,store;

SELECT * FROM bookinfo ORDER BY price DESC;

通过Limit语句限制查询记录的数量

Limit关键字可以返回指定位置的记录
语法格式:
LIMIT [位置偏移量,] 行数
说明:第一条记录的位置偏移量为0,第二条为1,…以此类推
例:显示图书信息表的前三行
SELECT * FROM bookinfo LIMIT 3;
显示从第三条记录开始后的两条图书记录信息。
SELECT * FROM bookinfo LIMIT 2, 2;
说明:在mysql5.7中也可以使用LIMIT 2 OFFSET 2,实现例2相同的效果。
eg:
SELECT * FROM bookinfo LIMIT 3;
SELECT * FROM bookinfo LIMIT 2,2 ;
SELECT * FROM bookinfo LIMIT 2 OFFSET 2 ;
案例:
将图书信息按照库存进行分组,统计每组库存下的个数,然后按库存进行降序排序,并查看结果中的前四条记录。
1、按库存分组
在这里插入图片描述2、按库存的降序排列
在这里插入图片描述3、只看前四行
SELECT store ,COUNT(*) FROM bookinfo GROUP BY store ORDER BY store DESC;

发布了19 篇原创文章 · 获赞 2 · 访问量 1238

猜你喜欢

转载自blog.csdn.net/weixin_38377637/article/details/100123269