数据库中的表操作

1、创建表

表的表名命名规则:

-- 数据库表命名规则重要说明:

-- (1)数据库表名称可以支持大写字母A-Z,小写字母a-z,数字0-9,字符包括下划线 _ ,可以组合使用;

-- (2) 数据库表名称一般以字母开头;

-- (3)数据库表名称不建议以纯数字命名;

-- (4) 数据库表名称在1-30 个字符之间;

-- (5) 数据库表名称可以支持中文,但不建议使用中文命名。

语法:

CREATE TABLE 库名.表名(字段名1 字段类型1(字符长度),字段名2 字段类型2(字符长度2));

举例:在school库中,创建表班级表sclass,表中有字段班级编号cno,数据类型为int,长度为5,班级名称cname,数据类型为char,长度为20,系号为dno,数据类型为int,长度为3

-- 建表准备,先建一个数据库

  1. CREATE DATABASE school DEFAULT CHARACTER SET gb2312 COLLATE gb2312_chinese_ci;

-- 创建sclass表

  1. CREATE TABLE school.sclass
  2. (
  3. cno INT(5),
  4. cname CHAR(20),
  5. dno INT(3)
  6. );

2、修改表

-- 说明:修改表就是修改表的表名、增加字段、删除字段、修改数据类型及数据长度、修改表的约束等。

为一个表增加字段(interview)

语法:

ALTER TABLE 库名.表名

ADD COLUMN 字段名 数据类型(数据长度);

举例:为招生表增加字段zsbh(招生老师编号),int型,长度为4.

  1. ALTER TABLE 51testing.`zhaosheng`
  2. ADD COLUMN zsbh INT(4);
  3. DESC zhaosheng; -- 查看表结构

3、删除表

语法:

DROP TABLE 库名.表名;

举例:删除school数据库中的表sclass

  1. DROP TABLE school.`sclass`;
  2. SHOW TABLES; -- 查看表

4、复制表(只复制表结构,不复制数据)

(interview)

语法:

CREATE TABLE 库名.表名1 LIKE 库名.表名2;

意思:创建一个类似于表名2的表名1。

-- like 类似

举例:创建一个表zhaosheng1,表结构从表zhaosheng复制

  1. CREATE TABLE test.`zhaosheng1` LIKE test.`zhaosheng`;

5、复制表(复制表结构+数据)

  (interview)

语法:

CREATE TABLE 库名.表名1 [AS] SELECT * FROM 库名.表名2;

-- 说明 as关键字可以省略

举例:在test数据库中,创建一个表zhaosheng2,表结构和数据从zhaosheng表复制

  1. -- 方法一
  2. CREATE TABLE test.`zhaosheng2` AS SELECT * FROM test.`zhaosheng`;
  3.  
  4. -- 方法二
  5. CREATE TABLE test.`zhaosheng2` SELECT * FROM test.`zhaosheng`;

MySQL数据类型

1、数值型

  1. CREATE TABLE test.stu
  2. (
  3. sno TINYINT(4),
  4. sno1 SMALLINT(4),
  5. sno2 MEDIUMINT(4),
  6. sno3 INTEGER(4),
  7. sno4 BIGINT(4),
  8. sno5 INT(4),
  9. fenshu FLOAT(6,2),
  10. height FLOAT(6,2),
  11. fenshu1 DECIMAL(6,2)
  12. );
  1. INSERT INTO test.`stu`(sno,sno1,sno2,sno3,sno4,sno5,fenshu,height,fenshu1)
  2. VALUES(10000000,10000000,10000000,10000000,10000000,10000000,150,180.89,147.56);
  3.  
  4. SHOW WARNINGS -- 查看告警信息
  1. TINY:微小
    SMALL:小
    MEDIUM:中等的
    INTEGER:整数,
    int integer 的简写
    Bigint:大
  1. -- zerofill unsigned(二者配合使用)
  2. CREATE TABLE test.aa(salary MEDIUMINT(5) UNSIGNED ZEROFILL);

-- unsigned 关键字: 无符号类型,该字段的值只能是非负数,该关键字只对整数有效。

-- zerofill 关键字:默认无符号,零填充,指的是位数固定,插入的数据如果长度不足所定义 字段类型的长度时,mysql 则自动在数据的左侧使用 0 来补充;

  1. INSERT INTO test.`aa`(salary) VALUES(300);
  2. -- 300位数不足5为,插入数据后,由于插入数据时存在zerofill关键字,mysql自动在300前加20.

-- 一般 unsigned 关键字和 zerofill(零填充) 关键字搭配在一起使用。

Zero:零的意思

Fill:填充

2、字符型

  1. CREATE TABLE test.student
  2. (
  3. sname CHAR(10),
  4. sname1 VARCHAR(10),
  5. sname2 TINYBLOB,
  6. sname3 TINYTEXT,
  7. sname4 BLOB
  8. );
  9. INSERT INTO test.`student`(sname,sname1,sname2,sname3,sname4)
  10. VALUES("张三","普拉即米尔.京","要求编写SQL语句,在数据库student表中进行如下操作"
  11. ,"要求编写SQL语句,在数据库student表中进行如下操作",
  12. "要求编写SQL语句,在数据库student表中进行如下操作");

3、日期时间型

CREATE TABLE test.cc(hire_date DATETIME);

  1. 举例:往cc表中插入入职日期
  2. 方法一、直接插入日期时间
  3. INSERT INTO test.`cc`(hire_date) VALUES("2020-08-08 23:20:12");
  4. 方法二、借助日期时间操作函数sysdate()、now()插入日期时间
  5. INSERT INTO test.`cc`(hire_date) VALUES(SYSDATE());-- 插入当前日期时间
  6. INSERT INTO test.`cc`(hire_date) VALUES(NOW());-- 插入当前日期时间
  7. INSERT INTO test.`cc`(hire_date) VALUES("NOW()");-- now()两边带引号,将导致插入数据异常

4、混合型

  1. CREATE TABLE test.xuanke
  2. (sid INTEGER(5),
  3. sname VARCHAR(20),
  4. sub SET("语文","数学","英语"), -- subject 科目
  5. sex ENUM("M","F")
  6. );
  7. # 举例:往选课表xuanke中插入一条数据:
  8. # 学号sid为1,姓名sname为张三,选择的科目有语文,数学
  9. # 学生性别男。
  10. INSERT INTO test.`xuanke`(sid,sname,sub,sex)
  11. VALUES(1,"张三","语文,数学","M");

表的约束及修改

1、表的约束(constraint)

mysql常用的约束有如下6种:

作用:约束是一种表级别的限制,它通过对表的行或列的数据做出限制,保证数据的完整性和一致性

1.1 主键约束(Primary Key,简称PK)

主键约束特点:

(1)表中添加了主键约束,数据将不允许重复;

(2)主键字段的值不允许为空(主键字段的值不能为null);

(3)一个表中,只能有一个主键;

(4)主键可以由一个字段构成,也可以由多个字段构成;

  1. -- 举例:在test数据库中,创建客户表customer,表中包括(客户编号cid,客户名称cname
  2. -- )等字段,建表时,将cid字段定义为主键
  3. 方法一、
  4. CREATE TABLE test.customer
  5. (
  6. cid INT(4) PRIMARY KEY, -- cid字段添加主键约束
  7. cname CHAR(30)
  8. );
  9. 方法二、
  10. CREATE TABLE test.customer1
  11. (
  12. cid INT(4),
  13. cname CHAR(30),
  14. PRIMARY KEY(cid) -- cid字段添加主键约束
  15. );
  1. -- 当主键由多个字段构成时,称为复合主键;
  2. 举例:test数据库中,创建表stu1,表中包括字段学号sid,名称sname,分数score,班号cno
  3. 将字段sidsname设置为复合主键。
  4. CREATE TABLE test.stu1
  5. (
  6. sid INTEGER(5),
  7. sname VARCHAR(40),
  8. score FLOAT(4,2),
  9. cno INT(4),
  10. PRIMARY KEY(sid,sname) -- sidsname设置为复合主键
  11. );

1.2 非空约束(NOT NULL)

说明:非空约束,表中的某个字段如果添加了非空约束,那么该字段的数据不能为null

  1. -- 举例:在test数据库,创建表classa,将cno字段设置为主键,将cname设置为非空
  2. CREATE TABLE test.classa
  3. (
  4. cno INT(4) PRIMARY KEY,
  5. cname CHAR(30) NOT NULL
  6. );
  7. INSERT INTO test.`classa`(cno,cname) VALUES(3,"终极一班"),(4,NULL);
  8. -- 因为字段cname添加了非空约束,不能插入null,所以cname字段插入异常
  9.  
  10. INSERT INTO test.`classa`(cno,cname) VALUES(NULL,"终极一班1");
  11. -- 因为主键约束不能为空,所以插入数据失败,系统提示“Column 'cno' cannot be null”。
  12. SHOW WARNINGS;

1.3唯一性(Unique)约束

唯一性约束特点:可以为空,数据不允许重复,一个表中可以有多个

  1. -- 举例:在test库中创建表stu2(sno,sname,cowner(班主任),cno),将字段sno定义为主键,
  2. 将字段cowner定义为唯一键
  3. CREATE TABLE test.stu2
  4. (
  5. sno INT(4) PRIMARY KEY,
  6. sname CHAR(20),
  7. cowner CHAR(20) UNIQUE, -- 班主任字段添加了唯一性约束
  8. cno INT(5)
  9. );
  10.  
  11. INSERT INTO test.stu2(sno,sname,cowner,cno)
  12. VALUES(1,"zs","黎明",3),(2,"zs1","黎明",4); -- 由于班主任字段添加了唯一性约束,
  13. -- 插入的两条数据班主任都是黎明,所有数据重复,违反唯一性约束,插入失败

1.4外键(Foreign Key,简称FK)约束

外键特点:

(1)一个表中可以由多个外键

(2)一个表【从表】中的外键字段的数据,引用自另一个表【主表】的主键或者唯一键

  1. -- 举例:在test数据库中,创建学生表student1,表中有学生编号字段sid,学生名称字段sname,班级编号字段cnocno字段的数据,引用自classa表中cno字段的数据。
  2.  
  3. CREATE TABLE test.student1 -- 从表
  4. (
  5. sid INT(4) PRIMARY KEY,-- sid字段添加主键约束
  6. sname CHAR(30),
  7. cno INT(4),
  8. FOREIGN KEY(cno) REFERENCES test.`classa`(cno)-- student1表的外键cno数据
  9. );-- 引用自classa表的主键字段cno的值
  10. INSERT INTO test.`student1`(sid,sname,cno)
  11. VALUES(1,"张学友",1);
  12.  
  13. INSERT INTO test.`student1`(sid,sname,cno)
  14. VALUES(2,"张学友1",3);

总结:

(1)往表中插入数据时,需要先往主表中插入数据,再往从表中插入数据,否则出错。

(2)删除数据时,需要先删除从表中的数据,再删除主表中的数据。

1.5 默认值(Default)约束

说明:DEFAULT 约束用于向列中插入默认值,如果插入数据时,一个字段如果没有给值,那么会将默认值添加到表中。

  1. -- 举例:在test数据库中,创建表wclass,将cno字段设置为主键,为字段cowner设置默认值为“郭富城”。
  2. CREATE TABLE test.wclass
  3. (
  4. cno INT(4) PRIMARY KEY,
  5. cowner CHAR(30) DEFAULT "郭富城"
  6. );
  7.  
  8. INSERT INTO test.`wclass`(cno,cowner)
  9. VALUES(1,"刘德华");
  10. INSERT INTO test.`wclass`(cno)
  11. VALUES(2); -- 只插入cno字段的值,cowner字段的值默认被插入郭富城

1.6 主键字段自增长 AUTO_INCREMENT

  1. -- 举例:在test库中,创建表食物表foods,包括字段食物编号fidfid为主键,食物名称fname,其中为fid字段添加自增长约束auto_increment.
  2. CREATE TABLE test.foods
  3. (
  4. fid INT(4) PRIMARY KEY AUTO_INCREMENT, -- fid字段添加主键约束和自增长约束
  5. fname CHAR(20)
  6. );
  7. DESC foods; -- 查看表结构
  8. INSERT INTO test.`foods`(fid,fname)
  9. VALUES(1,"cake");
  10. INSERT INTO test.`foods`(fname)
  11. VALUES("lychee"); -- 从插入第二条数据开始,如果只插入fname字段的数据时,fid字段的值
  12. -- 会被自动插入,并且是在上一条数据的基础上自动增长1.

2、 查看一个表的键值(主键等)

SHOW KEYS FROM 库名.表名;

  1. -- 举例:查看hrdb库员工表(employees)表的外键有哪些
  2. SHOW KEYS FROM hrdb.`employees`;
  3. SHOW KEYS FROM test.`classa`;

3、表的修改

对表的表名、字段、字段类型、字段长度、约束等进行修改。

3.1 表的名称修改

语法:

ALTER TABLE 库名.表名

RENAME TO 新表名;

  1. -- 举例:将foods表的名字修改为空food
  2. ALTER TABLE test.`foods`
  3. RENAME TO food;

3.2 修改表的字段或者约束(修改表结构)

3.2.1 为表添加主键约束

语法:

ALTER TABLE 库名.表名

ADD PRIMARY KEY(字段名);

  1. -- 为表aa中的字段salary 添加主键约束
  2. ALTER TABLE test.`aa`
  3. ADD PRIMARY KEY(salary);
  4. DESC test.`aa`; -- 查看添加主键约束结果

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

MySQL 增删查改 必知必会

MySQL 数据库中的基础操作的更多相关文章

  1. Python爬取招聘信息,并且存储到MySQL数据库中

    前面一篇文章主要讲述,如何通过Python爬取招聘信息,且爬取的日期为前一天的,同时将爬取的内容保存到数据库中:这篇文章主要讲述如何将python文件压缩成exe可执行文件,供后面的操作. 这系列文章 ...

  2. 对mysql数据库表的相关操作

    虫师博客(Python使用MySQL数据库(新)): https://www.cnblogs.com/fnng/p/3565912.html 1.更改表的结构,增加一个字段放置新增的属性 alter ...

  3. PHP往mysql数据库中写入中文失败

    该类问题解决办法就是 在建立数据库连接之后,将该连接的编码方式改为中文. 代码如下: $linkID=@mysql_connect("localhost","root&q ...

  4. MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述

    MySQL存储引擎的实际应用以及对MySQL数据库中各主要存储引擎的独特特点的描述: 1.MySQL有多种存储引擎: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(Berk ...

  5. 在mysql数据库中制作千万级测试表

    在mysql数据库中制作千万级测试表 前言: 最近准备深入的学一下mysql,包括各种引擎的特性.性能优化.分表分库等.为了方便测试性能.分表等工作,就需要先建立一张比较大的数据表.我这里准备先建一张 ...

  6. 【转】mysql数据库中实现内连接、左连接、右连接

    [转]mysql数据库中实现内连接.左连接.右连接 内连接:把两个表中数据对应的数据查出来 外连接:以某个表为基础把对应数据查出来 首先创建数据库中的表,数据库代码如下: /* Navicat MyS ...

  7. C#实现MySQL数据库中的blob数据存储

    在MySQL数据库中,有一种blob数据类型,用来存储文件.C#编程语言操作MySQL数据库需要使用MySQL官方组件MySQL.Data.dll. Mysql.Data.dll(6.9.6)组件下载 ...

  8. Swift3.0服务端开发(四) MySQL数据库的连接与操作

    本篇博客我们来聊聊MySQL数据库的连接与操作.如果你本地没有MySQL数据库的话,需要你先安装MySQL数据库.在Mac OS中使用brew包管理器进行MySQL的安装是及其方便的.安装MySQL的 ...

  9. 如何将MongoDB数据库的数据迁移到MySQL数据库中

    FAQ v2.0终于上线了,断断续续忙了有2个多月.这个项目是我实践的第一个全栈的项目,从需求(后期有产品经理介入)到架构,再到设计(有征询设计师的意见).构建(前端.后台.数据库.服务器部署),也是 ...

随机推荐

  1. 【PA2014】Bohater 题解(贪心)

    前言:一道经典贪心题. -------------------------- 题目链接 题目大意:你有$z$滴血,要打$n$只怪.打第$i$只怪扣$d_i$滴血,回$a_i$滴血.问是否存在一种能够通 ...

  2. 【FZYZOJ】无向图的联通图个数 题解(组合数学)

    题目大意:求无向图的连通图个数.由于个数可能很大,只需要求出结果$mod1000000009$的值.$n\leq 1000$ ------------------------- 对于一个含有$n$个结 ...

  3. Docker技术入门与实战第2版-高清文字版

      Docker技术入门与实战第2版-高清文字版 下载地址https://pan.baidu.com/s/1bAoRQQlvBa-PXy5lgIlxUg 扫码下面二维码关注公众号回复100011 获取 ...

  4. 025_go语言中的通道同步

    代码演示 package main import "fmt" import "time" func worker(done chan bool) { fmt.P ...

  5. “随手记”开发记录day16

    今天先对前两天增加的“修改”功能进行测试.然后进行功能的明显划分,丰富账单的添加和显示方法.

  6. Azure DevOps+Docker+Asp.NET Core 实现CI/CD(一 .简介与创建自己的代理池)

    前言 本文主要是讲解如何使用Azure DevOps+Docker 来实现持续集成Asp.NET Core项目(当然 也可以是任意项目). 打算用三个篇幅来记录完整的全过程 觉得有帮助的朋友~可以左上 ...

  7. 卷积神经网络 part2

    [任务一]代码练习 在谷歌 Colab 上完成代码练习,关键步骤截图,并附一些自己的想法和解读.  ● MobileNetV1 网络:简要阅读谷歌2017年的论文<MobileNets: Eff ...

  8. 栈及其简单应用(二)(python代码)

    一.括号判定 前一篇文章我们介绍了栈的简单应用中,关于括号的判定,但那只是一种括号的判定,下面我们来介绍多种括号混合使用时,如何判断括号左右一一对应. 比如“{}{(}(][”这种情况,需要对一种括号 ...

  9. Flutter 打包程序 build android apk

    Step-1 Java 路径 找到java路径, 可使用[flutter doctor -v] Step-2: 进入目录 找到路径后 C:\Program Files\Java\jre1.8.0_23 ...

  10. Android 开发学习进程0.11 pageview relativelayout 沉浸式标题栏

    fragment与pageView fragment fragment不可以侧滑切换相关界面,但多数代码位于fragment中,易于维护,同时不会受到多个手势滑动的影响 pageView pageVi ...