一、表操作:

1.MySQL表的数据类型:

MySQL的数据类型分为3种:

  • 数值
  • 时间/日期
  • 字符/字符串

(1)数值类型:

包括:TinyInt、SmallInt、MediumInt、Int、BigInt、Float、Double、Decimal

(2)时间/日期类型:

  • 包括:DateTime、Date、TimeStamp、Time、Year。
  • 每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
  • TimeStamp类型有专有的自动更新特性。

(3)字符/字符串类型:、

包括:Char、VarChar、Binary、VarBinary、Blob、Text、Enum和Set.

其中:

  • CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
  • BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
  • BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BL

2. 创建表:

(1)表创建基础:

Create Table 表名 (列名1  数据类型1  是否空值1  默认值1,  列名2  数据类型2  是否空值2  默认值2, ........);

eg:

 Create Table Products
 (
      prod_id       c)        not null,
      vend_id       )        not null,
      prod_name     )       not null,
      prod_price    ,)    not null,
      prod_desc     )      null
 );

注意:

  • 表名,在关键字Create Table 之后给出
  • 新表的定义在圆括号之中,各列之间,用逗号分隔
  • 每列的定义:以列名开始,后面跟该列的数据类型
  • 整条建表语句,以圆括号后面的分号结束
  • 建议使用缩进格式
  • 创建的新表的表名,必须不存在,否则会出错
  • 替换现有的表,要求先删除现有表,然后再创建,而非直接替换

(2)使用Null值:

  • 每个列要么是Null列,要么是Not Null列
  • 允许Null值的列,允许在插入行时,不给出该列的值;
  • 不允许Null值的列,在插入或者更新行时,该列必须有值。
  • Null为默认设置,如果不指定Not Null,则该列就认为指定的是Null
  • 主键列必须不能Not Null

eg:

Create  Table Vendors
(
  vend_id         )  Not Null,
  vend_name       )  Not Null,
  vend_address    )  Null,
  vend_city       )  Null,
  vend_state      c)   ,
  vend_zip        )   ,
  vend_country    )  
);

关于Null:

Null值是没有值,不是空字符串""。在Not Null的列中,允许空字符串。空字符串是一个有效的值,它不是无值。Null值,用关键字Null指定,而不是空字符串。

(3)指定默认值:

默认值用关键字Default指定。

如果在插入行时,不给出这列的值,则自动使用该列的默认值

eg:

Create Table OrderItems
(
     order_num     integer         Not Null,
     pord_id       )        Not Null,
     quantity      ,    price     Decimal(8, 2)  Not Null
);

(4)自动增长:Auto_Increment

(5)设定主键:Primary(字段名)

3.用SQL语句向表中添加数据——插入行数据:

使用Insert语句,插入数据。

插入数据的几种方式:

  1. 插入完整的行
  2. 插入行的一部分
  3. 插入某些查询结果

(1)插入完整的行:

法1:按照顺序填充数据

Insert Into 表名 Values(值)

eg:

Insert Into CustomersValues (  '1000006',  'Toy Land',  '123 Any Street',  'New York',  'NY',  '11111',  'USA',  Null,  Null  );

各个列必须以它们在表定义中出现的顺序填充。

缺点:不安全,因为这样填充,高度依赖于表中的列次序。

法2:按照列名,对应填充数据

Insert Into 表名 (字段1, 字段2, 字段3, .......) Values(值1, 值2, 值3, ......);

——在表名后的括号内,明确给出列名。在插入行时,Values列表中的相应值填入列表的对应项。

——Values必须按照表名后面的列名顺序,进行匹配对应填充数据,该顺序不一定就是表中的实际顺序。

eg:

Insert Into Customers(    cust_id,    cust_contact,    cust_email,    cust_name,    cust_address,    cust_city,    cust_state,    cust_zip)Values(    '1000000',    Null,    Null,    'Toy Land',    '123 Any Street',    'New York',    'NY',    '11111');

总结:在Values子句中,必须给表中的每一列,提供一个对应的值。如果该列没有值,应该用Null值填充。

(2)插入行的一部分数据:

使用上面的第二种方法,提供列名,再提供每个列名对应要插入的值。

插入语句:可以只写出表中一部分列名,提供这些列的数据

省略一部分列名,这些列的数据,将为Null值或者该列的默认值。

被省略的列,需要满足以下一个条件:

  • 该列允许Null值
  • 该列有默认值

eg:

Insert Into Customers(
    cust_id,
    cust_name,
    cust_address,
    cust_city,
    cust_state,
    cust_zip)
Values(
    ',
    'Toy Land',
    '123 Any Street',
    'New York',
    'NY',
    ');

相比之前的例子,这条SQL语句,省略了cust_contact,cust_email两列,没有给这两列提供要插入的数据。

因为这两列,允许Null值,所以,插入之后,这一行数据的这两列是Null。

注:如果省略了不允许Null值或者没有默认值的列的相应值,会报错。

(3)插入检索出的数据:

Insert Into 语句插入 Select 语句查询的结果。

eg:

Insert Into Customers(
  cust_id,
  cust_contact,
  cust_email,
  cust_name,
  cust_address,
  cust_city,
  cust_state,
  cust_zip,
  cust_country)
Select cust2_id,
  cust2_contact,
  cust2_email,
  cust2_name,
  cust2_address,
  cust2_city,
  cust2_state,
  cust2_zip,
  cust2_country
From CustNew;

将从CustNew表中查询到的结果,插入到Customers表中。

(4)复制表:

将一个表的内容(表1)创建并复制到新表(表2)

Create Table 表2 As Select * From 表1

  • 也可以只复制部分列,给出相应的列名,不用*
  • 任何Select的选项和语句,都可以使用,比如:where,group by等
  • Select语句也可以使用联结

MySQL训练营02的更多相关文章

  1. mysql笔记02 创建高性能的索引

    创建高性能的索引 1. 索引(在MySQL中也叫做"键(key)")是存储引擎用于快速找到记录的一种数据结构. 2. 索引可以包含一个或多个列的值.如果索引包含多个列,那么列的顺序 ...

  2. MYSQL基础02(查询)

    查询是很大的一块,所以这里我只会写mysql的特点,就我目前使用的情况,MYSQL对标准SQL是比较支持,如果是新手的话,建议去w3school 学习标准SQL. 1.DUAL DUAL是一个虚拟表, ...

  3. MySQL高级02

    索引简介 索引(Index)是帮助MySQL高效获取数据的数据结构.可以得到索引的本质:索引是数据结构.你可以简单理解为“排好序的快速查找数据结构”. 在数据之外,数据库系统还维护着满足特定查找算法的 ...

  4. Datawhale MySQL 训练营 Task6 实战项目

    作业 项目十:行程和用户(难度:困难) Trips 表中存所有出租车的行程信息.每段行程有唯一键 Id,Client_Id 和 Driver_Id 是 Users 表中 Users_Id 的外键.St ...

  5. Datawhale MySQL 训练营 Task5

    数据导入导出 导入table http://www.runoob.com/mysql/mysql-database-import.html 导出table http://www.runoob.com/ ...

  6. Datawhale MySQL 训练营 Task4 表联结

    学习内容 MySQL别名 列别名,将查询或者筛选出来列用AS 命名,如果有空格则需要引号 '' SELECT xxx AS xxxx FROM WHERE GROUP BY HAVING 表别名, 把 ...

  7. Datawhale MySQL 训练营 Task3 表操作

    目录 学习内容 1.MySQL 表数据类型 2. 用SQL语句创建表 3. 用SQL语句向表中添加数据 4. 用SQL语句删除表 5. 用SQL语句修改表 作业 参考链接 学习内容 1.MySQL 表 ...

  8. Datawhale MySQL 训练营 Task2 查询语句

    目录 MySQL 管理 MySQL 用户管理 参考 数据库管理 SQ查询语句 1. 导入示例数据库,教程 MySQL导入示例数据库 2. 查询语句 SELECT 3. 筛选语句 WHERE ,过滤 4 ...

  9. Datawhale MySQL 训练营 Task1:MySQL 安装与数据库基础

    安装 平台 Windows X64; MySQL: 直接去 MySQL 官网 下载:点击即可安装:安装过程中可能会要求 python3.7; 可以去安装一个 python3.7; 可视化工具:Navi ...

随机推荐

  1. 提高mapreduce性能的七点建议

    Cloudera提供给客户的服务内容之一就是调整和优化MapReduce job执行性能.MapReduce和HDFS组成一个复杂的分布式系统,并且它们运行着各式各样用户的代码,这样导致没有一个快速有 ...

  2. 关于ProjectServer定制化项目中心页面

    ProjectServer界面很多客户接受不了,随便用户可以根据自己需要展示页面,但大多数国内用户喜欢确定的样式,我就是要这样的页面,不要个人定制. 那只有自己再做一个项目中心的webpart嵌入,对 ...

  3. Promise面试题

    题目一 const promise = new Promise((resolve, reject) => { console.log(1); resolve(); console.log(2); ...

  4. Struts-Core jar包

    密码t6mp https://pan.baidu.com/share/init?surl=E--zExzI9-VY1zaT8F9i9w

  5. 蓝牙实现对等网络连接 <GameKit/GameKit.h>

    /* 1.设置UI界面 2.引入框架 3.点击选择照片 4.连接蓝牙设备 5.实现蓝牙的代理方法 6.发送照片 */ #import "ViewController.h" #imp ...

  6. iOS之一些实用的Demo

    图像浏览及处理 FLAnimatedImage - gif播放处理的工具. CLImageEditor - 超强的图片编辑库,快速帮你实现旋转,防缩,滤镜等等一系列麻烦的事情. ios-image-f ...

  7. SQL Server中的三种Join方式

      1.测试数据准备 参考:Sql Server中的表访问方式Table Scan, Index Scan, Index Seek 这篇博客中的实验数据准备.这两篇博客使用了相同的实验数据. 2.SQ ...

  8. shell编程基础进阶

    为什么学习shell编程 shell脚本语言是实现linux/unix 系统管理机自动化运维所必备的重要工具,linux/unix系统的底层及基础应用软件的核心大部分涉及shell脚本的内容.每一个合 ...

  9. 基于webSocket的聊天室

    前言 不知大家在平时的需求中有没有遇到需要实时处理信息的情况,如站内信,订阅,聊天之类的.在这之前我们通常想到的方法一般都是采用轮训的方式每隔一定的时间向服务器发送请求从而获得最新的数据,但这样会浪费 ...

  10. Lavavel5.5源代码 - Pipeline

    <?php class Pipeline { protected $passable; protected $pipes = []; protected $method = 'handle'; ...