MySQL学习笔记
0. 配置环境
首先先在 docker 配置一个数据库的环境
docker pull mysql:5.7
1. 建立容器
docker run --name mysql001 -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7
- 1
- -name:容器名,此处命名为mysql
- -e:配置信息,此处配置mysql的root用户的登录密码
- -p:端口映射,此处映射主机 3306 端口到容器的 3306 端口
2. 查看容器
docker ps
3. 连接MySQL
docker exec -it mysql001 /bin/bash
root@6642a3aea778:/# mysql -uroot -p123456
使用终端操作数据库
show databases;
2.如何选择数据库?
use databasesName;
3.如何查看数据库中有哪些表?
--首先先进入数据库 show tables;
4.如何查询表中的数据?
select * from tableName;
5.如何推出数据库?
exit;
6.如何在服务器中创建一个数据库?
create database databaseName;
7.如何查看数据表的架构?
describe tableName;
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
对于数据表的基本操作:
1、如何创建一个数据表?
create TABLE pet( name VARCHAR(20), owner VARCHAR(20), specise VARCHAR(20), sex CHAR(1), birth DATE, death DATE );
注意:
char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
2、如何删除一个数据表?
drop table tableName;
3、如何在数据表中插入数据?
-- 有两种的插入数据的方法 INSERT INTO pet(name, owner, specise, sex, birth, death) VALUES ('xx','cc','dd','f','1823-02-21','1998-12-12'); INSERT INTO pet VALUES ('aa','bb','cc','f','1830-02-13','1932-12-30');
注意:
NULL:代表的是空,表示该字段还没有数据.千万不要主动填写'NULL',这代表你的字段有一个值叫做'null'.
4、如何删除数据表中的内容?
-- DELETE FROM tableName where 条件; DELETE FROM pet where name='xx';
5、如何修改数据表中的内容?
-- UPDATE tableName SET 字段1=值1,字段2=值2 ... WHERE 条件; UPDATE pet set death='1998-12-3' where name='kk4';
1、主键约束
CREATE TABLE user( id INT PRIMARY KEY , name VARCHAR(20) );
· 增加主键:
ALTER TABLE user3 ADD PRIMARY KEY (id);
· 删除主键:
ALTER TABLE user3 DROP PRIMARY KEY;
2、复合主键
一起来确定一张表中的一条记录,复合主键任何一个都不可以为空。两个键在一起不冲突
CREATE TABLE user2( id INT, name VARCHAR(20), password VARCHAR(20), PRIMARY key(id,name) );
3、自增约束
CREATE TABLE user3( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) );
使用的时候可以不定义 id 值,它会自动的生成。
CREATE TABLE user4( id INT, name VARCHAR(20) UNIQUE );
· 也可以想复合主键一样操作,注意也是需要复合的唯一
CREATE TABLE user5( id INT, name VARCHAR(20) NOT NULL ); INSERT INTO user5(id,name) VALUES (1,'wang'); INSERT INTO user5(name) VALUES ('lizi');
当我们插入字段值当时候,如果没有传值,就使用默认值
CREATE TABLE user6( id INT, name VARCHAR(20), age INT DEFAULT 10 ); INSERT INTO user6(id, name) VALUES (1,'zhangsan'); INSERT INTO user6(id, name) VALUES (2,'lisi'); INSERT INTO user6(id, name,age) VALUES (3,'asd',20);
7、外键约束
涉及到两个表 主表/副表
-- 班级表 CREATE TABLE classes( id INT PRIMARY KEY , name VARCHAR(20) ); -- 学生表 CREATE TABLE students( id INT PRIMARY KEY , name VARCHAR(20), class_id INT, FOREIGN KEY (class_id) REFERENCES classes(id) ); INSERT INTO classes(id, name) VALUES (1,'1'); INSERT INTO classes(id, name) VALUES (2,'2'); INSERT INTO classes(id, name) VALUES (3,'3'); INSERT INTO classes(id, name) VALUES (4,'4'); INSERT INTO students(id, name, class_id) VALUES (1001,'zhangsan',1); INSERT INTO students(id, name, class_id) VALUES (1002,'zhangsan',2); INSERT INTO students(id, name, class_id) VALUES (1003,'zhangsan',3); INSERT INTO students(id, name, class_id) VALUES (1004,'zhangsan',4);
注意:
1. 主表中没有的数据在副表中是不可以使用的.
2. 若主表中的数据正在被引用,那么主表中的数据是不可以被删除的.
3. 若想要删除,需要先删除副表中的数据再删除主表中的数据
selct * from tableName;
2、 查询某个表中特定的记录
SELECT student_name,student_sex,student_class FROM Student;
3、 查询某个表中特定的记录(去除重复的)
SELECT DISTINCT teacher_department FROM Teacher;
4、 查询区间
· 利用 between and
SELECT * FROM Score where course_degree BETWEEN 60 AND 80;
· 利用运算符比较
SELECT * FROM Score where course_degree > 60 AND course_degree < 80;
5、 查询表中成绩为 85、86或88的记录
SELECT * FROM Score where course_degree in(85,86,88);
6、 查询表中“95031”班或者性别为“女”的记录
SELECT * FROM Student where student_class='95031' or student_sex='女';
7、 升序、降序如何表达
· 以 class 降序的方式查询表中的记录 (默认是升序)
SELECT * FROM Student ORDER BY student_class DESC; -- 降序 SELECT * FROM Student ORDER BY student_class ASC; -- 升序
· 以 course_number 升序、course_degree 降序查询所有的记录
SELECT * FROM Score ORDER BY course_number ASC,course_degree DESC;
8、 查询“95031”班的学生人数
SELECT COUNT(*) FROM Student where student_class='95031';
9、 查询Score表中的最高分的学生学号和课程号
· 利用子语句进行查询
SELECT score_number,course_number FROM Score where course_degree=(SELECT MAX(course_degree) FROM Score);
· 利用排序的方式进行查询 (如果出现多个最高分会有问题)
SELECT score_number,course_number FROM Score ORDER BY course_degree DESC LIMIT 0,1;
LIMIT 0,1 从 0 开始查 1 条
10、 查询某门课的平均成绩
SELECT AVG(course_degree) FROM Score where course_number='3-105';
· 查询所有课的平均成绩
SELECT course_number,AVG(course_degree) FROM Score GROUP BY course_number;
11、查询Score表中至少有两名学生选修并且以3开头的课程的平均分数
SELECT course_number,AVG(course_degree),COUNT(*) FROM Score GROUP BY course_number HAVING COUNT(course_number >= 2) AND course_number LIKE '3%';
12、 多表查询
利用主表和副表建立联系
SELECT student_name,course_number,course_degree FROM Student,Score where Student.student_number=Score.score_number;
INSERT INTO user2(name) VALUES ('zhangsan');