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

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

INDEX

  • 创建多列构成的主键
  • 自动增长的规定
  • 查看上一次插入的自增 id
  • 尽量用默认值替代 NULL
  • 外键不可以跨引擎
  • 添加字段与删除字段 & 定义外键
  • 复杂表结构的修改
  • 删除表与修改表名

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

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;

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;

原文地址:https://www.cnblogs.com/xkxf/p/8904004.html

时间: 2024-11-05 21:59:33

MySQL Crash Course #13# Chapter 21. Creating and Manipulating Tables的相关文章

MySQL Crash Course #16# Chapter 24. Using Cursors + mysql 循环

mysql中游标的使用案例详解(学习笔记)这篇讲得相当直白好懂了. 索引: cursor 基础讲解 mysql 循环 书上的整合代码 cursor 基础讲解 cursor 有点类似于 JDBC 中的 ResultSet ,允许我们在执行 SELECT 之后,一行一行地 FETCH 数据. 它只能被用在存储过程中!如果把存储过程比作函数,cursor 只能在这个函数体中(存储过程的内部)定义.打开.关闭,一旦存储过程执行完毕,它将不再存在(可以把 cursor 理解为一个局部变量). 定义一个 c

MySQL Crash Course #14# Chapter 22. Using Views

索引 视图是啥 为什么需要视图 使用视图的规则 如何使用视图 视图应用实例 别用视图更新数据! 视图是啥 理解视图的最佳方式就是看下面这个例子. SELECT cust_name, cust_contact FROM customers, orders, orderitems WHERE customers.cust_id = orders.cust_id AND orderitems.order_num = orders.order_num AND prod_id = 'TNT2'; 上面的请

C# 2012 step by step 学习笔记8 CHAPTER 9 Creating Value types with enumerations and Structures

C# 2012 step by step 学习笔记8 CHAPTER 9 Creating Value types with enumerations and Structures things about 1. Declare an enumeration type. 2. Create and use an enumeration type. 3. Declare a structure type. 4. Create and use a structure type. 5. Explain

论mysql.5.7.13架构组成之存储引擎

MySQL Server 系统架构 防伪码:默而识之,学而不厌,诲人不倦,何有于我哉! 作者:何小帅 博客URL:http://hexiaoshuai.blog.51cto.com 在前一节中我们学习了mysql的物理文件组成,接下来我们来学习mysql的逻辑模块组成. 逻辑模块组成: MySQL 逻辑结构可以看成是二层架构,第一层我们通常叫做 SQL Layer,在 MySQL 数据库系 统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断,sql解析,执行计划 优化,query ca

使用ThinkPHP开发中MySQL性能优化的最佳21条经验

使用ThinkPHP开发中MySQL性能优化的最佳21条经验讲解,目前,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过 多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询大多数的MySQ

普通用户Mysql 5.6.13 主从

Master:192.168.209.19 Slave:192.168.209.20 mysql版本:mysql5.6.13 1. 以root身份创建普通用户,如mysql,并创建mysql安装目录: # useradd mysql # passwd mysql # mkdir /mysql # chown mysql:mysql /mysql 安装依赖包: yum -y install  gcc gcc-c++ autoconf automake zlib* fiex* libxml* ncu

centos 7 + mysql 5.7.13 重置数据库的root密码

centos 7 + mysql 5.7.13重置root密码步骤: # vi /etc/my.cnf  # [mysqld]下skip-grant-tables 内容前添加# # mysql -uroot -p 连续输入enter 进入 # use mysql # update mysql.user set authentication_string=PASSWORD('redhat') where User='root'; # grant all privileges on *.*  to

Qt5官方demo解析集15——Chapter 1: Creating a New Type

本系列所有文章可以在这里查看http://blog.csdn.net/cloud_castle/article/category/2123873 前面我们说到了QML的粒子系统,它可以创造丰富多彩的粒子特效.但是更多的情况下,我们的QML界面是配合C++进行工作的:QML负责界面渲染,C++负责逻辑事务.甚至有时,我们还会利用QML来绘制C++代码中定义的可视化组件,或者使用C++代码来访问QML中对象的属性等.从这篇博文开始,我们介绍了Qt官方Demo中的"Chapter"系列,它介

mysql 5.7.13 安装配置方法图文教程(win10) (转)

http://www.jb51.net/article/87152.htm ***************************** MySQL是一款关系型数据库管理系统,是由Oracle旗下公司MySQL AB 公司开发,是在web方面最好的.最流行的关系型数据库软件应用之一,深受广大个人使用者以及中小型企业的喜爱. 方法/步骤 双击安装文件,进入安装,如图所示,点击“next”,进入下一步 在协议许可(LicenseAgreement)界面,勾选“Iacceptthelicenseterm