DDL语句--创建表

表是数据库存储数据的基本单位。一个表包含若干字段和记录。表的操作包含创建新表,修改表,删除表。这些操作都是数据库管理中最基本,也是最重要的操作。

具体而言,关于表的相关操作如下:

1,创建表的方法

2,表的完整性约束条件

3,查看表结构的方法

4,修改表的方法

5,删除表的方法

上面罗列的这些都会一一的整理到。OK,现在我们开始第一篇,创建表。

创建表是指在已存在的数据库中创建新表,这是建立数据库最重要的一步,是进行其他表操作的基础。MySQL中创建表通过sql语句CREATE TABLE实现,具体语法形式如下:

CREATE TABLE 表名(属性名 数据类型[完整性约束条件],
				 属性名 数据类型[完整性约束条件],
				 ......
				 属性名 数据类型);

1,‘表名’参数表示所要创建表的名称,‘属性名’参数表示表中字段的名称,‘数据类型’参数指定字段的数据类型,‘完整性约束条件’参数指定字段的某些特殊约束条件。

2,在使用CTEATE TABLE语句创建表时,首先要使用USE语句选择数据库,USE 数据库名。如果没有选择数据库,创建表时会出现‘No database selected’错误。

3,表名不能为sql语言的关键字,比如create,update,order等都不能作为表名。一个表中可以有一个或者多个属性,定义时,字母大小写均可,各属性之间用逗号隔开,最后一个属性后面不需要加逗号。

OK,现在我们来举一个例子,现在我们数据库要建立一张user表,建表语句如下:

CREATE TABLE `linkinframe`.`user` (
  `id` INT NOT NULL,
  `name` VARCHAR(5) NOT NULL,
  `age` INT UNSIGNED NOT NULL,
  PRIMARY KEY (`id`));

完整性约束条件是对字段进行限制,要求用户对该属性进行的操作符合特定的要求。如果不满足完整性约束条件,数据库系统将不执行用户的操作。说白了,数据库约束条件就是保证数据库中数据的完整性。

上图中,关于表的完整性约束有主键,外键,非空,唯一,自增,默认值。我们来一个一个整理。

  • 1,设置表的主键

主键是表的一个特殊字段,该字段能唯一的标示该表中的每条信息,主键和记录的关系如同身份证和人的关系。主键用来标示每个记录,每个记录的主键值都不同。设置表的主键值在创建表时设置表的某个字段为该表的主键。

主键的最主要目的是帮助MySQL以最快的速度查找到表中的某一条信息。主键必须满足的条件就是主键必须是唯一,非空且不重复的,表中任意两条记录的主键字段的值不能相同。当然,主键可以是单一的字段,也可以是多个字段的组合。

  • 1),单字段主键

主键是由一个字段构成时,可以直接在该字段的后面加上PRIMARY KEY来设置主键。语法规则如下:

属性名 数据类型 PRIMARY KEY

其中,‘属性名’参数表示表中字段的名称,‘数据类型’参数指定字段的数据类型。比如下面建表语句设定id为主键。

CREATE TABLE `linkinframe`.`user` (
  `id` INT PRIMARY KEY ,
  `name` VARCHAR(5) NOT NULL,
  `age` INT UNSIGNED NOT NULL);

  • 2),多字段主键

主键是由多个属性组合而成的,在属性定义完之后统一设置主键。语法规则如下:

PRIMARY KEY(属性名1,属性名2,...,属性名n)

比如下面建表语句,id和name两个字段成为主键,id和name两者的组合可以确定唯一的一条记录。

CREATE TABLE `linkinframe`.`user` (
  `id` INT ,
  `name` VARCHAR(5) NOT NULL,
  `age` INT UNSIGNED NOT NULL,
  PRIMARY KEY(id,name));

  • 2,设置表的外键

外键是表的一个特殊字段,如果字段sno是一个表A的属性,且依赖于表B的主键。那么,称表B为父表,表A为子表,sno为表A的外键。通过sno字段将父表B和子表A建立关联关系,设置表的外键值在创建表设置某个字段为外键,OK,现在我们来

整理一下外键设置的原则和外键的作用以及设置外键的方法。设置外键的原则就是必须依赖于数据库中已存在的父表的主键,外键可以为空值。

外键的作用是建立该表与其父表的关联关系。父表中删除某条信息时,子表中与之对应的信息必须有相应的改变。举个例子:

stu_id是student表的主键,stu_id是grade表的外键,当stu_id为‘123’的同学退学啦,就需要从student表中删除该学生的信息,然后在grade表中stu_id为‘123’的所有的信息也应该同时删除,这样可以保证信息的完整性。

设置外键的基本语法规则如下:

CONSTRAINT 外键别名 FOREIGN KEY(属性1.1,属性1.2,...,属性1.n) REFERENCES 表名(属性2.1,属性2.2,...,属性2.n)

其中,‘外键别名’参数是为外键的代号,‘属性1’参数列表是子表中设置的外键,‘表名’参数是指父类的名称,‘属性2’参数列表是父类的主键。

现在我们来实际操作下数据库,首先我们创建一张主表:

CREATE TABLE `linkinframe`.`user` (
  `id` INT NOT NULL,
  `name` VARCHAR(5) NOT NULL,
  `age` INT UNSIGNED NOT NULL,
  PRIMARY KEY (`id`));

然后现在我们为上面的user表创建一张从表,建表语句如下:

CREATE TABLE `linkinframe`.`address` (
  `id` INT NOT NULL,
  `user_id` INT NULL,
  `address_name` VARCHAR(45) NULL,
  PRIMARY KEY (`id`),
  INDEX `user_id_idx` (`user_id` ASC),
  CONSTRAINT `user_id`
    FOREIGN KEY (`user_id`)
    REFERENCES `linkinframe`.`user` (`id`));

关于上面外键建表语句解释如下:首先user为主表,id是该表主键,然后address是从表,id是该表主键,user_id是该表外键,然后这里我也起名user_id为外键的别名,然后该外键依赖于主表的id字段。

注意:子表的外键关联的必须是父类的主键,而且,数据类型必须一致。比如,两者都是int类型,或者都是char类型,如果不满足这样的要求,在创建子表时,就会出现‘Can‘t create tale’的错误提示。

  • 3,设置表的非空约束

非空约束是指字段的值不能为空值,非空约束将保证所有记录中该字段都有值。如果用户新插入的记录中,该字段为空值,则数据库系统会报错。设置表的非空约束是指在创建表时为表的某些特殊字段加上NOT NULL约束条件。

设置非空约束的基本语法规则如下:

属性名 数据类型 NOT NULL 

比如下面的建表语句:

CREATE TABLE `linkinframe`.`user` (
  `id` INT NOT NULL,
  `name` VARCHAR(5) NOT NULL,
  `age` INT UNSIGNED NOT NULL,
  PRIMARY KEY (`id`));

这里设置了user表所有的字段,id,name,age都是非空。

  • 4,设置表的唯一性约束

唯一性是指所有记录中该字段的值不能重复出现,设置表的唯一性约束是指在创建表时,为表的某些特殊字段加上UNIQUE约束条件。

唯一性约束将保证所有记录中该字段的值不能重复出现。设置唯一性约束的基本语法规则如下:

属性名 数据类型 UNIQUE

这里举一个例子,如果一个表中一个字符串字段huhu设置了唯一约束,现在一条记录中该字段为‘0001’,那么该表中就不能出现另一条记录的huhu字段也为‘0001’。

  • 5,设置表的属性值自动增加

AUTO_INCREMENT是MySQL数据库中一个特殊的约束条件。其主要用于为表中插入的新的记录自动生成唯一的ID。一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须为主键的一部分。

AUTO_INCREMENT约束的字段可以是任何整数类型(tinyint,smallint,int,bigint)等,默认情况下,该字段的值从1开始自增。

设置属性值字段增加的基本语法规则如下:

属性名 数据类型 AUTO_INCREMENT

比如下面的建表语句:

CREATE TABLE `linkinframe`.`user` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL,
  PRIMARY KEY (`id`));

该建表语句创建了一张user表,其中id为其主键,name为一个普通字段。我们设置id为AUTO_INCREMENT,没插入一条新记录,id的值会自动增加。

1,在插入记录时,默认的情况下自增字段的值从1开始自增,然后以后每增加一条记录,该记录的id值都会在前一条记录的基础上加1。

2,如果第一条记录设置了该字的初值,那么新增加的记录就从初值开始自增。

3,加上AUTO_INCREMENT约束条件,那么字段的每个值都是自动增加的。因此,这个字段不可能出现相同的值。通常情况下,AUTO_INCREMENT都是作为ID字段的约束条件,而且将ID字段作为表的主键。

  • 6,设置表的属性的默认值

在创建表时可以指定表中字段的默认值。如果插入一条新的记录时没有为这个字段赋值,那么数据库系统会自动为这个字段插入默认值。

默认值是通过DEFAULT关键字来设置的。如果没有使用default关键字指定字段的默认值,也没有指定字段为非空,那么字段的默认值为空(NULL)。

设置默认值的基本语法规则如下:

数据名 数据类型 DAFAULT 默认值

OK,关于创建表我已经详细的整理完了。这里我来写一个比较全的建表语句包含上面整理的各个字段完整性约束。

CREATE TABLE `linkinframe`.`user` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(5) NOT NULL,
  `card_id` VARCHAR(20) NULL,
  `age` INT NULL DEFAULT 25,
  PRIMARY KEY (`id`),
  UNIQUE INDEX `age_UNIQUE` (`card_id` ASC));

上面的建表语句设置id为主键,自增,设置name属性非空,设置age属性唯一,设置age的默认值25,插入数据时候如果没有为age设置,则取值默认的25。

时间: 2024-12-21 06:47:37

DDL语句--创建表的相关文章

5-04用Sql语句创建表

用Sql语句创建表的基本语法: USE E_Market--指向当前所操作的数据库 GO CREATE TABLE CommoditySort--创建表的名字 { sortID int IDENTITY(1,1) NOT NULL,类别编号 sordName varchar(50) NOT NULL --类别名称 } GO

Access sql语句创建表及字段类型(转)

http://www.cnblogs.com/hnyei/archive/2012/02/23/2364812.html 创建一张空表: Sql="Create TABLE [表名]" 创建一张有字段的表: Sql="Create TABLE [表名]([字段名1] MEMO NOT NULL, [字段名2] MEMO, [字段名3] COUNTER NOT NULL, [字段名4] DATETIME, [字段名5] TEXT(200), [字段名6] TEXT(200))

Navicat for MySQL界面下如何用SQL语句创建表?

Navicat for MySQL界面下如何用SQL语句创建表?下面小编就告诉你.首先打开 Navicat,选择一个数据库,点击"查询",在右侧点击"创建查询",输入SQL语句,点击"执行"就可以了,示例SQL: CREATE TABLE `test`.`users` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `age` int(10) DEF

oracle 语句创建表空间、用户、授权

/*分为四步 */ /*第1步:创建临时表空间 */ create temporary tablespace yuhang_temp tempfile 'D:\oracledata\yuhang_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; /*第2步:创建数据表空间 */ create tablespace yuhang_data logging datafile 'D:\or

SQL语句创建表空间

--创建表空间xxxcreate tablespace xxxloggingdatafile 'D:\oracle\product\10.2.0\oradata\orcl\xxx.ora'size 128mautoextend onnext 8m maxsize 512mextent management local;指定权限:grant connect,resource to dyds2010 SQL语句创建表空间

【转】用sql语句创建表的时候给列指定说明(描述)

用sql语句创建表的时候,如何给列指定说明.主要用到sp_addextendedproperty这个存储过程. 语法   sp_addextendedproperty     [ @name = ] { 'property_name' }     [ , [ @value = ] { 'value' }         [ , [ @level0type = ] { 'level0_object_type' }                     , [ @level0name = ] {

SQL 基础之DDL语句创建和管理表(十四)

数据库对象 Object 描述 表 基本的数据存储集合,由行和列组成 View 从一张表或多张表中抽出的 逻辑上相关的数据集合 序列 生成规律的数值 index 索引 提高查询性能 Synonym 别名 给对象起的别名 表名和列名注意事项: 必须以字母开头 必须在 1–30 个字符之间 必须只能包含 A–Z, a–z, 0–9, _, $, 和 # 必须不能和用户定义的其他对象重名 必须不能是Oracle的保留字 CREATE TABLE  语句 必须具有: – CREATE TABLE 权限

SQL语句创建数据库,SQL语句删除数据库,SQL语句创建表,SQL语句删除表,SQL语句添加约束,SQL语句删除约束

创建数据库: 1 CREATE DATABASE Test --要创建的数据库名称 2 ON PRIMARY 3 ( 4 --数据库文件的具体描述 5 NAME='Test_data', --主数据文件的逻辑名称 6 FILENAME='E:\project\Test_data.mdf', --主数据文件的物理名称 7 SIZE=5MB, --主数据文件的初始大小 8 MAXSIZE=100MB, --主数据文件的增长的最大值 9 FILEGROWTH=15% --主数据文件的增长率 10 )

DDL语句--修改表

修改表是指修改数据库中已经存在的表的定义.修改表比重新定义表简单,不需要重新加载数据,也不会影响正在进行的服务. MySQL中通过ALTER TABLE语句来修改表,修改表包括修改表名,修改字段数据类型,修改字段名,增加字段,删除字段,修改字段的排列位置,更改默认存储引擎和删除表的外键约束等. OK,这篇博客会详细的整理到上面的几种修改表的方式.现在我们开始. 1,修改表名 表名可以在一个数据库中唯一的确定一张表.数据库系统通过表名来区分不同的表.注意的是,数据库中的表是唯一的,数据库中不可能存