zoukankan      html  css  js  c++  java
  • Mysql

    之前介绍了数据库的增删改查, 发现忘记了数据库的一些基本操作, 比如建库, 建表, 改表等等. 那这里就来小结一下数据库sql形式的基本操作.

    一、库操作

    1. 建库

    在建库之前, 可能需要看一下, 数据库里面, 已经存在哪些库, 这样可以去处理重复的问题.

    show databases;

    这里之所以会出现newdb, 是因为我已经执行过下面的创建库的脚本了.

    然后, 就可以创建库了.

    create DATABASE newdb;

    执行这句话, 就会按照默认编码的方式去创建数据库newdb. 那默认编码是什么呢, 来看一下: 

    show create database newdb;

    如果想要在创建库的时候, 就指定好编码格式的话, 那么只需要按照上面这种模式去加就好了

    create database newdb2 default character set utf8

     其实编码不用管, 使用默认的方式就好.

    2. 删库 -- 慎用

    drop database newdb;

    3. 引用库

    如果你在1号库中, 想查询2号库的表, 那么就需要使用到这个

    use test;

    二、表操作

    1. 建表

    同样的, 建表之前, 要查询表中是否已存在我们想见的表.

    show tables;

    如果没有, 则可以开始新建表了, 如果库里面已经有了表模板, 并且你想在新建的时候, 导入部分数据, 那么应该使用下面这种方法:

    create table tch_contact2 select * from tch_contact;

    这样的话, tch_contact2能获取tch_contact的结构和数据, 但是并不能获取别的, 例如:索引, 外键, 触发器.

    另外一种建表, 则稍微有点复杂

    CREATE TABLE `contact` (
      `Id` int(11) NOT NULL AUTO_INCREMENT, -- 不为空, 自动增长
      `TId` int(11) DEFAULT NULL,
      `QQ` varchar(15) DEFAULT NULL,
      `Weixin` varchar(50) DEFAULT NULL,
      `Phone` varchar(15) DEFAULT NULL,
      PRIMARY KEY (`Id`), -- 设置主键
      KEY `Index_TId` (`TId`) USING BTREE, -- 索引
      CONSTRAINT `key_tid` FOREIGN KEY (`TId`) REFERENCES `tch_teacher` (`Id`) ON DELETE CASCADE ON UPDATE NO ACTION -- 设置外键
    ) COMMENT='就是这个表' -- 表注释

    有时候需要用到临时表, 方法也很简单, 只需要在create table 中间加上一句 TEMPORARY 就可以了, 其他的, 都是和一般建表一样:

    create temporary table '表名'()

    1.1 设置主键

    设置主键的语句, 可以分开写, 也可以合在一起写. 

    `Id` int(11) NOT NULL  PRIMARY key AUTO_INCREMENT,
    -- 或者
    `Id` int(11) NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (`Id`),

    1.2 设置索引 -- 索引这里有单个索引和复合索引, 但是设置方法都是一样的

    mysql里面, 索引有三种类型, Normal, Unique, FullText. 索引方法由两种: Btree, Hash

    -- 单个索引
    KEY `Index_Weixin` (`Weixin`) USING BTREE,
    UNIQUE KEY `Index_TId` (`TId`) USING HASH,
    FULLTEXT KEY `Index_QQ` (`QQ`),
    -- 复合索引
    KEY `Index_fuhe` ('QQ', `Weixin`) USING BTREE,

    我一般都只用Normal, Btree两个, 单个的和符合的都用.

    1.3 外键

    CONSTRAINT `key_tid` FOREIGN KEY (`TId`) REFERENCES `tch_teacher` (`Id`) ON DELETE CASCADE ON UPDATE NO ACTION

    着句话, 看着可能有点费解, 但是看一下软件中的界面, 就非常清楚了

    别的不需要解释了, 但是这里有个删除时, 更新时, 还是需要唠叨两句.

    mysql这里, 有四个值可供选择.

    RESTRICT -- 限制, 此限制是在更新之前.

    在删除tch_teacher数据时, 如果tch_contact还有与之对应的值, 则删除失败

    NO ACTION -- 限制, 此限制是在更新之后. 与Restrict触发的时间不同, 但是功能是一样的.

    CASCADE -- 级联, 不限制删除, 但是会同步修改或删除.

    如果tch_teacher删除一条数据, 那么tch_contact会同步删除, 与他关联的数据.

    修改也是一样, 会同步修改.

    SET NULL -- 设置为空, 如果tch_teacher删除一条数据, 那么tch_contact会将与之关联的那个字段设置为null, 不是把整条数据, 只是那个字段.

    这里, 我觉得比较实用的就是 cascade了, 同步删除功能, 省下我不少工作呢.

    2. 表操作

    表操作又分为表结构修改和表名称修改. 先看表结构.

    建好表之后, 发现其中的列, 并不完全是我想要的, 那咋搞呢?

    2.1 查询列

    show COLUMNS from tch_contact;

    2.2  加列

    alter table tch_contact add createby int comment '创建人';

    2.3 修改列

    alter table tch_contact MODIFY createby varchar(1);

    alter table tch_contact change createby createby1 varchar(2);

    2.4 减列 

    alter table tch_contact drop  createby;

    2.5 索引

    -- 新增一个索引
    create index index_tid on tch_contact2(tid) using BTREE;
    
    alter table tch_contact2 add index index_weixin(weixin);
    
    -- 如果要修改一个索引, mysql里面, 只有先删除然后重建
    
    -- 删除一个索引
    drop index index_tid on tch_contact2;

    2.6 外键

    -- 新增一个外键
    alter table tch_contact2 add CONSTRAINT 
    `key_tid` FOREIGN KEY (`TId`) REFERENCES `tch_teacher` (`Id`) ON DELETE CASCADE ON UPDATE NO ACTION;
    
    -- 删除一个外键
    alter table tch_contact2  DROP FOREIGN KEY key_tid ;

    2.7 表名称修改

    rename table tch_contact to tch_contact1;
    
    ALTER TABLE tch_contact1 RENAME tch_contact;
    这两句都是表名称修改的语句.

    3. 表删除 -- 慎用

    drop table tch_contactt;

    项目中最常用的, 其实也就是上面这些了. 

  • 相关阅读:
    JavaScript中的__proto__
    移动前端调试页面–weinre
    nodo合并多个mp3文件
    enctype和Content-type有什么关系
    vscode 实用的插件
    前端跨域问题及解决方案
    小小的js
    如何使用eslint
    RN记录
    numpy的索引
  • 原文地址:https://www.cnblogs.com/elvinle/p/6222514.html
Copyright © 2011-2022 走看看