• 数据库-创建表


    创建数据表

    • 指定库

    'USE <数据库名>'指定数据库

    • 创建表
    CREATE TABLE test_one
    (
    字段名1 数据类型 约束条件(是否为空) 默认值,
    字段名1 数据类型 约束条件 默认值
    )
    

    注意

    要创建的表的名称,不区分大小写,不能使用SQL语言中的关键字,如DROP/ALTER/INSERT等

    数据表中每一个列的名称和数据类型,要用逗号隔开,直到最后一个

    例:创建如下员工表

    字段名称 |数据类型 |备注
    --- | --- | --- | ---
    id |INT(11) |员工编号
    name |VARCHAR(25) |员工名称
    deptId |INT(11) |所在部门编号
    salary |FLOAT |工资

    • 创建数据库 test_db
    CREATE DATABASE test_db;
    
    [SQL]CREATE DATABASE test_db;
    受影响的行: 1
    时间: 0.020s
    
    • 选择数据库
    USE test_db;
    
    [SQL]use test_db;
    受影响的行: 0
    时间: 0.003s
    
    • 创建tb_empl表
    CREATE TABLE tb_empl
    (
    id INT(11) COMMENT '员工编号',
    name VARCHAR(25) COMMENT '员工名称',
    deptId INT(11) COMMENT '所在部门编号', 
    salary FLOAT COMMENT '工资'
    )
    
    [SQL]CREATE TABLE tb_empl
    (
    id INT(11) COMMENT '员工编号',
    name VARCHAR(25) COMMENT '员工名称',
    deptId INT(11) COMMENT '所在部门编号', 
    salary FLOAT COMMENT '工资'
    )
    
    受影响的行: 0
    时间: 0.382s
    
    • 查看数据表
    SHOW TABLES
    +-------------------+
    | Tables_in_test_db |
    +-------------------+
    | tb_empl           |
    +-------------------+
    1 row in set (0.05 sec)
    

    使用主键约束

    主键,又称主码,是表中一列或多列的组合。主键约束要求主键列的数据唯一。

    主键唯一且不允许为空

    • 单字段主键

      • 单字段主键主要由一个字段组成,SQL语句格式分为以下两种情况。

        (1)在定义列的同时指定主键

        字段名 数据类型 PRIMARY KEY (默认值)
        

        (2)在定义完所有列之后指定主键

        CREATE TABLE `db_info` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `author_uid` int(11) DEFAULT NULL COMMENT '用户id',
        `author_name` varchar(10) DEFAULT NULL COMMENT '作者名称',
        `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '标题',
        `comments_count` int(11) DEFAULT NULL COMMENT '评论数',
        `timeline_share_count` int(11) DEFAULT NULL COMMENT '推荐数',
        `likers_count` varchar(11) DEFAULT NULL COMMENT '点赞数',
        `read_count` varchar(11) DEFAULT NULL COMMENT '阅读数',
        `update_time` datetime DEFAULT NULL COMMENT '更新时间',
        `abstract` varchar(1000) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '内容简介',
        `db_type` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '发布的类型',
        `author_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '作者的空间',
        `topic_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '主题分类',
        PRIMARY KEY (`id`)
        
    • 多字段联合主键

      • 主键由多个字段联合组成

        PRIMARY KEY [字段1, 字段2, ...., 字段n]
        

        假设表中间没有主键id,为了唯一确定一个员工,可以把name、deptId联合起来作为主键,SQL语句如下:

        CREATE TABLE tb_emp4
        (
        name VARCHAR(25),
        deptId INT(11),
        salary FLOAT,
        PRIMARY KEY(name,deptId)
        )
        

    使用外键约束

    • 外键

      • 用来关联两个表之间的的连接
    • 主表

      • 对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表
    • 从表

      • 对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表

      示例代码:

      注意主表必须有主键,,数据类型必须匹配,否则无法建立。

      CREATE TABLE tb_emp5
          (
          id INT(11) PRIMARY KEY,
          name VARCHAR(25),
          deptId INT(11),
          salary FLOAT,
          constraint fk_tb_empl FOREIGN KEY(deptId) REFERENCES tb_empl(id)
          )
      
      
      [SQL]CREATE TABLE tb_emp5
      (
      id INT(11) PRIMARY KEY,
      name VARCHAR(25),
      deptId INT(11),
      salary FLOAT,
      constraint fk_tb_empl FOREIGN KEY(deptId) REFERENCES tb_empl(id)
      )
      
      受影响的行: 0
      时间: 0.246s
      

    使用非空约束

    • 非空约束指字段的值不能为空,否则数据库报错。

      字段名 数据类型 not null
      
    • 指定员工的名称不能为null,null不是空字符串

      CREATE TABLE tb_temp6
      (
      id INT(11) PRIMARY KEY,
      name VARCHAR(25) not null,
      deptId INT(11),
      salary FLOAT
      )
      
      [SQL]CREATE TABLE tb_temp6
      (
      id INT(11) PRIMARY KEY,
      name VARCHAR(25) not null,
      deptId INT(11),
      salary FLOAT
      )
      
      受影响的行: 0
      时间: 0.121s    
      
    • 插入空字符串可以

      INSERT INTO tb_temp6(id,name,deptId,salary) VALUES(1,'',26,2500)
      
      [SQL]INSERT INTO tb_temp6(id,name,deptId,salary) VALUES(1,'',26,2500)
      
      受影响的行: 1
      时间: 0.036s
      
    • 插入null

      INSERT INTO tb_temp6(id,name,deptId,salary) VALUES(1,26,2500)
      
      [SQL]INSERT INTO tb_temp6(id,name,deptId,salary) VALUES(1,26,2500)
      
      [Err] 1136 - Column count doesn't match value count at row 1
      

    使用唯一性约束

    • 唯一性约束要求该列唯一,允许为空,但只能出现一个空值,唯一唯一,只能出现一次,两次空也就重复

    • 指定唯一约束

      • 第一种方法
      字段名 数据类型 UNIQUE
      
      CREATE TABLE tb_dept2
      (
      id INT(11) PRIMARY KEY,
      name VARCHAR(22) UNIQUE,
      location VARCHAR(50)
      )
      
      • 第二种方法,末端加约束,类似主键
      CREATE TABLE tb_dept3
      (
      id INT(11) PRIMARY KEY,
      name VARCHAR(22) UNIQUE,
      location VARCHAR(50),
      UNIQUE(name)
      )
      

    UNIQUE和PRIMARY KEY区别:

    UNIQUE 唯一,允许为空 可以设置多个
    PRIMARY KEY 主键唯一不允许为空 只能有一个
    

    使用默认约束

    • 默认约束指定某列的默认值,如果不指定,就使用默认值

      CREATE TABLE tb_dept7
      (
      id INT(11) PRIMARY KEY,
      name VARCHAR(22) NOT NULL,
      location VARCHAR(50) DEFAULT '山西'
      )
      
      [SQL]CREATE TABLE tb_dept7
      (
      id INT(11) PRIMARY KEY,
      name VARCHAR(22) NOT NULL,
      location VARCHAR(50) DEFAULT '山西'
      )
      
      受影响的行: 0
      时间: 0.216s
      

    设置表的属性值自动增加

    • 一个表中只能有一个字段使用,且必须和PRIMARY KEY配合

      • 默认的自增字段id的值从1开始,每次添加一条新记录,该值自动加1
      • AUTO_INCREMENT约束的字段可以是任何整数类型(TINYINT,SMALLIN,INT,BIGINT)
      CREATE TABLE tb_dept8
      (
      id INT(11) PRIMARY KEY AUTO_INCREMENT,
      name VARCHAR(22) NOT NULL,
      location VARCHAR(50) DEFAULT '山西'
      )
      
  • 相关阅读:
    Java io 理解
    Java应用的理解
    Flyweight 享元模式
    Bridge 桥梁模式
    Decrator 装饰模式
    [CF997C]Sky Full of Stars_二项式反演_等比数列_容斥原理
    [CF1010D]Mars Over_位运算性质
    [CF991D]Bishwock_状压dp
    [Agc030B]Tree Burning_贪心
    [Cometoj#4 E]公共子序列_贪心_树状数组_动态规划
  • 原文地址:https://www.cnblogs.com/lishi-jie/p/9849729.html
Copyright © 2020-2023  润新知