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

一、库操作

1. 建库

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

  1. show databases;

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

然后, 就可以创建库了.

  1. create DATABASE newdb;

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

  1. show create database newdb;

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

  1. create database newdb2 default character set utf8

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

2. 删库 -- 慎用

  1. drop database newdb;

3. 引用库

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

  1. use test;

二、表操作

1. 建表

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

  1. show tables;

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

  1. create table tch_contact2 select * from tch_contact;

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

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

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

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

create temporary table '表名'()

1.1 设置主键

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

  1. `Id` int(11) NOT NULL PRIMARY key AUTO_INCREMENT,
  2. -- 或者
  3. `Id` int(11) NOT NULL AUTO_INCREMENT,
  4. PRIMARY KEY (`Id`),

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

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

  1. -- 单个索引
  2. KEY `Index_Weixin` (`Weixin`) USING BTREE,
  3. UNIQUE KEY `Index_TId` (`TId`) USING HASH,
  4. FULLTEXT KEY `Index_QQ` (`QQ`),
  5. -- 复合索引
  6. KEY `Index_fuhe` ('QQ', `Weixin`) USING BTREE,

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

1.3 外键

  1. 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 查询列

  1. show COLUMNS from tch_contact;

2.2  加列

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

2.3 修改列

  1. alter table tch_contact MODIFY createby varchar(1);
  2.  
  3. alter table tch_contact change createby createby1 varchar(2);

2.4 减列

  1. alter table tch_contact drop createby;

2.5 索引

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

2.6 外键

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

2.7 表名称修改

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

3. 表删除 -- 慎用

  1. drop table tch_contactt;

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

Mysql - 数据库操作的更多相关文章

  1. php : mysql数据库操作类演示

    设计目标: 1,该类一实例化,就可以自动连接上mysql数据库: 2,该类可以单独去设定要使用的连接编码(set names XXX) 3,该类可以单独去设定要使用的数据库(use XXX): 4,可 ...

  2. php MySQL数据库操作类源代码

    php MySQL数据库操作类源代码: <?php class MySQL{ private $host; //服务器地址 private $name; //登录账号 private $pwd; ...

  3. 设计模式 - 单例模式mysql数据库操作类

    待续... index.php 调用方法: <?php header('Content-Type:text/html; charset=utf8'); require 'instance.php ...

  4. MySQL数据库操作常用命令

    MySQL数据库操作常用命令DOS连接数据库1.安装MySQL配置好环境2.运行cmd命令net start mysql3.找到mysql文件根目录输入命令mysql -h localhost -u ...

  5. Python/MySQL(四、MySQL数据库操作)

    Python/MySQL(四.MySQL数据库操作) 一.数据库条件语句: case when id>9 then ture else false 二.三元运算: if(isnull(xx)0, ...

  6. Java通过JDBC 进行MySQL数据库操作

    转自: http://blog.csdn.net/tobetheender/article/details/52772157 Java通过JDBC 进行MySQL数据库操作 原创 2016年10月10 ...

  7. Mysql 数据库操作之DDL、DML、DQL语句操作

    Mysql 数据库操作之DDL.DML.DQL语句操作 设置数据库用户名密码 l  Show databases 查看数据库列表信息 l  查看数据库中的数据表信息 ,格式: use 数据库名: sh ...

  8. Python进行MySQL数据库操作

    最近开始玩Python,慢慢开始喜欢上它了,以前都是用shell来实现一些自动化或者监控的操作,现在用Python来实现,感觉更棒,Python是一门很强大的面向对象语言,所以作为一个运维DBA或者运 ...

  9. Python3:sqlalchemy对mysql数据库操作,非sql语句

    Python3:sqlalchemy对mysql数据库操作,非sql语句 # python3 # author lizm # datetime 2018-02-01 10:00:00 # -*- co ...

  10. (转载)常用的Mysql数据库操作语句大全

    打开CMD,进入数据库命令:mysql -hlocalhost -uroot -p 退出数据库:exit 用户管理: 1.新建用户: >CREATE USER name IDENTIFIED B ...

随机推荐

  1. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  2. word-wrap ,word-break 和white-space 的联系

    在工作中我遇到一个问题,其实功能也不复杂,就是上面有个textarea标签 ,里面输入内容,下面有个显示效果 ,有个条件就是 上面输入的什么格式(比如换行等等),下面显示的也是 什么格式.如下图: 这 ...

  3. 简单入门canvas - 通过刮奖效果来学习

    一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...

  4. .Net中的AOP系列之构建一个汽车租赁应用

    返回<.Net中的AOP>系列学习总目录 本篇目录 开始一个新项目 没有AOP的生活 变更的代价 使用AOP重构 本系列的源码本人已托管于Coding上:点击查看. 本系列的实验环境:VS ...

  5. SSH实战 · 用spring框架下的hibernatetemplate的get方法出现的问题

    用get方法查询:      return this.getHibernateTemplate().get(Product.class, pid); 出现错误为:id to load is requi ...

  6. Java数据库连接技术——JDBC

    大家好,今天我们学习了Java如何连接数据库.之前学过.net语言的数据库操作,感觉就是一通百通,大同小异. JDBC是Java数据库连接技术的简称,提供连接各种常用数据库的能力. JDBC API ...

  7. 03.LoT.UI 前后台通用框架分解系列之——多样的表格

    LOT.UI分解系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui LoT.UI开源地址如下:https://github.com/du ...

  8. Android数据加密之SHA安全散列算法

    前言: 对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好 ...

  9. html中返回上一页的各种写法【转】

    超链接返回上一页代码: <a href="#" onClick="javascript :history.back(-1);">返回上一页</ ...

  10. 敏捷转型历程 - Sprint3 一团糟的演示会

    我: Tech Leader 团队:团队成员分布在两个城市,我所在的城市包括我有4个成员,另外一个城市包括SM有7个成员.另外由于我们的BA离职了,我暂代IT 的PO 职位.PM和我在一个城市,但他不 ...