MySql使用入门 (一)

本文介绍了MySQL数据库的入门知识,包括SQL的三大类别:DDL(数据定义语言)、DML(数据操纵语言)和DCL(数据控制语言)。详细讲解了如何创建、查看和删除数据库,以及创建、修改和删除表的操作,提供了丰富的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL分类

SQL主要分为以下3个类别:

  • DDL(Data Definition Languages)语句:数据定义语言。常用的语句关键字主要包括 createdropalter
  • DML(Data Manipulation Language)语句:数据操纵语句。常用的语句关键字主要包括 insertdeleteupdateselect等。
  • DCL (Data Control Language) 语句:数据控制语句。主要的语句关键字包括grantrevoke等。

DDL 语句

  1. 创建数据库
  • 登录客户端(以root身份登录)
 cyc  ~  mysql -uroot -p                                                          1  
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.25-0ubuntu0.18.04.2 (Ubuntu)

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 代表客户端命令,"-u" 后面跟连接的数据库用户,"-p"表示需要输入密码.

  • 创建数据库test1,命令如下:
	mysql> create database test1;
	Query OK, 1 row affected (0.00 sec)

上面 Query OK表示上面的命令执行成功. 这里不是执行查询操作,为什么显示查询成功呢?这是MYSQL的一个特点,所有的DDL和DML(不包括SELECT)操作执行成功后都显示 “Query OK” ,这里理解成执行成功即可. “1 row affected” 表示操作只影响了数据库中的一行记录. "0.00 sec"记录了操作执行的时间.
如果数据库已经存在这个database, 系统会提示:

	mysql> create database test1;
	ERROR 1007 (HY000): Can't create database 'test1'; database exists

查看系统中所有数据库:

	mysql> show databases;
	+--------------------+
	| Database           |
	+--------------------+
	| information_schema |
	| EntityMappings     |
	| admin              |
	| mysql              |
	| performance_schema |
	| sys                |
	| test1              |
	+--------------------+
	7 rows in set (0.00 sec)
  • information_schema :主要存储了系统中的一些数据库对象信息,比如用户表信息,列信息,权限信息,字符集信息,分区信息等.

使用指定数据库

USE dbname;
如:

mysql> use test1;
Database changed
mysql> show tables;
Empty set (0.00 sec)
  1. 删除数据库

删除数据库的语法很简单,如下所示:

drop database dbname;

mysql> drop database test1;
Query OK, 0 rows affected (0.00 sec)

提示操作成功就,后面却显示了"0 raws affected",这个提示可以不用管它,在 MySQL 里面,drop 语句操作结果都是"0 raws affected"

  1. 创建表

在数据库中创建一张表的基本语法:

CREATE TABLE tablename(
column_name_1 column_type_1 constraints,
column_name_2 column_type_2 constraints,
column_name_3 column_type_3 constraints,
...
column_name_n column_type_n constraints)

constraints 是这个列的约束条件.

mysql> create table emp (ename varchar(10), hiredate date, sal decimal(10,2), deptno int(2));
Query OK, 0 rows affected (0.39 sec)

查看表的定义,可以使用如下命令:

DESC tablename

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename    | varchar(10)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.02 sec)

desc可以查看表定义,但是其输出的信息还是不够全面. 需要查看创建表的SQL语句,可以使用如下命令查看:

mysql> show create table emp \G;
*************************** 1. row ***************************
       Table: emp
Create Table: CREATE TABLE `emp` (
  `ename` varchar(10) DEFAULT NULL,
  `hiredate` date DEFAULT NULL,
  `sal` decimal(10,2) DEFAULT NULL,
  `deptno` int(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

ERROR: 
No query specified

上面可以看到表定义,还可以看到表的engine(存储引擎)和charset(字符集)等信息."\G" 选项的含义是使得记录能够按照字段竖向排列,以便更好地显示内容较长的记录.

  1. 删除表

DROP TABLE tablename

mysql> drop table emp;
Query OK, 0 rows affected (0.19 sec)
  1. 修改表

表的结构的更改使用alter table语句.

(1) 修改表类型
ALTER TABLE tablename MODIFY [COLUMN] colum_definition [FIRST\AFTER col_name]
例如,修改表emp 的enamel 字段定义,将varchar(10) 改为 varchar(20):

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename    | varchar(10)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

mysql> alter table emp modify ename varchar(20);
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename    | varchar(20)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

(2) 增加表字段

ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST\AFTER column_name];

在emp中增加age,类型为int(3):

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename    | varchar(20)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> alter table emp add column age int(3);
Query OK, 0 rows affected (0.41 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename    | varchar(20)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
| age      | int(3)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

(3) 删除表字段,

ALTER TABLE tablename DROP [COLUMN] col_name;

mysql> alter table emp drop column age;
Query OK, 0 rows affected (0.40 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename    | varchar(20)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

(4) 字段改名

ALTER TABLE tablename CHANGE [COLUMN] old_col_name colum_definition
将age改名为age1,同时修改字段类型为int(4):

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename    | varchar(20)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
| age      | int(3)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

mysql> alter table emp change age age1 int(4);
Query OK, 0 rows affected (0.11 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename    | varchar(20)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
| age1     | int(4)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

(5) 修改字段排列顺序
前面介绍的字段增加和修改语法(ADD/CHANGE/MODIFY)中,都有一个可选项 first|after column_name ,这个选项可以用来修改字段在表中的位置,ADD增加的新字段默认施加在标的最后位置,而CHANGE/MODIFY默认不会改变字段的位置

  • 增加字段birth date在ename之后:
mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename    | varchar(20)   | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
| age      | int(3)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

mysql> alter table emp add birth date after ename;
Query OK, 0 rows affected (0.43 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| ename    | varchar(20)   | YES  |     | NULL    |       |
| birth    | date          | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
| age      | int(3)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
  • 修改字段age,将它放在最前面:
mysql> alter table emp modify age int(3) first;
Query OK, 0 rows affected (0.41 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| age      | int(3)        | YES  |     | NULL    |       |
| ename    | varchar(20)   | YES  |     | NULL    |       |
| birth    | date          | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

(6) 更改表名

ALTER TABLE tablename RENAME [TO] new_tablename

mysql> alter table emp rename emp1;
Query OK, 0 rows affected (0.13 sec)

mysql> desc emp;
ERROR 1146 (42S02): Table 'test1.emp' doesn't exist
mysql> desc emp1;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| age      | int(3)        | YES  |     | NULL    |       |
| ename    | varchar(20)   | YES  |     | NULL    |       |
| birth    | date          | YES  |     | NULL    |       |
| hiredate | date          | YES  |     | NULL    |       |
| sal      | decimal(10,2) | YES  |     | NULL    |       |
| deptno   | int(2)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
6 rows in set (0.01 sec)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值