zoukankan      html  css  js  c++  java
  • MySQL-数据表

    MySQL-数据表

    MySQL-CREATE TABLE创建表

    要在数据库中创建一个新表,可以使用MySQL CREATE TABLE语句。

    CREATE TABLE [IF NOT EXISTS] table_name(
            column_list                     #在column_list部分指定表的列表。
    ) engine=table_type;

    
    
    需要为engine子句中的表指定存储引擎。可以使用任何存储引擎,如:InnoDBMyISAMHEAPEXAMPLECSV
    ARCHIVEMERGEFEDERATEDNDBCLUSTER。如果不明确声明存储引擎,MySQL将默认使用InnoDB。

    MySQL-CREATE TABLE语句中为表定义列

    MySQL-CREATE TABLE语句中为表定义列语句:

    column_name data_type[size] [NOT NULL|NULL] [DEFAULT value] 
    [AUTO_INCREMENT]

    以上语法中最重要的组成部分是:

    1.column_name指定列的名称。每列具有特定数据类型和大小,例如:VARCHAR(255)

    2.NOT NULLNULL表示该列是否接受NULL值。

    3.DEFAULT值用于指定列的默认值。

    4.AUTO_INCREMENT指示每当将新行插入到表中时,列的值会自动增加。每个表都有一个且只有一个AUTO_INCREMENT列。

    如果要将表的特定列设置为主键,则使用以下语法:

    PRIMARY KEY (col1,col2,...)

    数据表创建实例:

    使用CREATE TABLE语句创建这个tasks表
    
    CREATE TABLE IF NOT EXISTS tasks (
      task_id INT(11) NOT NULL AUTO_INCREMENT,
      subject VARCHAR(45) DEFAULT NULL,
      start_date DATE DEFAULT NULL,
      end_date DATE DEFAULT NULL,
      description VARCHAR(200) DEFAULT NULL,
      PRIMARY KEY (task_id)
    ) ENGINE=InnoDB;

    MySQL-数据表结构修改

    MySQL-ALTER TABLE语句

    功能介绍:可以使用ALTER TABLE语句来更改现有表的结构。 ALTER TABLE语句可用来添加列删除列,更改列的数据类型添加主键重命名表等等

    ALTER TABLE语句语法:
    
    ALTER TABLE table_name action1[,action2,…]

     要更改现有表的结构:

     首先,在ALTER TABLE子句之后指定要更改的表名称。

     其次,列出一组要应用于该表的操作。操作可以是添加新列,添加主键,重命名表等任何操作。ALTER TABLE语句允许在单个ALTER TABLE语句中应用多个操作,每个操作由逗号()分隔。

    创建一个名为tasks的新表:

    DROP TABLE IF EXISTS tasks;
    
    CREATE TABLE tasks (
        task_id INT NOT NULL,
        subject VARCHAR(45) NULL,
        start_date DATE NULL,
        end_date DATE NULL,
        description VARCHAR(200) NULL,
        PRIMARY KEY (task_id),
        UNIQUE INDEX task_id_unique (task_id ASC)
    );

    使用MySQL ALTER TABLE语句来设置列的自动递增属性

    在任务表中插入新行时,task_id列的值会自动增加1。那么可以使用ALTER TABLE语句将task_id列的属性设置为AUTO_INCREMENT,如下所示:

    ALTER TABLE tasks
    CHANGE COLUMN task_id task_id INT(11) NOT NULL AUTO_INCREMENT;

    使用MySQL ALTER TABLE语句将新的列添加到表中

    由于新的业务需求,需要添加一个名为complete的新列,以便在任务表中存储每个任务的完成百分比。 在这种情况下,您可以使用ALTER TABLE将新列添加到tasks表中

    ALTER TABLE tasks 
    ADD COLUMN complete DECIMAL(2,1) NULL
    AFTER description;

    使用MySQL ALTER TABLE从表中删除列

    假设您不想将任务的描述存储在tasks表中了,并且必须将其删除。 以下语句允许您删除tasks表的description列:

    ALTER TABLE tasks
    DROP COLUMN description;

    使用MySQL ALTER TABLE语句重命名表

    ALTER TABLE tasks
    RENAME TO work_items;

     


     

    MySQL-数据表重命名

    更改一个或多个表,使用RENAME TABLE语句:

    RENAME TABLE old_table_name TO new_table_name;

    在执行RENAME TABLE语句之前,必须确保没有活动事务或锁定表

    MySQL RENAME TABLE示例

    创建一个名为hrdb的新数据库,它由两个表组成:employees 和 departments

     创建数据库 

    CREATE DATABASE IF NOT EXISTS hrdb;

    创建表

    USE hrdb;
    
    CREATE TABLE departments (
        department_id INT AUTO_INCREMENT PRIMARY KEY,
        dept_name VARCHAR(100)
    );
    
    CREATE TABLE employees (
        id int AUTO_INCREMENT primary key,
        first_name varchar(50) not null,
        last_name varchar(50) not null,
        department_id int not null,
        FOREIGN KEY (department_id)
            REFERENCES departments (department_id)
    );

    将样本数据插入到 employees 和 departments 表中

    -- 插入数据到 departments 表中
    INSERT INTO departments(dept_name)
    VALUES('Sales'),('Markting'),('Finance'),('Accounting'),('Warehouses'),('Production');
    
    -- 插入数据到 employees 表中
    INSERT INTO employees(first_name,last_name,department_id) 
    VALUES('John','Doe',1),
     ('Bush','Lily',2),
     ('David','Dave',3),
     ('Mary','Jane',4),
     ('Jonatha','Josh',5),
     ('Mateo','More',1);

    重命名视图引用的表

    基于employeesdepartments表创建一个名为v_employee_info的视图

    CREATE VIEW v_employee_info as
        SELECT 
            id, first_name, last_name, dept_name
        from
            employees
                inner join
            departments USING (department_id);

    v_employee_info视图中的employees表重命名为people,并查询视图的数据。

    RENAME TABLE employees TO people;
    
    -- 查询数据
    SELECT 
        *
    FROM
        v_employee_info;

    使用CHECK TABLE语句来检查v_employee_info视图的状态

    CHECK TABLE v_employee_info;
    mysql> CHECK TABLE v_employee_info;

    需要手动更改v_employee_info视图,以便它引用people表而不是employees表。


    重命名由存储过程引用的表

    如果要重命名由存储过程引用的表,则必须像对视图一样进行手动调整。

    首先,将people表重命名为employees表。

    RENAME TABLE people TO employees;

    创建一个名为get_employee的新存储过程,该过程引用employees表。

    DELIMITER $$
    
    CREATE PROCEDURE get_employee(IN p_id INT)
    
    BEGIN
     SELECT first_name
     ,last_name
     ,dept_name
     FROM employees
     INNER JOIN departments using (department_id)
     WHERE id = p_id;
    END $$
    
    DELIMITER;

    接下来,执行get_employee存储过程从employees表来获取id1的员工的数据

    CALL get_employee(1);

    我们再次将employees表重新命名为people表。

    RENAME TABLE employees TO people;

    最后,调用get_employee存储过程来获取id2的员工信息:

    CALL get_employee(2);

    MySQL会返回错误消息,须手动将存储过程中的employees表更改为people表。


    重命名引用外键的表

    departments表使用department_id列链接到employees表。 employees表中的department_id列是引用departments表的department_id列作为外键

    如果重命名departments表,那么指向departments表的所有外键都不会被自动更新。 在这种情况下,我们必须手动删除并重新创建外键。

    RENAME TABLE departments TO depts;

    删除ID1的部门,由于外键约束,people表中的所有行也应删除。 但是,我们将department表重命名为depts表,而不会手动更新外键,

    DELETE FROM depts 
    WHERE
        department_id = 1;

     MySQL会返回错误


    重命名多个表

    使用RENAME TABLE语句来一次重命名多个表

    RENAME TABLE old_table_name_1 TO new_table_name_2,
                 old_table_name_2 TO new_table_name_2,...

    以下语句将 people 和 depts 重命名为 employees 和 departments 表:

    RENAME TABLE depts TO departments,
                 people TO employees;

    使用ALTER TABLE语句重命名表

    ALTER TABLE old_table_name
    RENAME TO new_table_name;

    重命名临时表示例

    第一步,创建一个临时表,其中包含来自employees表的last_name列的所有唯一的姓氏:

    CREATE TEMPORARY TABLE lastnames
    SELECT DISTINCT last_name from employees;

    第二步,使用RENAME TABLE重命名姓氏表

    RENAME TABLE lastnames TO unique_lastnames;

    MySQL会返回错误消息

    第三步,使用ALTER TABLE语句来重命名姓氏表。

    ALTER TABLE lastnames
    RENAME TO unique_lastnames;
     
  • 相关阅读:
    delphi10.3.1不支持.net 5
    FIREDAC返回多结果集
    咏南中间件多种部署方式
    ISAPI多进程设置
    咏南ISAPI中间件
    datasnap isapi程序iis设置
    mormot支持TCP/IP
    咏南中间件支持JWT TOKEN
    基于Token的身份认证 与 基于服务器的身份认证
    delphi开源JWT
  • 原文地址:https://www.cnblogs.com/loser1949/p/8159715.html
Copyright © 2011-2022 走看看