数据库就是用来存储和管理数据的仓库。
SQL是结构化查询语言(Structured Query Language),客户端使用SQL来操作服务器。
SHOW DATABASES;
// USE 数据库名;
USE my_db;
CREATE DATABASE [IF NOT EXISTS] my_db [CHARSET=utf8];
DROP DATABASE [IF EXISTS] my_db;
ALTER DATABASE my_db CHARACTER SET utf8;
CREATE TABLE [IF NOT EXISTS] 表名(
列名 列类型,
列名 列类型,
......
列名 列类型
);
CREATE TABLE IF NOT EXISTS student(
number CHAR(10),
name VARCHAR(50),
age INT,
gender VARCHAR(10)
);
SHOW TABLES;
// SHOW CREATE TABLE 表名;
SHOW CREATE TABLE student;
// DESC 表名;
DESC student;
// DROP TABLE 表名;
DROP TABLE student;
ALTER TABLE 表名 ADD(
列名 列类型,
列名 列类型,
......
列名 列类型
);
ALTER TABLE student ADD(
sid INT,
height INT
);
// ALTER TABLE 表名 MODIFY 列名 列类型;
ALTER TABLE student MODIFY sid CHAR(20);
// ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;
ALTER TABLE student CHANGE sid stu_id CHAR(20);
// ALTER TABLE 表名 DROP 列名;
ALTER TABLE student DROP sid;
// ALTER TABLE 原表名 RENAME TO 新表名;
ALTER TABLE student RENAME tb_stu;
所有字符串类型必须使用单引号,不能使用双引号!
日期类型也要使用单引号
INSERT INTO student(number, name, age) VALUES('stu_01', 'ZhangSan', 10);
INSERT INTO student VALUES('stu_01', 'ZhangSan', 10, 'female');
UPDATE 表名 SET 列名1=列值1, 列名2=列值2, … [WHERE 条件]
INSERT INTO student VALUES('stu_01', 'ZhangSan', 10, 'female');
UPDATE student SET age=100 WHERE name='ZhangSan';
INSERT INTO student VALUES('stu_01', 'ZhangSan', 10, 'female');
DELETE FROM student WHERE name='ZhangSan';
INSERT INTO student VALUES('stu_01', 'ZhangSan', 10, 'female');
TRUNCATE TABLE student;
一个项目创建一个用户,一个项目对应一个数据库。
这个用户只对这个数据库有权限,其他数据库无法操作。
// CREATE USER 用户名@IP地址 IDENTIFIED BY '密码';用户只能在指定的IP地址登录
CREATE USER test@localhost IDENTIFIED BY ’1234‘;
// CREATE USER 用户名@’%‘ IDENTIFIED BY '密码';用户可以在任意IP地址登录
CREATE USER test@’%‘ IDENTIFIED BY ’1234‘;
// GRANT 权限1, ... , 权限n ON 数据库.* TO 用户名@IP地址;给用户分配制度数据库上的指定权限
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT ON mydb.* TO test@localhost;
// GRANT ALL ON 数据库.* TO 用户名@IP地址;给用户分配指定数据库上的所有权限
GRANT ALL ON mydb.* TO test@localhost;
// REVOKE 权限1, ... , 权限n, ON 数据库.* FROM 用户名@IP地址;撤销指定用户在指定数据库的指定权限
REVOKE CREATE, ALTER, DROP, INSERT ON mydb.* FROM test@localhost;
// SHOW GRANTS FOR 用户名@IP地址;查看指定用户的权限
SHOW GRANTS FOR test@localhost;
// DROP USER 用户名@IP地址;
DROP USER test@localhost;
// SELECT * FROM 表名;*表示查询所有列
SELECT * FROM student;
// SELECT 列名1[, 列名2, ... , 列名n] FROM 表名;
SELECT name, age FROM student;
// SELECT DISTINCT * FROM 表名;
// SELECT DISTINCT 列名1[, 列名2, ... , 列名n] FROM 表名;
SELECT DISTINCT age FROM student;
SELECT name, age+10 FROM student;
SELECT name, age*10 FROM student;
SELECT name, age+height FROM student;
// 非数值类型会当成0处理
SELECT name+10, age FROM student;
// 连接字符串
SELECT CONCAT(name, number) FROM student;
SELECT CONCAT(‘我叫’, name, ',我的学号是', number) FROM student;
// IFNULL可以处理NULL值
SELECT name, age+IFNULL(height,0) FROM student;
SELECT CONCAT(‘我叫’, name, ',我的学号是', number) as 信息 FROM student;
// as可以省略
SELECT CONCAT(‘我叫’, name, ',我的学号是', number) 信息 FROM student;
// 查询age大于10的学生
SELECT * FROM student WHERE age>10;
// 查询name等于ZhangSan的学生
SELECT * FROM student WHERE name='ZhangeSan';
// 查询age在10到20之间的学生
SELECT * FROM student WHERE age BETWEEN 10 AND 20;
// 查询name是ZhangSan或者LiSi的学生
SELECT * FROM student WHERE name IN ('ZhangeSan', 'LiSi');
模糊查询需要用到通配符。_ 匹配单个字符,% 匹配多个字符(包括0个字符)。
// 查询name为张x的学生
SELECT * FROM student WHERE name LIKE '张_';
// 查询name为张xx的学生
SELECT * FROM student WHERE name LIKE '张__';
// 查询name为张开头的学生
SELECT * FROM student WHERE name LIKE '张%';
// 查询name中有小字的学生
SELECT * FROM student WHERE name LIKE '%小%';
// 查询name为张结尾的学生
SELECT * FROM student WHERE name LIKE '%张';
升序关键字(默认为升序,可省略):ASC。
降序关键字:DESC
// 查询所有学生,按age升序排列
SELECT * FROM student ORDER BY age;
// 查询所有学生,按age升序排列
SELECT * FROM student ORDER BY age ASC;
// 查询所有学生,按age降序排列
SELECT * FROM student ORDER BY age DESC;
// 查询所有学生,按age升序排列,age相同时按height降序排列
SELECT * FROM student ORDER BY age ASC, height DESC;
// 查询所有学生,按age升序排列,age相同时按height降序排列,age与height都相同则按id升序排列
SELECT * FROM student ORDER BY age ASC, height DESC, id ASC;
// 查询学生个数
SELECT COUNT(*) FROM student;
// 查询学生个数,以name查询
SELECT COUNT(name) FROM student;
// 查询学生个数,以第3列查询
SELECT COUNT(3) FROM student;
// 查询学生个数,以第300列查询
SELECT COUNT(300) FROM student;
// 查询学生中最大的年龄
SELECT MAX(age) FROM student;
// 查询学生中最小的年龄
SELECT MIN(age) FROM student;
// 查询学生age的和
SELECT SUM(age) FROM student;
// 查询学生age的平均值
SELECT AVG(age) FROM student;
// 查询学生人数+age总和+age最大值+age最小值+age平均值
SELECT COUNT(*) 人数, SUM(age) 总和, MAX(age) 最大, MIN(age) 最小, AVG(age) 平均 FROM student;
可以查询的内容:当前分组列与聚合函数
SELECT FROM WHERE GROUP BY HAVING
// 查询所有学生按gender的分组,并统计各组人数
SELECT gender, COUNT(*) 人数 FROM student GROUP BY gender;
// 查询所有学生按gender的分组,并统计当前组最大的age
SELECT gender, MAX(age) 最大 FROM student GROUP BY gender;
// 查询age大于10的学生按gender的分组,并统计各组人数
SELECT gender, COUNT(*) 人数 FROM student WHERE age > 10 GROUP BY gender;
// 查询age大于10的学生按gender的分组且分组人数大于5的组,并统计各组人数
SELECT gender, COUNT(*) 人数 FROM student WHERE age > 10 GROUP BY gender HAVING COUNT(*) > 5;
LIMIT用来限定查询结果的起始行,以及总行数。
// 查询的起始行为第20行,一共查询10条记录,19表示从第20行开始,10表示一共10行。
SELECT * FROM student LIMIT 19, 10;
CREATE DATABASE IF NOT EXISTS
SHOW DATABASES USE
DROP DATABASE
ALTER DATABASE
CREATE TABLE
SHOW TABLES SHOW CREATE TABLE DESC
DROP TABLE
ALTER TABLE ADD MODIFY CHANGE DROP RENAME
INSERT INTO VALUES
UPDATE xx SET
DELETE FROM TRUNCATE TABLE
CREATE USER IDENTIFIED BY
GRANT xx ON xx TO GRANT ALL ON xx TO
REVOKE xx ON xx FROM
SHOW GRANTS FOR
DROP USER
SELECT FROM
DISTINCT
CONCAT IFNULL
WHERE LIKE _ %
ORDER BY ASC DESC HAVING
COUNT MAX MIN SUM AVG
GROUP BY HAVING
LIMIT