mysql常用表的基本操作

前言

上一篇文章介绍了mysql在Linux系统下安装的过程,如果你需要安装Mysql不妨访问一下这篇文章:Linux安装mysql,工作后一直接触的关系型数据库就是Mysql,Mysql是一个合格的java程序员必须要掌握和学习的技能。

关系数据库基本概念以及MySQL基本命令

RDBMS即关系数据库管理系统(Relational Database Management System),是将数据组织为相关的行和列的系统。数据表是存储数据的单元,建表的时候通常需要指定该表包含多少列,每一个列的数据类型和约束信息,此外还应该为每一个数据表指定特殊的列,通常我们把这一列称为主键列,下面将简单介绍一下常用的mysql命令。

  • 登录mysql
mysql [-h 主机名 -P 端口号] -u 用户名 -p 密码

在这里插入图片描述
注意P代表大写,若小写则表示连接的具体的数据库。如果不指定主机名和端口号,默认连接本地的3306端口号。

  • 查看mysql配置命令
    一般在Linux系统的/etc/my.cnf可以配置mysql运行的属性配置,如端口号、存储数据路径、默认sql引擎等,下面给出常见的属性查询示例:
mysql>  select @@basedir;
+--------------------------------------------+
| @@basedir                                  |
+--------------------------------------------+
| /usr/local/mysql-5.7.20-macos10.12-x86_64/ |
+--------------------------------------------+
1 row in set (0.00 sec)

mysql> select @@datadir;
+------------------------+
| @@datadir              |
+------------------------+
| /usr/local/mysql/data/ |
+------------------------+
1 row in set (0.00 sec)

mysql> select @@port;
+--------+
| @@port |
+--------+
|   3306 |
+--------+
1 row in set (0.00 sec)

这些全局变量可以通过命令show global variables;将mysql全局变量一次性显示出来。

  • 创建数据库表命令

mysql一个实例可以有多个多个数据库,可以通过如下命令查看当前数据库存在的所有实例;

## 查看当前mysql数据库实例
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| interview          |
| myemployees        |
| mysql              |
| performance_schema |
| simulator          |
| smartet            |
| sys                |
| test               |
+--------------------+
9 rows in set (0.02 sec)
## 查看mysql数据库的表
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
## 查看mysql数据库的表
mysql> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| server_cost               |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
31 rows in set (0.00 sec)

SQL语句概念

SQL语句通常以下4个以下类型:

  1. DQL(Data Query Language):主要由select关键字完成,主要充当对数据库表数据的检索功能。
  2. DML(Data Manipulation Language):主要由insertupdatedeleate三个关键字完成,完成对数据库表数据的新增、更新、删除功能。
  3. DDL(Data Definition Language):主要由alterdropcreatetruncate四个关键字完成,实现对数据库列以及表属性更新、删除、创建、清除功能。
  4. DCL(Data Control Language):主要由grantrevoke两个关键字组成,实现对权限的控制和撤销。
  • DDL语句
    DDL语句是操作数据库对象的语句,上面也介绍了其包含创建(create)、删除(drop)和修改(alter)数据库对象。常见的数据库对象包括tableviewindexfunctionproceduretriggerconstraint

创建数据库表
标准的建表语句的格式如下:

create table 表名
(
列名 列数据类型 列约束条件,

)

如下面创建一个t_user的数据库表对象所示:

mysql> create table if not exists t_user
    -> (
    -> id int primary key auto_increment,
    -> name varchar(20) not null,
    -> age int(3) not null,
    -> salary decimal(10,2))
    -> engine=innodb
    -> default charset=utf8mb4
    -> collate=utf8mb4_unicode_ci;
Query OK, 0 rows affected (0.02 sec)

上面表中主键列为Id,下面简单介绍主键约束相关概念

  • 主键约束的作用

主键约束要求主键列唯一且不能为空,主键可以加快数据库查询速度,而且可以建立主键与一行记录一一对应关系,就好比一个身份证号对应一个人。主键按类型可分为单字段主键和组合字段主键。

  1. 单字段主键语法规则如下

列名 数据类型 primary key
或者
[constraint] key 列名

第一种语法规则见t_user表,如果使用第二种语法sql改写如下:

mysql> create table if not exists t_user
    -> (
    -> id int(11) ,
    -> name varchar(20) not null,
    -> age int(3) not null,
    -> salary decimal(10,2),
    -> primary key(id))
    -> engine=innodb
    -> default charset=utf8mb4
    -> collate=utf8mb4_unicode_ci;
Query OK, 0 rows affected (0.02 sec)
  1. 组合字段主键

primary key [字段1,字段2…]

假设上表需要将姓名与年龄做联合主键的需求,sql改写如下所示:

mysql> create table if not exists t_user
    -> (
    -> id int(11) ,
    -> name varchar(20) not null,
    -> age int(3) not null,
    -> salary decimal(10,2),
    -> primary key(id,age))
    -> engine=innodb
    -> default charset=utf8mb4
    -> collate=utf8mb4_unicode_ci;
Query OK, 0 rows affected (0.02 sec)

修改数据表结构
修改表结构使用alter table关键字,可以实现对表列增加、删除、修改功能。

  • 新增列语法

alter table 表名 add column 列名、列数据类型、列约束

如下面新增一个address列:

mysql> alter table t_user add column address varchar(40) default '';
Query OK, 0 rows affected (0.04 sec)
  • 修改列属性

alter table 表名 modify 列名 列数据类型 列约束

例如:想要将address列数据类型进行修改。

mysql> alter table t_user modify address varchar(45) default '';
Query OK, 0 rows affected (0.04 sec)

上面的modify可以实现对列属性的修改但是无法进行列名的修改,若实现列名修改可以使用change关键字如下所示:

#将address列名更正为ad且数据类型更正为varchar(36)
mysql> alter table t_user change address ad varchar(36) not null ;
Query OK, 4 rows affected (0.02 sec)

此时可以使用desc 表名查看数据库表结构:

mysql> desc t_user;
+-------------+---------------+------+-----+---------+----------------+
| Field       | Type          | Null | Key | Default | Extra          |
+-------------+---------------+------+-----+---------+----------------+
| id          | int(11)       | NO   | PRI | NULL    | auto_increment |
| name        | varchar(20)   | NO   |     | NULL    |                |
| age         | int(3)        | NO   |     | NULL    |                |
| salary      | decimal(10,2) | NO   |     | NULL    |                |
| ad          | varchar(36)   | NO   |     | NULL    |                |
+-------------+---------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
  • 删除列

alter table 表名 drop 列名

mysql> alter table t_user drop column ad;
Query OK, 0 rows affected (0.03 sec)

还有一个特殊的关键字truncate,可以删除所有表数据记录但仍保存数据库表结构。

truncate 表名

# 清空表数据
mysql> truncate t_user;
Query OK, 0 rows affected (0.01 sec)
#查询表数据显示空
mysql> select * from t_user;
Empty set (0.00 sec)
  • 插入数据

insert into 表名(列名1,列名2…) values (列值1,列值2,列值3)
主键id自增的可以不用进行相应列值插入如下所示:

mysql> insert into t_user (name,age,salary) values ('张三',23,7888.8);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t_user (name,age,salary) values ('李四',24,8748.3);
Query OK, 1 row affected (0.00 sec)

也可以不指定列名,但是所有的列都要有值,所以sql语句需要给id进行赋值就像下面这条sql语句。

mysql> insert into t_user values(3,'王五',25,9444.5);
Query OK, 1 row affected (0.00 sec)
  • update语句

update 表名 set 列名1=列值1,列名2=列值2,列名3=列值3;

mysql> update t_user set name='尼古拉斯赵四',salary=12000 where id =1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
  • delete语句

delete from 表名 where 列名=列值

## 删除名称为尼古拉斯赵四的那一行记录
mysql> delete from t_user where name='尼古拉斯赵四';
Query OK, 0 rows affected (0.00 sec)

由于select检索语句是MySQL中最复杂以及丰富的sql查询,则单独写一篇关于mysql查询的文章。

猜你喜欢

转载自blog.csdn.net/javaee_gao/article/details/100025497
今日推荐