• MySQL Crash Course #13# Chapter 21. Creating and Manipulating Tables


    之前 manipulate 表里的数据,现在则是 manipulate 表本身。

    INDEX

    非常工整的 。 。模范脚本:

    CREATE TABLE customers
    (
      cust_id      int       NOT NULL AUTO_INCREMENT,
      cust_name    char(50)  NOT NULL ,
      cust_address char(50)  NULL ,
      cust_city    char(50)  NULL ,
      cust_state   char(5)   NULL ,
      cust_zip     char(10)  NULL ,
      cust_country char(50)  NULL ,
      cust_contact char(50)  NULL ,
      cust_email   char(255) NULL ,
      PRIMARY KEY (cust_id)
    ) ENGINE=InnoDB;

    但是官方文档里长这个样子:

    CREATE TABLE t1 (
        year_col  INT,
        some_data INT
    )

    To create a primary key made up of multiple columns

    Simply specify the column names as a comma delimited list, as seen in this example:

    CREATE TABLE orderitems
    (
      order_num  int          NOT NULL ,
      order_item int          NOT NULL ,
      prod_id    char(10)     NOT NULL ,
      quantity   int          NOT NULL ,
      item_price decimal(8,2) NOT NULL ,
      PRIMARY KEY (order_num, order_item)
    ) ENGINE=InnoDB;

    自动增长的规定

    CREATE TABLE `manga` (
      `manga_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '漫画id',
      `manga_name` varchar(40) NOT NULL COMMENT '漫画名字',
      `manga_discription` varchar(120) DEFAULT NULL COMMENT '漫画描述',
      `manga_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '漫画描述',
      PRIMARY KEY (`manga_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1012 DEFAULT CHARSET=utf8 COMMENT='漫画表'  

    每个表只允许有一个自增列,并且它必须被索引(例如,把它设置为主键)

    查看上一次插入的自增 id ,

    必须是自增的!自定义插入的不算!

    mysql> INSERT INTO manga
        -> (manga_name) VALUES ('what');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> SELECT last_insert_id();
    +------------------+
    | last_insert_id() |
    +------------------+
    |             1012 |
    +------------------+
    1 row in set (0.00 sec)

    Using DEFAULT Instead of NULL Values

    Many database developers use DEFAULT values instead of NULL columns, especially in columns that will be used in calculations or data groupings.

    Foreign Keys Can't Span Engines 

    There is one big downside to mixing engine types. Foreign keys (used to enforce referential integrity, as explained in Chapter 1, "Understanding SQL") cannot span engines. That is, a table using one engine cannot have a foreign key referring to a table that uses another engine.

     添加字段与删除字段 & 定义外键

    ALTER TABLE vendors
    ADD vend_phone CHAR(20);
    ALTER TABLE Vendors
    DROP COLUMN vend_phone;

    修改表这一操作经常被用来定义外键:

    ALTER TABLE orderitems
    ADD CONSTRAINT fk_orderitems_orders
    FOREIGN KEY (order_num) REFERENCES orders (order_num);
    ALTER TABLE orderitems
    ADD CONSTRAINT fk_orderitems_products FOREIGN KEY (prod_id)
    REFERENCES products (prod_id);
    
    ALTER TABLE orders
    ADD CONSTRAINT fk_orders_customers FOREIGN KEY (cust_id)
    REFERENCES customers (cust_id);
    
    ALTER TABLE products
    ADD CONSTRAINT fk_products_vendors
    FOREIGN KEY (vend_id) REFERENCES vendors (vend_id);

    语法:ALTER TABLE table_name ADD CONSTRAINT fk_id FOREIGN KEY (外键字段名) REFERENCES 外表表明(外表中对应的主键字段名);

    FK_ID 是外键的名称。更多外键相关的内容请参考 外键约束

     复杂表结构的修改

    Complex table structure changes usually require a manual move process involving these steps:

    1. Create a new table with the new column layout.
    2. Use the INSERT SELECT statement (see Chapter 19, "Inserting Data," for details of this statement) to copy the data from the old table to the new table. Use conversion functions and calculated fields, if needed.
    3. Verify that the new table contains the desired data.
    4. Rename the old table (or delete it, if you are really brave).
    5. Rename the new table with the name previously used by the old table.
    6. Re-create any triggers, stored procedures, indexes, and foreign keys as needed.

     删除表与修改表名

    DROP TABLE customers2;
    RENAME TABLE backup_customers TO customers,
                 backup_vendors TO vendors,
                 backup_products TO products;
  • 相关阅读:
    在mysql中,DATE_FORMAT(date, format) 函数根据format字符串格式化date值。
    FTPClient下载文件遇到的坑
    FTP链接的主被动模式:500 Illegal PORT command的问题
    Shell脚本入门
    Ubuntu18.04出现启动紫屏卡死不弹登录框问题
    Linux如何关闭命令行正在执行的程序
    VMWare14Pro及Ubuntu18.04安装Linux
    Ubuntu虚拟机下Linux安装及安装后基本配置设置
    Ubuntu 18.04 软件源修改成国内源(文件或界面形式)
    VMware虚拟机删除已经安装的linux操作系统
  • 原文地址:https://www.cnblogs.com/xkxf/p/8904004.html
Copyright © 2020-2023  润新知