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

 

 

使用终端操作数据库

1.如何查看有什么数据库?    
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 值,它会自动的生成。

 

4、唯一约束
CREATE TABLE user4(
    id INT,
    name VARCHAR(20) UNIQUE
);

· 也可以想复合主键一样操作,注意也是需要复合的唯一

 
5、非空约束
修饰的字段不能为空
CREATE TABLE user5(
    id INT,
    name VARCHAR(20) NOT NULL
);

INSERT INTO user5(id,name) VALUES (1,'wang');
INSERT INTO user5(name) VALUES ('lizi');

 

6、默认约束

当我们插入字段值当时候,如果没有传值,就使用默认值

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. 若想要删除,需要先删除副表中的数据再删除主表中的数据

 
 
 
数据表中的查询
 
1、 查询某个表中所有的记录
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');
posted @ 2021-01-21 19:13  _Ackerman  阅读(181)  评论(0编辑  收藏  举报