MySQL是一种关系型数据库管理系统,主要用于对数据的存储和方便人们对数据的读取。在MySQL中,数据存储在表中,以一条一条记录的形式存储,因此大家可以比较容易的理解MySQL存储的是结构化的数据。而我们访问MySQL数据库则需要用到专门的语言,我们称之为结构化查询语言---SQL。本文正是与大家一起学习MySQL数据库和SQL语言的基本知识。
一、对数据库的操作
对数据存储在数据库有了基本的了解后,就让我们一起来学习如何操作MySQL和组织SQL语言吧。首先我们需要学习和数据库层面相关的基础知识:
-- 创建数据库mydb
CREATE DATABASE mydb;
-- 删除数据库mydb
DROP DATABASE mydb;
-- 创建数据库mydb2,并设置编码字符集为utf8(即支持中文)
CREATE DATABASE mydb2 CHARACTER SET =utf8;
-- 显示详细的创建数据库mydb2的SQL语句
SHOW CREATE DATABASE mydb2;
-- 显示所有数据库
SHOW DATABASES;
二、对表的操作
就像一本书,分为章、节一样,数据库也有库和表的层级关系,数据实际存储在各张表中,表又是构成数据库的重要部分。接下来我们一起探讨对表的基本操作。当然我们对表的操作需要基于数据库,即在某个库下操作表才有实际意义。
-- 创建表user,设置id为主键并自增
CREATE TABLE user(
id INT PRIMARY KEY auto_increment,
name varchar(18),
description varchar(100)
);
-- 创建表user2,设置id为主键并自增
CREATE TABLE user2(
id INT PRIMARY KEY auto_increment,
name varchar(18),
school varchar(100)
);
-- 删除表user2
DROP TABLE user2;
-- 编辑表user,添加列address
ALTER TABLE user ADD address VARCHAR(100);
-- 编辑表user,分别添加语文和数学两列
ALTER TABLE user ADD chinese INT(11);ALTER TABLE user ADD math INT(11);
-- 编辑表user,添加列school列
ALTER TABLE user ADD school VARCHAR(100);
-- 编辑表user,修改列address的字段类型长度
ALTER TABLE user MODIFY address VARCHAR(50);
-- 编辑表user,删除列school
ALTER TABLE user DROP school;
-- 编辑表user,设置编码字符集为utf8
ALTER TABLE user CHARACTER SET utf8;
-- 编辑表user,并重命名为t_user
RENAME TABLE user TO t_user;
三、对数据记录的操作
①添加
-- 添加一条记录
INSERT INTO t_user VALUES(1,'张三','北京',88,87);
-- 同时添加多条记录
INSERT INTO t_user VALUES(2,'李四','上海',66,99),(3,'王五','广州',78,98),(4,'赵六','深圳',89,87);
-- 按表字段添加记录
INSERT INTO t_user(name,address,chinese,math) VALUES('田七','杭州',99,88);
②编辑
-- 编辑user表,设置列address为"中国"
UPDATE t_user SET address = '中国';
-- 按照name或id编辑address
UPDATE t_user SET address = '北京' WHERE name = '张三';
UPDATE t_user SET address = '上海' WHERE id = 2;
③查询
-- 查询user表全部数据记录
SELECT * from t_user;
-- 查询user表的address列并去重
SELECT DISTINCT address FROM t_user;
-- 根据id查询user信息
SELECT * FROM t_user WHERE id = 1;
-- 基于id的条件查询
SELECT * FROM t_user WHERE id > 1;
SELECT * FROM t_user WHERE id > 1 AND address = '中国';
SELECT * FROM t_user WHERE id > 1 or address = '北京';
SELECT * FROM t_user WHERE id in (1,2);
SELECT * FROM t_user WHERE id NOT in (1,2);
-- 模糊查询
SELECT * FROM t_user WHERE address LIKE '中%';
SELECT * FROM t_user WHERE address LIKE '中_';
-- 数据条数统计(当数据量较大时,有兴趣的朋友可以比较两种方式的执行效率)
SELECT COUNT(*) FROM t_user;
SELECT COUNT(1) FROM t_user;
-- 根据id查询并逆序排列
SELECT * FROM t_user ORDER BY id DESC;
-- 分别统计列chinese,math的总和以及平均值
SELECT SUM(chinese),SUM(math) FROM t_user;
SELECT AVG(chinese),AVG(math) FROM t_user;
SELECT SUM(chinese)/COUNT(*),SUM(math)/COUNT(*) FROM t_user;
-- 统计chinese和math两列的和的最大值和最小值(即求总分最高分和最低分)
SELECT MAX(chinese+math),MIN(chinese+math) FROM t_user;
-- 按照总分为user排序(类似班级成绩表的排名)
SELECT *, SUM(chinese+math) AS total FROM t_user GROUP BY id ORDER BY total DESC;
④删除
-- 删除指定记录
DELETE FROM t_user WHERE id = 1;
-- 删除user表的全部记录(这里没有删除表;注意和DROP区分开来)
DELETE FROM t_user;
以上我们对数据库、表、数据记录进行了基本的操作,这些知识只是MySQL和SQL的入门级别。学有余力的朋友可以继续深入研究诸如功能各异的关键字和函数,数据库优化、备份、高性能;也可以深入学习研究索引、存储过程、触发器等知识,以及数据库的优化和SQL的优化等等。