表创建基础

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关键字后面。
  • 实际的表定义(所有列)括在圆括号之中。
  • 各列之间用逗号分隔。
  • 每列的定义以列名(它在表中必须是唯一的)开始,后跟列的数据类型。
  • 表的主键可以在创建表时用PRIMARY KEY关键字指定整条语句由右圆括号后的分号结束。

NULL值

  • NULL值就是没有值或缺值。允许NULL值的列也允许在插入行时不给出该列的值。不允许NULL值的列不接受该列没有值的行,换句话说,在插入或更新行时,该列必须有值。

  • 每个表列或者是NULL列,或者是NOT NULL列,这种状态在创建时由表的定义规定。

  • 因此定义含有关键字NOT NULL的列,如果试图插入没有值的列,将返回错误,且插入失败。

  • 不指定NOT NULL。NULL为默认设置,如果不指定NOT NULL,则认为指定的是NULL。

  • 理解NULL:不要把NULL值与空串相混淆。NULL值是没有值,它不是空串。如果指定''(两个单引号,其间没有字符),这在NOT NULL列中是允许的。空串是一个有效的值,它不是无值。NULL值用关键字NULL而不是空串指定。

主键

  • 主键值必须唯一。即,表中的每个行必须具有唯一的主键值。如果主键使用单个列,则它的值必须唯一。如果使用多个列,则这些列的组合值必须唯一。
  • 主键和NULL值:主键为其值唯一标识表中每个行的列。主键中只能使用不允许NULL值的列。允许NULL值的列不能作为唯一标识。

AUTO_INCREMENT

  • AUTO_INCREMENT告诉MySQL,本列每当增加一行时自动增量。每次执行一个INSERT操作时,MySQL自动对该列增量(从而才有这个关键字AUTO_INCREMENT),给该列赋予下一个可用的值。这样给每个行分配一个唯一的cust_id,从而可以用作主键值。

  • 每个表只允许一个AUTO_INCREMENT列,而且它必须被索引(如,通过使它成为主键)。

  • 如何在使用AUTO_INCREMENT列时获得这个值呢?可使用last_insert_id()函数获得这个值,如下所示:

SELECT last_insert_id()
  • 此语句返回最后一个AUTO_INCREMENT值,然后可以将它用于后续的MySQL语句。

默认值

  • 如果在插入行时没有给出值,MySQL允许指定此时使用的默认值。默认值用CREATE TABLE语句的列定义中的DEFAULT关键字指定。

  • 不允许函数 与大多数DBMS不一样,MySQL不允许使用函数作为默认值,它只支持常量。

引擎类型

  MySQL与其他DBMS不一样,它具有多种引擎。它打包多个引擎,这些引擎都隐藏在MySQL服务器内,全都能执行CREATE TABLE和SELECT等命令。

  当然,你完全可以忽略这些数据库引擎。如果省略ENGINE=语句,则使用默认引擎(很可能是MyISAM),多数SQL语句都会默认使用它。但并不是所有语句都默认使用它。

  • InnoDB是一个可靠的事务处理引擎,它不支持全文本搜索;
  • MEMORY在功能等同于MyISAM,但由于数据存储在内存(不是磁盘)中,速度很快(特别适合于临时表);
  • MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。

  外键不能跨引擎:混用引擎类型有一个大缺陷。外键(用于强制实施引用完整性)不能跨引擎,即使用一个引擎的表不能引用具有使用不同引擎的表的外键。

更新表

  为更新表定义,可使用ALTER TABLE语句,为了使用ALTER TABLE更改表结构,必须给出下面的信息:

  • 在ALTER TABLE之后给出要更改的表名(该表必须存在,否则将出错);
  • 所做更改的列表。

这条语句给vendors表增加一个名为vend_phone的列,必须明确其数据类型。

ALTER TABLE vendors ADD vend_phone CHAR(20);
  • 删除刚刚添加的列,可以这样做
ALTER TABLE vendors DROP COLUMN vend_phone;
  • ALTER TABLE的一种常见用途是定义外键:
ALTER TABLE orderitems
ADD CONSTRAINT fk_orderitems_irdersFOREIGN KEY (order_num)
REFERENCES orders (order_num);

删除表

DROP TABLE customers2;
  • 这条语句删除customers 2表(假设它存在)。删除表没有确认,也不能撤销,执行这条语句将永久删除该表。

重命名表

  • RENAME TABLE所做的仅是重命名一个表。可以使用下面的语句对多个表重命名:
RENAME TABLE backup_customers TO customers,
backup_vendors TO vendors,
backup_products TO products;

MySQL创建和操纵表的更多相关文章

  1. Mysql 创建及导入表

    连接数据库 打开命令行输入mysql -uroot -p 进行数据库连接 创建并访问数据库 CREATE DATABASE test: //创建数据库test SHOW DATABSAES; //查看 ...

  2. mysql创建和删除表

    创建表 简单的方式 CREATE TABLE person ( ), name ), birthday DATE ); 或者是 CREATE TABLE IF NOT EXISTS person ( ...

  3. MYSQL 创建数据库以及表

    创建数据库,表 创建一个数据库,再在数据库下创建一个或多个表,不难,记不住的同学可以直接copy,慢慢的用会即刻,懂的同学请看代码,没有太多基础的同学,除了看代码,请看最下方的知识点 创建数据库: C ...

  4. mysql 创建相同的表结构

    前言: 项目中用到分表存储,需要创建100张表,每个表的结构相同,原始操作,一个个复制粘贴,修改名字.今天DBA给了意见 create table a like b 将b的表结构和索引都复制  cre ...

  5. SQL必知必会——创建和操纵表(十七)

    1.创建表 一般有两种创建表的方法: 多数DBMS都具有交互式创建和管理数据库表的工具表也可以直接用SQL语句操纵1.1.表创建基础 CREATE TABLE products( prod_id,CH ...

  6. MySQL创建/删除/清空表,添加/删除字段

    创建表: create table tablename (column_name column_type); create table table_name( id int not null auto ...

  7. PHP MySQL 创建数据库和表 之 Create

    创建数据库 CREATE DATABASE 语句用于在 MySQL 中创建数据库. 语法 CREATE DATABASE database_name 为了让 PHP 执行上面的语句,我们必须使用 my ...

  8. 数据库之mysql篇(3)—— mysql创建/修改数据表/操作表数据

    创建数据表:create table 数据表名 1.创建表规范 create table 表名( 列名   数据类型    是否为空   自动排序/默认值  主键/外键/唯一键, 列名   数据类型 ...

  9. SQL 必知必会·笔记<15>创建和操纵表

    创建表的两种办法: 使用DBMS 提供的交互式创建和管理数据库表的工具: 直接用SQL 语句创建. 表创建基础 创建表示例: CREATE TABLE Products ( prod_id ) NOT ...

  10. 16.创建与操纵表--SQL

    一.新建表 利用CREA TE TA BLE创建表,必须给出下列信息: 新表的名字,在关键字CREA TE TA BLE之后给出: 表列的名字和定义,用逗号分隔: 有的DBMS还要求指定表的位置. C ...

随机推荐

  1. weblogic CVE-2024-20931分析

    weblogic 12.2.1.4.0安装 我的环境:ubuntu 22.04 + weblogic 12.2.1.4.0 + jdk8(注:weblogic不支持OpenJDK) jdk下载安装:h ...

  2. 对于Celery原理的简单理解

    参考博客: https://www.cnblogs.com/forward-wang/p/5970806.html https://blog.csdn.net/cuomer/article/detai ...

  3. iOS的Runtime知识点繁杂难啃,真的理解它的思想,你就豁然开朗了

    一.Runtime 1.概念: 概念:Runtime是Objective-c语言动态的核心,即运行时.在面向对象的基础上增加了动态运行,达到很多在编译时确定方法推迟到了运行时,从而达到动态修改.确定. ...

  4. 吐血分享一套iOS底层面试题,真心想帮你!!!

    一 选择题(单选/多选) 1. 在LP64下,一个指针的有多少个字节 A: 4 B: 8 C: 16 D: 64 答案B解析: 1个指针8字节 2. 一个实例对象的内存结构存在哪些元素 A:成员变量 ...

  5. 【Azure 应用服务】收集App Service 关于Availability Zone, Health check 以及 Traffic Manager的文档,并了解高可用(HA)和灾备(DR)

    问题描述 收集App Service 关于Availability Zone, Health check 以及 Traffic Manager的文档,并了解高可用(HA)和灾备(DR)的具体办法 问题 ...

  6. 【Azure 存储服务】App Service 访问开启防火墙的存储账号时遇见 403 (This request is not authorized to perform this operation.)

    问题描述 需要 App Service 访问开启防火墙的存储账号.存储账号中设置为允许选中的VNET访问,同时允许了信任的Azure服务的访问,但是仍然报错 "403 (This reque ...

  7. Glide源码解析四(解码和转码)

    本文基于Glide 4.11.0 Glide加载过程有一个解码过程,比如将url加载为inputStream后,要将inputStream解码为Bitmap. 从Glide源码解析一我们大致知道了Gl ...

  8. [C++逆向] 7 变量在内存中的位置和访问方式

    目录 全局变量和局部变量的区别 局部静态变量 有意思的 堆变量 变量类型 作用域 可访问 全局变量 进程作用域 整个进程可访问 静态变量 文件作用域 当前代码文件可访问 局部变量 函数作用域 函数内可 ...

  9. centos7通过配置hosts.allow和hosts.deny限制登陆

    etc/hosts.allow和/etc/hosts.deny两个文件是控制远程访问设置的,通过他可以允许或者拒绝某个ip或者ip段的客户访问linux的某项服务. 我们通常只对管理员开放SSH登录, ...

  10. MYSQL中正则表达式检索数据库

    1.MySQL中使用通配符检索数据库,之外还可以使用正则表达式来检索数据. 使用通配符   '_'  和   '%'的区别如下,   使用通配符的技巧:一般的来说 通配符可以处理数据,但是消耗内存较大 ...