SQL分类

1、DDL语句:数据定义语句,用来定义不同的数据段、数据库,表,列,索引等数据表对象,常用语句:create、drop、alter等。
2、DML语句:数据操作语句,用于添加、删除、更新和查询数据库记录:insert,delete,update,select.
3、DCL语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句:grant、revoke

DDL语句

1.create创建数据库

mysql> create database test1;
Query OK, 1 row affected (0.00 sec)

如果创建时,数据库已经存在则会提示:

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

这时可以使用show命令来查看系统中有哪些数据库

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| db1                |
| db2                |
| db3                |
| homework           |
| mysql              |
| mysqlbook          |
| performance_schema |
| test               |
| test1              |
+--------------------+
10 rows in set (0.00 sec)

2.删除数据库

语法drop + datavase + 数据库名:

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

注意,删除数据库时会将数据库下所有的表连同删除

3、创建表

创建表语法:

create table 表名(
字段名 数据类型 约束条件,
字段名 数据类型 约束条件,
字段名 数据类型 约束条件,
)

例如创建一个emp表,字段:ename、hiredate、sal,数据类型:varchar(10)、date、int(2)(后面会介绍数据类型)

create table emp(
ename varchar(10),
hiredate date,
sal decimal(10,2),
deptno int(2)
);

创建完成后可以输入以下命令查看表结构:
desc 表名

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)

但是desc命令显示的信息不是最全的,全面信息可以用如下命令:
show create table +表名\G;

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)

\G是使记录竖向排列

4、删除表

删除表的命令如下:
drop table 表名:
列如删除数据库中的emp表

drop table emp;

5、修改表

修改表设计到多方面,修改字段,删除字段、修改数据、修改数据类型以及约束条件等。
表的修改都使用到alter table语句

5.1 修改表字段的数据类型

语法:
alter table 表名 modify 字段名 数据类型 约束条件;
例如修改表emp的ename字段定义,把varchar(10)改为varchar(20):

mysql> alter table emp modify ename varchar(20);
Query OK, 0 rows affected (0.06 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)
#ename字段的数据类型以及修改

5.2增加表字段

语法:
alter table 表名 add 字段名 数据类型 约束条件 [first/after 表名];
例如在emp中增加字段age,数据类型为int(3):

alter table emp add age int(3);

mysql> alter table emp add age int(3);
Query OK, 0 rows affected (0.03 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.01 sec)

可以在语句后面加first为加到表首字段,after+字段名表示在谁后面

5.3删除表字段

语法:alter table emp drop 字段名;
举例:删除age字段

mysql> alter table emp drop age;
Query OK, 0 rows affected (0.03 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)

5.4字段改名

语法:alter table 表名 change 字段名 新字段名 [约束条件]:

alter table emp change age age1 int(4);

注意:change 和modify都可以修改表的定义,不同的是change后面需要两次列表(新旧)

5.5修改表名

语法: alter table 表名 rename 新表名;

alter table emp rename emp1;