• 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');
  • 相关阅读:
    codevs 1069关押罪犯
    codevs 1497取余运算
    codevs 3324 新斯诺克
    codevs 3286 火柴排队
    继续畅通工程
    还是畅通工程
    畅通工程(并查集找根节点)
    Eddy's picture(最小生成树)
    Constructing Roads(最小生成树)
    Codeforces Round #383 (Div. 2)C. Arpa's loud Owf and Mehrdad's evil plan
  • 原文地址:https://www.cnblogs.com/-Ackerman/p/14295568.html
Copyright © 2020-2023  润新知