• MySQL数据库基础入门


    本文介绍MySQL数据库基础操作方法

    MySQL 连接

    命令行连接mysql服务器:

    mysql -h 主机名 -u 用户名 -p
    
    • -h:指定要登录的MySQL主机名,登录本机可以省略
    • -u:用户名
    • -p:登录密码
    C:\Users\10287>mysql -u root -p
    Enter password: *********
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 8
    Server version: 8.0.16 MySQL Community Server - GPL
    
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>
    

    也可以通过数据库管理工具连接MySQL,可参考MySQL数据库安装配置详细教程

    可使用exit 命令退出

    mysql> exit
    Bye
    
    C:\Users\10287>
    

    创建数据库

    mysql> create database testdb;
    Query OK, 1 row affected (0.13 sec)
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | sys                |
    | testdb             |
    +--------------------+
    9 rows in set (0.37 sec)
    
    mysql>
    

    删除数据库

    mysql> drop database testdb;
    Query OK, 0 rows affected (0.35 sec)
    mysql> create database testdb;
    Query OK, 1 row affected (0.13 sec)
    

    数据表操作

    创建数据表

    首先选择一个数据库

    mysql> use testdb;
    Database changed
    

    进入testdb数据库后,创建一个名称为student的表

    create table student(
        id int not null auto_increment primary key COMMENT 'ID',
        name varchar(10) not null COMMENT '姓名',
        sex char(10) not null COMMENT '性别',
        age tinyint(100) not null COMMENT '年龄',
        dept char(4) not null COMMENT '专业') ENGINE=InnoDB 
        DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
        comment = '学生';    
    

    删除数据表

    drop table 表名
    

    查看表结构

    mysql> desc student;
    +-------+--------------+------+-----+---------+----------------+
    | Field | Type         | Null | Key | Default | Extra          |
    +-------+--------------+------+-----+---------+----------------+
    | id    | int(11)      | NO   | PRI | NULL    | auto_increment |
    | name  | varchar(10)  | NO   |     | NULL    |                |
    | sex   | char(10)     | NO   |     | NULL    |                |
    | age   | tinyint(100) | NO   |     | NULL    |                |
    | dept  | char(4)      | NO   |     | NULL    |                |
    +-------+--------------+------+-----+---------+----------------+
    5 rows in set (0.03 sec)
    

    使用以下命令是一样的效果:

    describe student;
    show columns from student;
    

    查看详细表结构

    show full fields from student;
    

    表结构修改

    常用语法格式:
    ALTER TABLE <表名> [修改选项]
    修改选项的语法格式如下:

    ADD COLUMN <列名> <类型> [after 插入位置]/*添加字段,或者在某列后插入列*/
    CHANGE COLUMN <旧列名> <新列名> <新列类型> /*改变字段名*/
    MODIFY COLUMN <列名> <类型> /*修改字段类型*/
    DROP COLUMN <列名> /*删除字段*/
    RENAME TO <新表名> /*修改表名*/
    

    修改字段长度

    alter table 表名 modify column 字段名 char(10);
    
    alter table 表名 auto_increment = 201215121;
    

    增删改查

    插入数据

    语法:

    insert into 表名(字段1,字段2) values(字段值1,字段值2)
    

    插入数据

    mysql> insert into Student (name, sex, age, dept) values ('张三', '男', 20, '通信');
    Query OK, 1 row affected (0.45 sec)
    mysql> select * from student;
    +----+------+-----+-----+------+
    | id | name | sex | age | dept |
    +----+------+-----+-----+------+
    |  1 | 张三 | 男  |  20 | 通信 |
    +----+------+-----+-----+------+
    1 row in set (0.03 sec)
    
    mysql>
    

    删除数据

    语法:

    delete from 表名 where 字段名1= 字段值1
    delete from 表名 /*删除表里所有数据*/
    

    删除

    mysql> delete from student;
    Query OK, 1 row affected (0.09 sec)
    mysql> select * from student;
    Empty set (0.00 sec)
    
    mysql> insert into Student (name, sex, age, dept) values ('张三', '男', 20, '通信');
    Query OK, 1 row affected (0.07 sec)
    
    mysql> insert into Student (name, sex, age, dept) values ('李四', '男', 22, '通信');
    Query OK, 1 row affected (0.07 sec)
    
    mysql> delete from student where name='张三';
    Query OK, 1 row affected (0.17 sec)
    mysql> select * from student;
    +----+------+-----+-----+------+
    | id | name | sex | age | dept |
    +----+------+-----+-----+------+
    |  3 | 李四 | 男  |  22 | 通信 |
    +----+------+-----+-----+------+
    1 row in set (0.00 sec)
    
    mysql>
    

    更新数据

    语法:

    update 表名 set 字段名1=字段值1 where 字段名2=字段值2
    update 表名 set 字段名1=字段值1 /*修改表里所有数据*/
    

    更新数据

    mysql> update student set age=20 where name='李四';
    Query OK, 1 row affected (0.07 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> select * from student;
    +----+------+-----+-----+------+
    | id | name | sex | age | dept |
    +----+------+-----+-----+------+
    |  3 | 李四 | 男  |  20 | 通信 |
    +----+------+-----+-----+------+
    1 row in set (0.00 sec)
    
    mysql> update student set age=age+1;
    Query OK, 4 rows affected (0.79 sec)
    Rows matched: 4  Changed: 4  Warnings: 0
    
    mysql> select * from student;
    +----+------+-----+-----+--------+
    | id | name | sex | age | dept   |
    +----+------+-----+-----+--------+
    |  1 | 李四 | 男  |  21 | 通信   |
    |  2 | 张三 | 男  |  21 | 通信   |
    |  3 | 王二 | 男  |  23 | 计算机 |
    |  4 | 小花 | 女  |  23 | 计算机 |
    +----+------+-----+-----+--------+
    4 rows in set (0.04 sec)
    
    mysql>
    

    查询数据

    再创建一个名称为score的表,记录成绩

    create table score(
        sid int not null auto_increment primary key COMMENT 'score ID',
        student_id int(10) not null COMMENT '学号',
        name varchar(10) not null COMMENT '姓名',
        course char(10) not null COMMENT '课程',
        grade tinyint(100) not null COMMENT '分数') ENGINE=InnoDB 
        DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
        comment = '成绩';
    

    student和score两个表显示如下:

    mysql> select * from student;
    +----+------+-----+-----+--------+
    | id | name | sex | age | dept   |
    +----+------+-----+-----+--------+
    |  1 | 李四 | 男  |  20 | 通信   |
    |  2 | 张三 | 男  |  20 | 通信   |
    |  3 | 王二 | 男  |  22 | 计算机 |
    |  4 | 小花 | 女  |  22 | 计算机 |
    +----+------+-----+-----+--------+
    4 rows in set (0.00 sec)
    
    mysql> select * from score;
    +-----+------------+------+------------+-------+
    | sid | student_id | name | course     | grade |
    +-----+------------+------+------------+-------+
    |   1 |          1 | 李四 | 高数       |    90 |
    |   2 |          1 | 李四 | 英语       |    92 |
    |   3 |          1 | 李四 | 经济学基础 |    88 |
    |   4 |          2 | 张三 | 高数       |    80 |
    |   5 |          2 | 张三 | 英语       |    85 |
    |   6 |          2 | 张三 | 经济学基础 |    93 |
    |   7 |          3 | 王二 | 高数       |    82 |
    |   8 |          3 | 王二 | 英语       |    98 |
    |   9 |          3 | 王二 | 经济学基础 |    80 |
    +-----+------------+------+------------+-------+
    9 rows in set (0.00 sec)
    
    mysql>
    

    查询语法:

    select * from 表名
    
    mysql> select * from student;
    +----+------+-----+-----+--------+
    | id | name | sex | age | dept   |
    +----+------+-----+-----+--------+
    |  1 | 李四 | 男  |  20 | 通信   |
    |  2 | 张三 | 男  |  20 | 通信   |
    |  3 | 王二 | 男  |  22 | 计算机 |
    |  4 | 小花 | 女  |  22 | 计算机 |
    +----+------+-----+-----+--------+
    4 rows in set (0.00 sec)
    
    mysql>
    

    where 关键词查询:select 列名称 from 表名称 where 条件;
    where关键词支持如下运算:

    • =、>、<、>=、<>、!=
    • is [not] null、in、like
    • 支持 or 和 and 组合查询
    mysql> select * from student where age > 20;
    +----+------+-----+-----+--------+
    | id | name | sex | age | dept   |
    +----+------+-----+-----+--------+
    |  3 | 王二 | 男  |  22 | 计算机 |
    |  4 | 小花 | 女  |  22 | 计算机 |
    +----+------+-----+-----+--------+
    2 rows in set (0.71 sec)
    
    mysql> select * from student where age > 20 and sex = '女';
    +----+------+-----+-----+--------+
    | id | name | sex | age | dept   |
    +----+------+-----+-----+--------+
    |  4 | 小花 | 女  |  22 | 计算机 |
    +----+------+-----+-----+--------+
    1 row in set (0.03 sec)
    
    mysql> select * from student where dept like '计算%';
    +----+------+-----+-----+--------+
    | id | name | sex | age | dept   |
    +----+------+-----+-----+--------+
    |  3 | 王二 | 男  |  22 | 计算机 |
    |  4 | 小花 | 女  |  22 | 计算机 |
    +----+------+-----+-----+--------+
    2 rows in set (0.00 sec)
    
    mysql> select * from student where dept like '计算_';
    +----+------+-----+-----+--------+
    | id | name | sex | age | dept   |
    +----+------+-----+-----+--------+
    |  3 | 王二 | 男  |  22 | 计算机 |
    |  4 | 小花 | 女  |  22 | 计算机 |
    +----+------+-----+-----+--------+
    2 rows in set (0.00 sec)
    
    mysql>
    

    嵌套查询:查询李四同学的高数成绩(注意可能存在同名的,所以可以添加学号来组合查询)

    mysql> select student_id, name, course, grade from score where student_id in (select id from student where name='李四') and course='高数';
    +------------+------+--------+-------+
    | student_id | name | course | grade |
    +------------+------+--------+-------+
    |          1 | 李四 | 高数   |    90 |
    +------------+------+--------+-------+
    1 row in set (0.00 sec)
    
    

    连接查询

    join多表查询

    insert into Student (name, sex, age, dept) values ('小花', '女', 22, '计算机');

    右连接 right join

    right join 是 right outer join的简写,全称右外连接,是外连接中的一种。
    语句:

    SELECT * FROM student a right outer join b on a.a_id = b.b_id;
    

    连接student和score:

    mysql> SELECT * FROM student a right outer join score b on a.name = b.name;
    +------+------+------+------+--------+-----+------------+------+------------+-------+
    | id   | name | sex  | age  | dept   | sid | student_id | name | course     | grade |
    +------+------+------+------+--------+-----+------------+------+------------+-------+
    |    1 | 李四 | 男   |   21 | 通信   |   1 |          1 | 李四 | 高数       |    90 |
    |    1 | 李四 | 男   |   21 | 通信   |   2 |          1 | 李四 | 英语       |    92 |
    |    1 | 李四 | 男   |   21 | 通信   |   3 |          1 | 李四 | 经济学基础 |    88 |
    |    2 | 张三 | 男   |   21 | 通信   |   4 |          2 | 张三 | 高数       |    80 |
    |    2 | 张三 | 男   |   21 | 通信   |   5 |          2 | 张三 | 英语       |    85 |
    |    2 | 张三 | 男   |   21 | 通信   |   6 |          2 | 张三 | 经济学基础 |    93 |
    |    3 | 王二 | 男   |   23 | 计算机 |   7 |          3 | 王二 | 高数       |    82 |
    |    3 | 王二 | 男   |   23 | 计算机 |   8 |          3 | 王二 | 英语       |    98 |
    |    3 | 王二 | 男   |   23 | 计算机 |   9 |          3 | 王二 | 经济学基础 |    80 |
    +------+------+------+------+--------+-----+------------+------+------------+-------+
    9 rows in set (0.09 sec)
    
    

    注意:与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL

    示例sql:

    mysql> SELECT student.id, student.name, score.course, score.grade FROM student RIGHT JOIN score ON student.id = score.sid;
    +------+------+------------+-------+
    | id   | name | course     | grade |
    +------+------+------------+-------+
    |    1 | 李四 | 高数       |    90 |
    |    2 | 张三 | 英语       |    92 |
    |    3 | 王二 | 经济学基础 |    88 |
    |    4 | 小花 | 高数       |    80 |
    | NULL | NULL | 英语       |    85 |
    | NULL | NULL | 经济学基础 |    93 |
    | NULL | NULL | 高数       |    82 |
    | NULL | NULL | 英语       |    98 |
    | NULL | NULL | 经济学基础 |    80 |
    +------+------+------------+-------+
    9 rows in set (0.00 sec)
    
    mysql>
    

    内连接查询 inner join

    语句:

    select * from a_table a inner join b_table b on a.a_id=b.b_id;
    

    说明:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集部分;

    内连接查询,示例sql:

    mysql> SELECT student.id, student.name, score.course, score.grade FROM student INNER JOIN score ON student.id = score.sid;
    +----+------+------------+-------+
    | id | name | course     | grade |
    +----+------+------------+-------+
    |  1 | 李四 | 高数       |    90 |
    |  2 | 张三 | 英语       |    92 |
    |  3 | 王二 | 经济学基础 |    88 |
    |  4 | 小花 | 高数       |    80 |
    +----+------+------------+-------+
    4 rows in set (0.00 sec)
    
    mysql>
    

    左连接查询 left join

    left join是 left outer join的简写,它的全称是左外连接,是外连接中的一种。
    语句:

    SELECT * FROM a_table a left join b_table b ON a.a_id = b.b_id
    

    说明:左(外)连接,左表(a_table)的记录将会全部表示出来,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

    示例sql:

    mysql> SELECT student.id, student.name, score.course, score.grade FROM student LEFT JOIN score ON student.id = score.sid;
    +----+------+------------+-------+
    | id | name | course     | grade |
    +----+------+------------+-------+
    |  1 | 李四 | 高数       |    90 |
    |  2 | 张三 | 英语       |    92 |
    |  3 | 王二 | 经济学基础 |    88 |
    |  4 | 小花 | 高数       |    80 |
    +----+------+------------+-------+
    4 rows in set (0.00 sec)
    
    mysql> SELECT student.id, student.name, score.course, score.grade FROM student LEFT JOIN score ON student.name = score.name;
    +----+------+------------+-------+
    | id | name | course     | grade |
    +----+------+------------+-------+
    |  1 | 李四 | 高数       |    90 |
    |  1 | 李四 | 英语       |    92 |
    |  1 | 李四 | 经济学基础 |    88 |
    |  2 | 张三 | 高数       |    80 |
    |  2 | 张三 | 英语       |    85 |
    |  2 | 张三 | 经济学基础 |    93 |
    |  3 | 王二 | 高数       |    82 |
    |  3 | 王二 | 英语       |    98 |
    |  3 | 王二 | 经济学基础 |    80 |
    |  4 | 小花 | NULL       |  NULL |
    +----+------+------------+-------+
    10 rows in set (0.00 sec)
    
    mysql>
    
    --THE END--

    文章标题:MySQL数据库基础入门
    本文作者:hiyo
    本文链接:https://www.cnblogs.com/hiyong/p/14552753.html
    欢迎关注公众号:「测试开发小记」及时接收最新技术文章!

  • 相关阅读:
    【leetcode】1562. Find Latest Group of Size M
    【leetcode】1561. Maximum Number of Coins You Can Get
    【leetcode】1560. Most Visited Sector in a Circular Track
    Python中用format函数格式化字符串的用法
    机器学习最常用优化之一——梯度下降优化算法综述
    python学习之argparse模块
    Ubuntu14.04安装NVIDIA显卡驱动
    Anaconda使用教程
    TensorFlow0.8代码目录结构讲解
    cmake编译opencv程序
  • 原文地址:https://www.cnblogs.com/hiyong/p/14552753.html
Copyright © 2020-2023  润新知