MySQL分类与DDL语句实例详解

SQL分类
  1. DDL(Data Definition Languages):数据定义语言,定义不同数据段、数据库、表、列、索引等数据库对象,常用关键字包括create、drop、alter等
  2. DML(Data Manipulation Language):数据操控语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性:常用关键字包括insert、delete、update和select等
  3. DCL(Data Control Lanaguage):数据控制语句,用于控制不同数据段直接的许可和访问级别的语句,定义了数据库、表、字段、用户的访问权限和安全级别,主要语句关键字包括grant、revoke等

DDL语句
常用命令有:
  1. CREATE DATABASE dbname:创建名为dbname的数据库
mysql> create database test2;
Query OK, 1 row affected (0.00 sec)
  1. show databases:打印系统现有所有数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)
其中有4个数据库是在mysql安装后自动创建:
    1. information_schema:主要存储了系统中的一些数据库对象信息。比如用户表信息、列信 息、权限信息、字符集信息、分区信息等。
    2. cluster:存储了系统的集群信息。
    3. mysql:存储了系统的用户权限信息。
    4. test:系统自动创建的测试数据库,任何用户都可以使用
  1. use dbname:选择数据库
mysql> use test;
Database changed
  1. show tables:选择特定数据库后,可以使用此命令输出所有表格信息
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| emp            |
+----------------+
1 row in set (0.00 sec)
  1. drop database dbname:删除名为dbname的数据库
mysql> drop database test1;
Query OK, 0 rows affected (0.01 sec)
  1. create table ... :创建表,其基本语法如下:
CREATE TABLE tablename (column_name_1 column_type_1 constraints, column_name_2  column_type_2  constraints , ……column_name_n  column_type_n  constraints)
因为 MySQL 的表名是以目录的形式存在于磁盘上,所以表名的字符可以用任何目录名允许 的字符。column_name 是列的名字,column_type 是列的数据类型,contraints 是这个列的约 束条件。
例如,创建一个名称为 emp 的表。表中包括 3 个字段,ename(姓名),hiredate(雇用日期)、 sal(薪水),字段类型分别为 varchar(10)、date、int(2),则创建语句为:
mysql> CREATE TABLE emp (
    ->     ename VARCHAR (10),
    ->     hiredate date,
    ->     sal DECIMAL (10, 2),
    ->     deptno INT (2)
    -> );
Query OK, 0 rows affected (0.05 sec)
  1. desc tablename / show create table tablename : 查看表名为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.01 sec)
  1. 修改表类型,具体可分为以下几种:
    • 修改表列类型
      • ALTER TABLE tablename MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
      • 结合上表描述,我们对emp表做出修改
        mysql> alter table emp modify ename varchar(20);
        Query OK, 0 rows affected (0.08 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)

        发现表结构已经改变
    • 增加表字段
      • ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST | AFTER col_name]
      • 表 emp 上新增加字段 age,类型为 int(3),同时我们可以使用FIRST | AFTER 控制列的插入位置,FIRST为插入到最前面,默认为最后一行:
mysql> alter table emp add column age int(3)  after deptno;
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    |       |
| age      | int(3)        | YES  |     | NULL    |       |
+----------+---------------+------+-----+---------+-------+
5 rows in set (0.02 sec)
    • 删除表字段
      • ALTER TABLE tablename DROP [COLUMN] col_name
      • 删除刚刚新添加的age属性:
mysql> alter table emp drop column age;
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)
    • 字段改名
      • ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition
      • 将 ename改名为 name,同时修改字段类型为 varchar(10)
mysql> alter table emp change ename name varchar(10);
Query OK, 0 rows affected (0.07 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc emp;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| name     | 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)
注意:change 和 modify都可以修改表的定义,不同的是 change 后面需要写两次列名,不方便。 但是 change 的优点是可以修改列名称,modify则不能
    • 修改表名
      • ALTER TABLE tablename RENAME [TO] new_tablename
      • 将表 emp 改名为 emp1
mysql> alter table emp rename emp1;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| emp1            |
+----------------+
1 row in set (0.00 sec)

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

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| emp            |
+----------------+
1 row in set (0.00 sec)


  1. drop table tablename:删除名为tablename的表:
           mysql> drop table emp;
          Query OK, 0 rows affected (0.01 sec)

你可能感兴趣的:(数据库,MySQL入门详解)