MySQL创建表和约束条件(四)上

一. 创建表


上一章时,我们学习了 MySQL的数据类型, 就像Java 知道了 int,string 之后,就该学习类了, 现在,我们知道了数据类型,就该去学习表 Table了。


在创建表时,一定要在 database 里面进行创建, 既先使用 use 数据库名来选择数据库, 再进行创建, 否则会提示 “No database selected” 的错误。


创建表语句:


        create table 表名(
                列名1  数据类型  [列级别约束条件] [默认值],
                列名2  数据类型  [列级别约束条件] [默认值],
                ......
                列名n  数据类型  [列级别约束条件] [默认值],

                [表级别约束条件]
    
        );


其中 表名,列名1,列名2,列名n 就像Java 里面的变量一样,不能用关键字。 但与Java 不同的是, MySQL不区分大小写。 这一点,与HTML一样。


一.一 查询该数据库下所有的表


使用 show tables; 命令进行查询该数据库下的表。


要先使用 use 数据 库名先选择数据库。 使用 yuejl数据库。


MySQL创建表和约束条件(四)上


查询所具有的表 show tables;


MySQL创建表和约束条件(四)上


这个表 t 是上一章在测试timestamp时创建的。


一.二 创建一个简单的表 temp1


创建一个简单的表, 里面只有一个字段 name, 类型是 varchar 类型, 长度是10.

不要忘记 先 use 数据库名 来选择数据库。


按照上面的创建表的语句进行创建:


 create table t2(
    name varchar(10)
   );


MySQL创建表和约束条件(四)上


一.三 创建一个复杂的表 temp2


创建一个复杂的表,与老蝴蝶常用的User.java 类一样,具有 id(int类型),name(varchar类型),sex(varchar类型),age(int类型),description(varchar类型) 五个字段。


(创建时,要按照一定的层次进行书写,这样显的帅气。)


create table t3(
     id int(11),
     name varchar(20),
    sex varchar(10),
     age int(3),
    description varchar(100)
   );


MySQL创建表和约束条件(四)上


一.四 展示所有的表


用 show tables; 命令进行展示


MySQL创建表和约束条件(四)上


刚才的两个表 t2,t3 放置到这里面了。


一.五 创建表时常见错误


1 . 表名已经存在, 会报 表已经存在的错误


MySQL创建表和约束条件(四)上


2 . 列名最后一个 写添加了 , 号, 报错。


MySQL创建表和约束条件(四)上


3 . 列与列之间,没有加 ,号报错


MySQL创建表和约束条件(四)上


要想 用sql语句创建表时,不报错,只有多练,多写。 前期学习者建议用sql去创建表,不建议使用数据库连接工具去创建表。


二. 约束条件


二.一 约束条件的由来


我们在创建表的命令时, 用这么两个东西, 列级别约束条件和表级别约束条件。 约束条件是干什么用的呢? 用什么作用效果呢?


数据库是存储,管理和操作数据的的仓库, 而表是真正存储数据的, 更准确的说,所有的数据都是放置在表里面的。 我们希望在存储数据之前,就希望能对数据进行一下验证, 就像 Web网站里面的前端验证和后端数据验证, 登录过滤器,权限过滤器一样, 使正确的数据才能够正常的插入,使错误的数据不能够正常插入,提示报错, 使表有个自我检查的功能。 数据库设计者们发现有这么几个常用的小验证,小约束:


1 . 这个列上面的属性值 必须要存在。 这就是非空约束


2 . 这个列上面的属性值必须要唯一,不能重复。 这就是唯一约束


3 . 这个列或者这两个列可以唯一确定这一行,这一行能够通过这个列或者这两列与 其他的行区别开来。 这就是主键约束


4 . 这个列上的值如果没有手动填充值,数据库表默认提供一下,如性别,没有填写,默认是男。 这就是默认值约束


5 . 这个列的值是往上增加的,并且与它上一行的值有关系。 如 num次数, 它上一行的值是1, 它这一行的值是2, 它下一行的值是 3 ,下下一行的值是4。 希望这个1,2,3,4 是表自己递增的, 并不是手动插入的。 这就是自增约束。


6 . 这个列上的值,一定来源于其他表中的值,并不是凭空出现的。发生在两个表之间。 如员工的部门属性的值,一定来源于部门表中的值。 这就是外键约束


7 . 这个列上的值,只能是规定好的值,不能是其他以外的值。 如性别, 只能是男或者女。 手动添加其他值,包括 保密,未知,太监,人妖 之类的,都不能正确插入。 这叫做检查约束(MySQL数据库中不起作用)。


其中,1,2,3,4,5,7 是发生在一个表内的约束, 而6是发生在两个表之间的约束。


上面专业的说法,叫做 数据完整性。


数据完整性分为三个部分:


1 . 实体完整性


2 . 域完整性


3 . 引用完整性


实体完整性这项规则要求每个数据表都必须有主键,而作为主键的所有字段,其属性必须是独一及非空值。


限制字段中的数据必须乎合预设的数据类型。


参照的完整性不允许关系中有不存在的实体引用。


使用约束,可以很方便的保证插入数据的正确性,避免逻辑错误数据的出现,但不能保证业务错误数据的出现。 业务错误数据,需要通过业务流程控制来避免。


二.二 约束条件的分类


  • 主键约束 Primary Key (简称 PK)
  • 非空约束 Not Null
  • 唯一约束 Unique
  • 外键约束 Foreign Key (简称 FK)
  • 默认约束 Default
  • 检查约束 Check(MySQL中不起作用)
  • 自增约束 AUTO_INCREMENT


下面,老蝴蝶分别对其进行详细的讲解。


三. 主键约束 Primary Key


主键约束 分为两种, 一种是 单字段主键, 另外一种是多字段联合主键。


三.一 单字段主键


1 . 在创建字段时, 指定 列级别约束条件


            列名  数据类型   Primary Key  [默认值]


如:


create table pk4(
     id int(11) primary key,
     name varchar(10)
    );


MySQL创建表和约束条件(四)上


2 . 在创建完所有列之后, 指定 表级别约束条件


    [constraint 约束名] primary key (列名)


其中, 约束名通常命名为: PK_表名。 常常省略 constraint 约束名, 直接用 primary key (列名)


 create table pk5(
    id int(11),
    name varchar(10),
    primary key (id)
   );


MySQL创建表和约束条件(四)上


三.二 多字段联合主键


多字段联合主键只能使用 表级别约束条件


    [constraint 约束名]  primary key (列名1,列名2)


也常常省略 constraint 约束名。


如 创建学生与课程 的成绩表。 其中,学生编号和课程编号是联合 主键。


 create table pk6(
    stuId int(11),  -- 学生编号
     courseId int(11), -- 课程编号
     score double(5,2),
    primary key (stuId,courseId)
  );


MySQL创建表和约束条件(四)上


三.三 演示主键约束


用 pk4 表做例子吧。 (关于数据的插入,后面章节会详细讲解)


1 . 先插入一个编号为 1,名称为两个蝴蝶飞 的记录。


insert into pk4(id,name) values(1,'两个蝴蝶飞');


MySQL创建表和约束条件(四)上


2 . 再插入一个编号为1,名称为老蝴蝶的记录。


insert into pk4(id,name) values(1,'老蝴蝶');


MySQL创建表和约束条件(四)上


编号 id是重复的,不能重复性插入, 会报错。

上一篇:LINUX UBUNTU安装依赖库编译freeswitch


下一篇:如何登陆进入Unix体验中心的PE860/FreeBSD系统?