• SQL基础------DDL


    DDL

    DDL(data definition language)数据库定义语言:

     其实就是我们在创建表的时候用到的一些sql,比如说:CREATE、ALTER、DROP等。DDL主要是用在定义或改变表的结构,数据类型,表之间的链接和约束等初始化工作上

    语法

    CREATE TABLE 表名称
    (
    列名称1 数据类型,
    列名称2 数据类型,
    列名称3 数据类型,
    ....
    )
    
    ALTER TABLE table_name
    ALTER COLUMN column_name datatype
    
    DROP TABLE 表名称
    DROP DATABASE 数据库名称

    DDL应用

    库操作

    库定义规范

    1、 必须设置字符集
    2、 库名:不要大写字母,不要数字开头,不要超过18字符,不要用内置字符串(关键字,如table、database),库名要和业务有关

    1、建库

    mysql> create database if not exists sch charset utf8mb4;
    Query OK, 1 row affected (0.03 sec)

    2、查库

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sch                |
    | sys                |
    +--------------------+
    5 rows in set (0.03 sec)

    3、查看建库语句

    mysql> show create database sch;
    +----------+-------------------------------------------------------------------------------------------------------------------------------+
    | Database | Create Database                                                                                                               |
    +----------+-------------------------------------------------------------------------------------------------------------------------------+
    | sch      | CREATE DATABASE `sch` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
    +----------+-------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)

    4、修改库定义

    mysql> alter database sch charset utf8;
    Query OK, 1 row affected, 1 warning (0.01 sec)

     5、删除数据库 

    mysql> drop database scho;
    ERROR 1008 (HY000): Can't drop database 'scho'; database doesn't exist
    
    mysql> drop database  if exists scho;
    Query OK, 0 rows affected, 1 warning (0.01 sec)

    表定义 

    建表规范:

    1. 表名:不要大写字母,不要数字开头,不要超过18字符,不要用内置字符串,和业务有关。
    
    2. 列名:业务有关,不要内置字符,不要超过18字符。
    
    3. 数据类型:合适的,精简的,完整的。
    
    4. 每个表要有且只有1个主键。每个列尽量Not null。尽量不要使用外键
    
    5. 表要有注释,每列有注释。
    
    6. 存储引擎InnoDB,字符集utf8mb4

    建表

    CREATE TABLE `students` (
      `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
      `sid` char(10) NOT NULL COMMENT '学号',
      `sname` varchar(128) NOT NULL COMMENT '学生姓名',
      `sage` tinyint(3) unsigned NOT NULL DEFAULT '18' COMMENT '年龄',
      `sgender` tinyint(3) unsigned NOT NULL DEFAULT '2' COMMENT '性别',
      `scardid` char(18) NOT NULL COMMENT '身份证号',
      `saddr` enum('北京市','上海市','天津市','重庆') NOT NULL COMMENT '省分',
      `hobby` set('足球','篮球','羽毛球','排球','乒乓球') DEFAULT NULL COMMENT '爱好',
      `salary` decimal(10,2) unsigned NOT NULL COMMENT '工资',
      `sdate` datetime NOT NULL COMMENT '入学时间',
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci comment '学生表';

    添加字段add

    mysql> alter table student add stel char(11) not null unique comment '手机号';
    mysql> alter table student add index idx_sid(sid);

    修改字段数据类型modify

    mysql> alter table student modify stel varchar(11);
    Query OK, 0 rows affected (0.05 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> desc student;
    +---------+---------------------------------------------------------+------+-----+---------+----------------+
    | Field   | Type                                                    | Null | Key | Default | Extra          |
    +---------+---------------------------------------------------------+------+-----+---------+----------------+
    | id      | int(11)                                                 | NO   | PRI | NULL    | auto_increment |
    | sid     | char(10)                                                | NO   |     | NULL    |                |
    | sname   | varchar(128)                                            | NO   |     | NULL    |                |
    | sage    | tinyint(3) unsigned                                     | NO   |     | 18      |                |
    | sgender | tinyint(3) unsigned                                     | NO   |     | 2       |                |
    | scardid | char(18)                                                | NO   |     | NULL    |                |
    | saddr   | enum('北京市','上海市','天津市','重庆')                 | NO   |     | NULL    |                |
    | hobby   | set('足球','篮球','羽毛球','排球','乒乓球')             | YES  |     | NULL    |                |
    | salary  | decimal(10,2) unsigned                                  | NO   |     | NULL    |                |
    | sdate   | datetime                                                | NO   |     | NULL    |                |
    | stel    | varchar(11)                                             | YES  |     | NULL    |                |
    +---------+---------------------------------------------------------+------+-----+---------+----------------+

    修改字段名称和字段的数据类型 change

    mysql> alter table student change stel phone_no char(11) not null unique;
    Query OK, 0 rows affected (0.03 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> desc student;
    +----------+---------------------------------------------------------+------+-----+---------+----------------+
    | Field    | Type                                                    | Null | Key | Default | Extra          |
    +----------+---------------------------------------------------------+------+-----+---------+----------------+
    | id       | int(11)                                                 | NO   | PRI | NULL    | auto_increment |
    | sid      | char(10)                                                | NO   |     | NULL    |                |
    | sname    | varchar(128)                                            | NO   |     | NULL    |                |
    | sage     | tinyint(3) unsigned                                     | NO   |     | 18      |                |
    | sgender  | tinyint(3) unsigned                                     | NO   |     | 2       |                |
    | scardid  | char(18)                                                | NO   |     | NULL    |                |
    | saddr    | enum('北京市','上海市','天津市','重庆')                 | NO   |     | NULL    |                |
    | hobby    | set('足球','篮球','羽毛球','排球','乒乓球')             | YES  |     | NULL    |                |
    | salary   | decimal(10,2) unsigned                                  | NO   |     | NULL    |                |
    | sdate    | datetime                                                | NO   |     | NULL    |                |
    | phone_no | char(11)                                                | NO   | UNI | NULL    |                |
    +----------+---------------------------------------------------------+------+-----+---------+----------------+
    11 rows in set (0.00 sec)

    添加或修改注释:

    mysql> alter table students comment '学生表';
    
    Query OK, 0 rows affected (0.01 sec)
    
    Records: 0  Duplicates: 0  Warnings: 0

    删表:

    mysql> create table stu like students;
    
    mysql> drop table stu;

    删除字段

    mysql> alter table student drop phone_no;
    Query OK, 0 rows affected (0.02 sec)
    Records: 0  Duplicates: 0  Warnings: 0

    添加索引

    mysql> alter table student add fulltext index  idx_sid(sid);
    Query OK, 0 rows affected, 1 warning (0.64 sec)
    Records: 0  Duplicates: 0  Warnings: 1
    
    mysql> show warnings 
        -> ;
    +---------+------+--------------------------------------------------+
    | Level   | Code | Message                                          |
    +---------+------+--------------------------------------------------+
    | Warning |  124 | InnoDB rebuilding table to add column FTS_DOC_ID |
    +---------+------+--------------------------------------------------+
    1 row in set (0.00 sec)

    删除索引

    mysql> drop  index idx_sid on student;
    Query OK, 0 rows affected (0.35 sec)
    Records: 0  Duplicates: 0  Warnings: 0

    生产中遇到添加、删除字段,添加索引语句,需要谨慎,因为可能会造成全表被锁。需要在非业务繁忙时执行

  • 相关阅读:
    标准输入/输出通道
    不要在纠结负数的表示了
    Coursera公开课-Machine_learing:编程作业7
    Heap堆
    广义表的实现
    二叉树的实现
    模拟实现strstr和strrstr
    栈和队列常考面试题(二)
    栈和队列常考面试题(一)
    vector迭代器失效的几种情况
  • 原文地址:https://www.cnblogs.com/zh-dream/p/12961542.html
Copyright © 2020-2023  润新知