上一篇文章介绍了mysql在Linux系统下安装的过程,如果你需要安装Mysql不妨访问一下这篇文章:Linux安装mysql工作后一直接触的关系型数据库就是Mysql,Mysql是一个合格的java程序员必须要掌握和学习的技能。
RDBMS即关系数据库管理系统(Relational Database Management System),是将数据组织为相关的行和列的系统。数据表是存储数据的单元,建表的时候通常需要指定该表包含多少列,每一个列的数据类型和约束信息,此外还应该为每一个数据表指定特殊的列,通常我们把这一列称为主键列,下面将简单介绍一下常用的mysql命令。
mysql [-h 主机名 -P 端口号] -u 用户名 -p 密码
注意P代表大写,若小写则表示连接的具体的数据库。如果不指定主机名和端口号,默认连接本地的3306端口号。
/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语句通常以下4个以下类型:
select
关键字完成,主要充当对数据库表数据的检索功能。insert
、update
、deleate
三个关键字完成,完成对数据库表数据的新增、更新、删除功能。alter
、drop
、create
、truncate
四个关键字完成,实现对数据库列以及表属性更新、删除、创建、清除功能。grant
、revoke
两个关键字组成,实现对权限的控制和撤销。table
、view
、index
、function
、procedure
、trigger
、constraint
。创建数据库表
标准的建表语句的格式如下:
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)
修改数据表结构
修改表结构使用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 表名 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 from 表名 where 列名=列值
## 删除名称为尼古拉斯赵四的那一行记录
mysql> delete from t_user where name='尼古拉斯赵四';
Query OK, 0 rows affected (0.00 sec)
由于select检索语句是MySQL中最复杂以及丰富的sql查询,则单独写一篇关于mysql查询的文章。