• 第三章 数据表的基本操作


      数据表的基本操作

    4.1 创建数据表

    在创建完数据库之后,接下来我们就需要创建数据表。创建数据表是指在已经创建好的数据库中建立新表。创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性约束的过程。

    4.1.1  创建表的语法形式

      数据表属于数据库,在创建数据表之前,应该使用语句“USE <数据库名>” 指定操作是从哪个数据库中进行,如果没有选择数据库,会报错

    语法:

    CREATE TABLE <表名>

    字段名1, 数据类型 [列级别约束条件] [默认值]

    字段名2, 数据类型 [列级别约束条件] [默认值]

    ... ...

    ):

    例如:

    mysql> CREATE TABLE tb_emp1

        -> (

        -> id INT(11),

        -> name VARCHAR(25),

        -> deptId INT(11),

        -> salary FLOAT

        -> );

    Query OK, 0 rows affected (0.08 sec)

    mysql> SHOW TABLES;

    +----------------+

    | Tables_in_test |

    +----------------+

    | tb_emp1        |

    +----------------+

    1 row in set (0.05 sec)

    4.1.2 使用主键约束

    主键约束要求主键列的数据唯一,并且不允许为空。

    1、单字段主键

    语法:

    字段名   数据类型  PRIMARY KEY [默认值]

    例如:

    mysql> CREATE TABLE tb_emp2

        -> (

        -> id INT(11) PRIMARY KEY,

        -> name VARCHAR(25),

        -> deptID INT(11),

        -> salary FLOAT

        -> );

    Query OK, 0 rows affected (0.05 sec)

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

    语法:

    [CONSTRAINT <约束名>] PRIMARY KEY [字段名]

    例如:

    mysql> CREATE TABLE tb_emp3

        -> (

        -> id INT(11),

        -> name VARCHAR(25),

        -> deptId INT(11),

        -> salary FLOAT,

        -> PRIMARY KEY(id)

        -> );

    Query OK, 0 rows affected (0.01 sec)

    3、多字段联合主键

    语法:

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

    例如:

    mysql> CREATE TABLE tb_emp4

        -> (

        -> name VARCHAR(25),

        -> deptId INT(11),

        -> salary FLOAT,

        -> PRIMARY KEY(name,deptId)

        -> );

    Query OK, 0 rows affected (0.00 sec)

    4.1.3 使用外键约束

    外键用来在两个表数据之间建立连接,它可以是一列或者多列

    语法:

    [CONSTRAINT<外键名>] FOREIGN KEY [字段名1,字段名2...]

      REFERENCES<主表名>  主键列1[主键列2...]     

    例如:

    mysql> CREATE TABLE tb_dept1

        -> (

        -> id INT(11) PRIMARY KEY,

        -> name VARCHAR(22) NOT NULL,

        -> location VARCHAR(50)

        -> );

    Query OK, 0 rows affected (0.00 sec)

    mysql> CREATE TABLE tb_emp5

     (

     id INT(11) PRIMARY KEY,

     name VARCHAR(25), 

     deptId INT(11),

     salary FLOAT,

      CONSTRAINT fk_emp_dept1 FOREIGN KEY(deptId) REFERENCES tb_dept1(id)

     );

    Query OK, 0 rows affected (0.06 sec)

    需要有相同的 主键,俩张表可以放在一起进行查看

    4.1.4  使用非空约束

    非空约束指字段的值不能为空。

    语法:

    字段名  数据类型  not null

    例如:

    mysql> CREATE TABLE tb_emp6

        -> (

        -> id INT(11) PRIMARY KEY ,

        -> name VARCHAR(25) NOT NULL,

        -> deptId INT(11),

        -> salary FLOAT

        -> );

    Query OK, 0 rows affected (0.06 sec)

    或者

    语法:

    [CONSTRATIN <约束名>] UNIQUE <字段名>

    例如:

    mysql> CREATE TABLE tb_dept3

        -> (

        -> id INT(11) PRIMARY KEY,

        -> name VARCHAR(22),

        -> location VARCHAR(50),

        -> CONSTRAINT STH UNIQUE(name)

        -> );

    Query OK, 0 rows affected (0.00 sec)

    使用唯一性条件约束

    unique

    4.1.6  使用默认约束

    默认约束指定某列的默认值。

    语法:

    字段名  数据类型  DEFAULT 默认值

    例如:

    mysql> CREATE TABLE tb_emp7

        -> (

        -> id INT(11) PRIMARY KEY,

        -> name VARCHAR(25) NOT NULL,

        -> deptId INT(11) DEFAULT 1111,

        -> salary FLOAT,

        -> info VARCHAR(50)

        -> );

    Query OK, 0 rows affected (0.00 sec)

    4.1.7  设置表的属性值自动增加

    语法:

    字段名  数据类型  AUTO_INCREMENT

    例如:

    mysql> CREATE TABLE tb_emp8

        -> (

        -> id INT(11) PRIMARY KEY AUTO_INCREMENT,

        -> name VARCHAR(25) NOT NULL,

        -> deptId INT(11),

        -> salary FLOAT

        -> );

    Query OK, 0 rows affected (0.00 sec)

    插入数据验证:

    mysql> INSERT INTO tb_emp8(name,salary)

        -> VALUES('lucy',1000),('lura',1200),('kevin',1500);

    Query OK, 3 rows affected (0.00 sec)

    Records: 3  Duplicates: 0  Warnings: 0

    查看:

    mysql> SELECT * FROM tb_emp8;

    +----+-------+--------+--------+

    | id | name  | deptId | salary |

    +----+-------+--------+--------+

    |  1 | lucy  |   NULL |   1000 |

    |  2 | lura  |   NULL |   1200 |

    |  3 | kevin |   NULL |   1500 |

    +----+-------+--------+--------+

    3 rows in set (0.00 sec)

    4.2  查看数据表结构

    4.2.1  查看表基本结构语句DESCRIBE

    语法:

    DESCRIBE  表名;

    DESC  表名;

    例如:

    mysql> DESCRIBE tb_dept1;

    +----------+-------------+------+-----+---------+-------+

    | Field    | Type        | Null | Key | Default | Extra |

    +----------+-------------+------+-----+---------+-------+

    | id       | int(11)     | NO   | PRI | NULL    |       |

    | name     | varchar(22) | NO   |     | NULL    |       |

    | location | varchar(50) | YES  |     | NULL    |       |

    +----------+-------------+------+-----+---------+-------+

    3 rows in set (0.00 sec)

    或者

    mysql> DESC tb_dept1;

    +----------+-------------+------+-----+---------+-------+

    | Field    | Type        | Null | Key | Default | Extra |

    +----------+-------------+------+-----+---------+-------+

    | id       | int(11)     | NO   | PRI | NULL    |       |

    | name     | varchar(22) | NO   |     | NULL    |       |

    | location | varchar(50) | YES  |     | NULL    |       |

    +----------+-------------+------+-----+---------+-------+

    3 rows in set (0.00 sec)

    4.2.2  查看表详细结构语句

    语法:

    SHOW  CREATE  TABLE  <表名G>

    mysql> SHOW CREATE TABLE tb_emp1G

    *************************** 1. row ***************************

           Table: tb_emp1

    Create Table: CREATE TABLE `tb_emp1` (

      `id` int(11) DEFAULT NULL,

      `name` varchar(25) DEFAULT NULL,

      `deptId` int(11) DEFAULT NULL,

      `salary` float DEFAULT NULL

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    1 row in set (0.00 sec)

    4.3  修改数据表

    4.3.1  修改表名

    语法:

    ALTER TABLE <旧表名>  RENAME  [TO]  <新表名>.

    例如:

    mysql> SHOW TABLES;

    +----------------+

    | Tables_in_test |

    +----------------+

    | tb_dept1       |

    | tb_dept3       |

    | tb_emp1        |

    | tb_emp2        |

    | tb_emp3        |

    | tb_emp4        |

    | tb_emp5        |

    | tb_emp7        |

    | tb_emp8        |

    +----------------+

    9 rows in set (0.00 sec)

    mysql> ALTER TABLE tb_dept3 RENAME tb_deptment3;

    Query OK, 0 rows affected (0.05 sec)

    mysql> SHOW TABLES;

    +----------------+

    | Tables_in_test |

    +----------------+

    | tb_dept1       |

    | tb_deptment3   |

    | tb_emp1        |

    | tb_emp2        |

    | tb_emp3        |

    | tb_emp4        |

    | tb_emp5        |

    | tb_emp7        |

    | tb_emp8        |

    +----------------+

    9 rows in set (0.00 sec)

    4.3.2  修改字段的数据类型

    语法:

    ALTER TABLE <表名> MODIFY <字段名> <数据类型>

    例如:

    mysql> DESC tb_dept1;

    +----------+-------------+------+-----+---------+-------+

    | Field    | Type        | Null | Key | Default | Extra |

    +----------+-------------+------+-----+---------+-------+

    | id       | int(11)     | NO   | PRI | NULL    |       |

    | name     | varchar(22) | NO   |     | NULL    |       |

    | location | varchar(50) | YES  |     | NULL    |       |

    +----------+-------------+------+-----+---------+-------+

    3 rows in set (0.00 sec)

    mysql> ALTER TABLE tb_dept1 MODIFY name VARCHAR(30);

    Query OK, 0 rows affected (0.08 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> DESC tb_dept1;

    +----------+-------------+------+-----+---------+-------+

    | Field    | Type        | Null | Key | Default | Extra |

    +----------+-------------+------+-----+---------+-------+

    | id       | int(11)     | NO   | PRI | NULL    |       |

    | name     | varchar(30) | YES  |     | NULL    |       |

    | location | varchar(50) | YES  |     | NULL    |       |

    +----------+-------------+------+-----+---------+-------+

    3 rows in set (0.00 sec)

    4.3.3  修改字段名

    语法:

    ALTER TABLE <表名> CHANGE<旧字段名><新字段名> <新数据类型>

    例如:

    mysql> ALTER TABLE tb_dept1 CHANGE location loc VARCHAR(50);

    Query OK, 0 rows affected (0.10 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> DESC tb_dept1;

    +-------+-------------+------+-----+---------+-------+

    | Field | Type        | Null | Key | Default | Extra |

    +-------+-------------+------+-----+---------+-------+

    | id    | int(11)     | NO   | PRI | NULL    |       |

    | name  | varchar(30) | YES  |     | NULL    |       |

    | loc   | varchar(50) | YES  |     | NULL    |       |

    +-------+-------------+------+-----+---------+-------+

    3 rows in set (0.00 sec)

    4.3.4  添加字段

    语法:

    ALTER TABLE <表名> ADD <新字段名><数据类型> [约束条件] [FIRST|AFTER 已存在字段名]

    例如:

    mysql> DESC tb_dept1;

    +-------+-------------+------+-----+---------+-------+

    | Field | Type        | Null | Key | Default | Extra |

    +-------+-------------+------+-----+---------+-------+

    | id    | int(11)     | NO   | PRI | NULL    |       |

    | name  | varchar(30) | YES  |     | NULL    |       |

    | loc   | varchar(50) | YES  |     | NULL    |       |

    +-------+-------------+------+-----+---------+-------+

    3 rows in set (0.00 sec)

    mysql> ALTER TABLE tb_dept1 ADD column1 VARCHAR(12) not null;

    Query OK, 0 rows affected (0.02 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> DESC tb_dept1;

    +---------+-------------+------+-----+---------+-------+

    | Field   | Type        | Null | Key | Default | Extra |

    +---------+-------------+------+-----+---------+-------+

    | id      | int(11)     | NO   | PRI | NULL    |       |

    | name    | varchar(30) | YES  |     | NULL    |       |

    | loc     | varchar(50) | YES  |     | NULL    |       |

    | column1 | varchar(12) | NO   |     | NULL    |       |

    +---------+-------------+------+-----+---------+-------+

    4 rows in set (0.00 sec)

    或者

    mysql> ALTER TABLE tb_dept1 ADD column2 INT(11) FIRST;

    Query OK, 0 rows affected (0.02 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> DESC tb_dept1;

    +---------+-------------+------+-----+---------+-------+

    | Field   | Type        | Null | Key | Default | Extra |

    +---------+-------------+------+-----+---------+-------+

    | column2 | int(11)     | YES  |     | NULL    |       |

    | id      | int(11)     | NO   | PRI | NULL    |       |

    | name    | varchar(30) | YES  |     | NULL    |       |

    | loc     | varchar(50) | YES  |     | NULL    |       |

    | column1 | varchar(12) | NO   |     | NULL    |       |

    +---------+-------------+------+-----+---------+-------+

    5 rows in set (0.00 sec)

    或者

    mysql> ALTER TABLE tb_dept1 ADD column3 INT(11) AFTER name ;

    Query OK, 0 rows affected (0.09 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> DESC tb_dept1;

    +---------+-------------+------+-----+---------+-------+

    | Field   | Type        | Null | Key | Default | Extra |

    +---------+-------------+------+-----+---------+-------+

    | column2 | int(11)     | YES  |     | NULL    |       |

    | id      | int(11)     | NO   | PRI | NULL    |       |

    | name    | varchar(30) | YES  |     | NULL    |       |

    | column3 | int(11)     | YES  |     | NULL    |       |

    | loc     | varchar(50) | YES  |     | NULL    |       |

    | column1 | varchar(12) | NO   |     | NULL    |       |

    +---------+-------------+------+-----+---------+-------+

    6 rows in set (0.00 sec)

    4.3.5  删除字段

    语法:

    ALTER  TABLE  <表名>  DROP  <字段名>

    例如:

    mysql> ALTER TABLE tb_dept1 DROP column2;

    Query OK, 0 rows affected (0.03 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> DESC tb_dept1;

    +---------+-------------+------+-----+---------+-------+

    | Field   | Type        | Null | Key | Default | Extra |

    +---------+-------------+------+-----+---------+-------+

    | id      | int(11)     | NO   | PRI | NULL    |       |

    | name    | varchar(30) | YES  |     | NULL    |       |

    | column3 | int(11)     | YES  |     | NULL    |       |

    | loc     | varchar(50) | YES  |     | NULL    |       |

    | column1 | varchar(12) | NO   |     | NULL    |       |

    +---------+-------------+------+-----+---------+-------+

    5 rows in set (0.00 sec)

    4.3.6  修改字段的排列位置

    语法:

    ALTER  TABLE  <表名>  MODIFY <字段名>  <数据类型>  FIRST | AFTER <字段2>

    例如:

    mysql> ALTER TABLE tb_dept1 MODIFY column1 VARCHAR(12) FIRST;

    Query OK, 0 rows affected (0.01 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> DESC tb_dept1;

    +---------+-------------+------+-----+---------+-------+

    | Field   | Type        | Null | Key | Default | Extra |

    +---------+-------------+------+-----+---------+-------+

    | column1 | varchar(12) | YES  |     | NULL    |       |

    | id      | int(11)     | NO   | PRI | NULL    |       |

    | name    | varchar(30) | YES  |     | NULL    |       |

    | column3 | int(11)     | YES  |     | NULL    |       |

    | loc     | varchar(50) | YES  |     | NULL    |       |

    +---------+-------------+------+-----+---------+-------+

    5 rows in set (0.01 sec)

    或者

    mysql> ALTER TABLE tb_dept1 MODIFY column1 VARCHAR(12) AFTER loc;

    Query OK, 0 rows affected (0.06 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> DESC tb_dept1;

    +---------+-------------+------+-----+---------+-------+

    | Field   | Type        | Null | Key | Default | Extra |

    +---------+-------------+------+-----+---------+-------+

    | id      | int(11)     | NO   | PRI | NULL    |       |

    | name    | varchar(30) | YES  |     | NULL    |       |

    | column3 | int(11)     | YES  |     | NULL    |       |

    | loc     | varchar(50) | YES  |     | NULL    |       |

    | column1 | varchar(12) | YES  |     | NULL    |       |

    +---------+-------------+------+-----+---------+-------+

    5 rows in set (0.00 sec)

    4.3.7  更改表的存储引擎

    语法:

    ALTER TABLE <表名> ENGINE=<更改后的存储引擎>

    例如:

    mysql> SHOW CREATE TABLE tb_deptment3G

    *************************** 1. row ***************************

           Table: tb_deptment3

    Create Table: CREATE TABLE `tb_deptment3` (

      `id` int(11) NOT NULL,

      `name` varchar(22) DEFAULT NULL,

      `location` varchar(50) DEFAULT NULL,

      PRIMARY KEY (`id`),

      UNIQUE KEY `STH` (`name`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    1 row in set (0.00 sec)

    mysql> ALTER TABLE tb_deptment3 ENGINE=MyISAM;

    Query OK, 0 rows affected (0.03 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> SHOW CREATE TABLE tb_deptment3G

    *************************** 1. row ***************************

           Table: tb_deptment3

    Create Table: CREATE TABLE `tb_deptment3` (

      `id` int(11) NOT NULL,

      `name` varchar(22) DEFAULT NULL,

      `location` varchar(50) DEFAULT NULL,

      PRIMARY KEY (`id`),

      UNIQUE KEY `STH` (`name`)

    ) ENGINE=MyISAM DEFAULT CHARSET=utf8

    1 row in set (0.00 sec)

    4.3.8  删除表的外键约束

    语法:

    ALTER  TABLE  <表名>  DROP  FOREIGN  KEY  <外键约束名>

    例如:

    mysql> CREATE TABLE tb_emp9

        -> (

        -> id INT(11) PRIMARY KEY,

        -> name VARCHAR(25),

        -> deptId INT(11),

        -> salary FLOAT,

        -> CONSTRAINT fk_emp_dept FOREIGN KEY (deptId) REFERENCES tb_dept1(id)

        -> );

    Query OK, 0 rows affected (0.04 sec)

    mysql> SHOW CREATE TABLE tb_emp9G

    *************************** 1. row ***************************

           Table: tb_emp9

    Create Table: CREATE TABLE `tb_emp9` (

      `id` int(11) NOT NULL,

      `name` varchar(25) DEFAULT NULL,

      `deptId` int(11) DEFAULT NULL,

      `salary` float DEFAULT NULL,

      PRIMARY KEY (`id`),

      KEY `fk_emp_dept` (`deptId`),

      CONSTRAINT `fk_emp_dept` FOREIGN KEY (`deptId`) REFERENCES `tb_dept1` (`id`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    1 row in set (0.00 sec)

    mysql> ALTER TABLE tb_emp9 DROP FOREIGN KEY fk_emp_dept;

    Query OK, 0 rows affected (0.08 sec)

    Records: 0  Duplicates: 0  Warnings: 0

    mysql> SHOW CREATE TABLE tb_emp9G

    *************************** 1. row ***************************

           Table: tb_emp9

    Create Table: CREATE TABLE `tb_emp9` (

      `id` int(11) NOT NULL,

      `name` varchar(25) DEFAULT NULL,

      `deptId` int(11) DEFAULT NULL,

      `salary` float DEFAULT NULL,

      PRIMARY KEY (`id`),

      KEY `fk_emp_dept` (`deptId`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    1 row in set (0.00 sec)

    4.4  删除数据表

    4.4.1  删除没有被关联的表

    语法:

    DROP TABLE [IF EXISTS]1,表2...

    例如:

    mysql> DROP TABLE IF EXISTS tb_dept2;

    Query OK, 0 rows affected, 1 warning (0.00 sec)

    mysql> SHOW TABLES;

    +----------------+

    | Tables_in_test |

    +----------------+

    | tb_dept1       |

    | tb_deptment3   |

    | tb_emp1        |

    | tb_emp2        |

    | tb_emp3        |

    | tb_emp4        |

    | tb_emp5        |

    | tb_emp7        |

    | tb_emp8        |

    | tb_emp9        |

    +----------------+

    10 rows in set (0.00 sec)

  • 相关阅读:
    还需要做恰当的解读,此时你可能需要一些书:
    创业公司的架构演进史
    任务调度平台Cuckoo-Schedule
    ORACLE中死锁
    Action的模型绑定
    三次握手、四次握手、backlog
    Django框架
    扩展BootstrapTable的treegrid功能
    Identity Service
    Linux权限
  • 原文地址:https://www.cnblogs.com/bingpo-blade/p/9035349.html
Copyright © 2020-2023  润新知