数据库-创建表

创建数据表

  • 指定库

'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 '山西'
    )
    
原文地址:https://www.cnblogs.com/lishi-jie/p/9849729.html