![MySQL数据库应用与管理 第2版](https://wfqqreader-1252317822.image.myqcloud.com/cover/707/41398707/b_41398707.jpg)
3.3 创建数据表
数据库创建以后,选定这个新创建的数据库作为当前默认的数据库,然后就可以在该数据库中创建数据表了。
3.3.1 使用Navicat对话方式创建数据表
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/41_02.jpg?sign=1739516397-nIHgxLBw4cgFsMCk5YvtbwTGu6gZKnWs-0-808d824432c8978cd67a5ff504e5cf9c)
3.3.1
以在学生管理数据库( stuInfo )中创建学生表( student )为例,使用Navicat对话方式创建用户数据表的步骤如下。
1)在Navicat控制台中,双击LDL连接对象,展开数据库列表;双击列表中的stuinfo打开该数据库,在“表”上单击鼠标右键,选择“新建表”命令(或者单击工具栏上的“新建表”按钮),则打开表结构设计窗口,如图3-1所示。
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/41_03.jpg?sign=1739516397-UXKtFSdCFwUuVGe82kPknngcAmbYIP9l-0-a69a36d561ab3bdba6bd5093faa71eed)
图3-1 表结构设计窗口
2)在以上窗口中,通过工具栏上的“添加字段”“插入字段”“删除字段”等按钮来设置字段名、数据类型及其指定长度、是否允许为空值([NOT] NULL)、默认值、自动递增、主键、注释等。学生表的表结构设计窗口如图3-2所示。
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/41_04.jpg?sign=1739516397-E2kkPs4453WVeS2wV4A4GBJ4MJRi2YV6-0-fb0b241666af198c13192cea6dc6f70c)
图3-2 学生表的表结构设计窗口
3)完成学生表中所有字段的设置后,单击工具栏上的“保存”按钮,显示“表名”对话框,如图3-3所示。输入表名student,单击“确定”按钮,即可完成学生表(student)的创建。
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/42_01.jpg?sign=1739516397-4HTJOPXdl98vgYdlv0ZFkma4jJS6vsbx-0-72e91e1c50f7ea8e1e120672fefc5147)
图3-3 “表名”对话框
说明:可以给字段设置是否允许为空值([NOT] NULL),NULL值意味着“没有值”或“未知值”,可以将NULL值插入到数据表中并从表中检索它们,也可以测试某个值是否为NULL;对NULL值还能进行算术计算,如果对NULL值进行算术运算,其结果还是NULL。在MySQL中,0或NULL都意味着假,其余值都意味着真。
3.3.2 使用CREATE TABLE语句创建数据表
创建数据表使用CREATE TABLE语句,其语法格式如下。
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/42_03.jpg?sign=1739516397-nDRxEfZwa7m0LJyuWeLqfNM1rBRLr5nE-0-e67ba3dc57c5035b22c0da05444bd131)
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/42_04.jpg?sign=1739516397-bFhF94opuvuxQ3B5CKIV9G8CrZjxYchJ-0-b1c04674a3f20cbddb90a54903d6eb00)
3.3.2
说明:
● 每一个字段可以使用属性对其进行限制说明,属性是可选的,主要包括AUTO_INCREMENT、COMMENT等。其中,AUTO_INCREMENT是用来设置字段的自动增量属性,当数值类型的字段设置为自动增量时,每增加一条新记录,该字段的值就自动加1,而且此字段的值不允许重复;插入时也可以为自增字段指定某一非零数值,如果表中已经存在该值将出错,否则使用指定数值作为自增字段的值,并且下次插入时,下条记录该字段的值将在此值的基础上加1;AUTO_INCREMENT属性只能修饰整数类型的字段。
● 可以使用PRIMARY KEY、UNIQUE、INDEX等子句为字段定义索引,另外也可以使用FOREIGN KEY子句创建与其他数据表的主键字段的外键约束。这将在第4章中详细介绍。
● MySQL支持多种存储引擎,例如MyISAM、InnoDB、HEAP、BOB、CSV等,其中最重要的是MyISAM和InnoDB这两种存储引擎。如果在创建数据表时没有设置存储引擎,默认的存储引擎是由MySQL配置文件里的default-table-type选项指定的,默认值为InnoDB(MySQL5.1.X之前版本的默认值为MyISAM)。当用CREATE TBALE创建新的数据表时,可以通过ENGINE或TYPE选项确定存储引擎。MyISAM和InnoDB存储引擎的比较如下所示。
■ MyISAM:该存储引擎成熟、稳定、易于管理,是最节约空间和响应速度最快的一种存储引擎,但该类型不支持事务操作和外键约束。
■ InnoDB:该存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全存储引擎,也支持外键约束,并且具有更高的安全性。
【示例3-1】 在数据库stuInfo中创建学生表(student),其中id字段为自动增加的无符号整数、主键,sNo、sName字段不允许为空。运行结果如图3-4所示。
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/43_01.jpg?sign=1739516397-KFl3pBg8pgj0IHm1xTZTaQgePtMSJGFW-0-6968aeec297798c307bbbc94b2c84104)
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/43_02.jpg?sign=1739516397-k3CoWyS7Aa22b5xRokkxsbp41C3YSpCd-0-fc58366ff5835b99910a563330fd32aa)
图3-4 使用CREATE TABLE语句创建学生表(student)
说明:在执行以上创建学生表(student)的SQL语句代码之前,首先要把已存在的同名数据表删除,否则出错;执行成功以后,在stuInfo数据库上单击鼠标右键,选择“刷新”命令,即可以查看创建的学生表(student)。
【示例3-2】 在数据库stuInfo中创建课程表(course),其中id字段为自动增加的无符号整数、主键,cNo、cName字段不允许为空。运行结果如图3-5所示。
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/43_04.jpg?sign=1739516397-7LH1FXBhkVHD4Vuk44SGM2jVqJhLoV4A-0-d7732ad8d070cb336018191099e96554)
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/44_01.jpg?sign=1739516397-mbCJSS9Mf8vfAAYPAWRrokbfKn7NIw59-0-597a8762e8cc62fe0535750f6aec8611)
图3-5 使用CREATE TABLE语句创建课程表(course)
【示例3-3】 在数据库stuInfo中创建成绩表(score),其中id字段为自动增加的无符号整数、主键,sId、cId、grade字段不允许为空。运行结果如图3-6所示。
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/44_02.jpg?sign=1739516397-lWQrluUHAxpFbRSsXwUjDNausqv9xGwm-0-77926c894713f15eb9ed850ab6a96a52)
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/44_03.jpg?sign=1739516397-eLqUdQuSC2PabcGGDa155z6IoiGECYnv-0-9ff9f06740a23d581172e25a4827b0a9)
图3-6 使用CREATE TABLE语句创建成绩表(score)
数据表成功创建以后,也可以使用SHOW TABLES命令显示数据表列表。
【示例3-4】 查看stuInfo数据库中的所有数据表。运行结果如图3-7所示。
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/44_04.jpg?sign=1739516397-dz6cVPnL2DwCoJKx8c2ycfs29bADg9I1-0-e4e358083f64cea82943fb24f17d9221)
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/45_01.jpg?sign=1739516397-uNyBhJwJ60JnGV7h8ef69UW0cCehXOvq-0-d8b52417ae5cb9be5ed81b01e4fd0ba8)
图3-7 使用SHOW TABLES语句查看stuInfo数据库中的所有数据表
3.3.3 使用CREATE TABLE…LIKE语句复制数据表
复制数据表使用CREATE TABLE…LIKE语句,其语法格式如下。
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/45_02.jpg?sign=1739516397-4iR9Y1VZoik6WRN3WdHJOY20FHSF4HtZ-0-950396278ad3cab563557496f78cc57d)
说明:可以把旧表的表结构、索引、默认值等都复制到新表中。
【示例3-5】 复制学生表(student),生成一张新的数据表student_bak。运行结果如图3-8所示。
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/45_04.jpg?sign=1739516397-exb9oxzmzeD3xk9KsD7jkrqzxJJ2CQL5-0-968cca4d2a800859c00d40e1919bac4a)
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/45_05.jpg?sign=1739516397-AG4ndlxVWTOAMaWfjxs0PVvFCWbcCTRt-0-3d04f58b9a75e12077482a7be9ce83b1)
图3-8 使用CREATE TABLE…LIKE语句复制数据表
3.3.4 使用CREATE TEMPORARY TABLE语句创建临时表
MySQL临时表在需要保存一些临时数据时是非常有用的。创建的临时表只在当前连接可见,当前连接关闭后,MySQL会自动删除所创建的临时表并释放其所占空间。
创建临时表使用CREATE TEMPORARY TABLE语句,其他语法格式与CREATE TABLE语句相同;也可以使用CREATE TEMPORARY TABLE LIKE语句复制已有数据表,生成一张新的临时表。
【示例3-6】 创建临时表(student_temp),其字段及要求与学生表(student)一样。运行结果如图3-9所示。
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/46_01.jpg?sign=1739516397-qpU26F15GCCk2oHLjQ8oHkMUYMf1uIWn-0-74b1eca27ea4bc9a7db53cd76ceb05bc)
![](https://epubservercos.yuewen.com/6BB263/21570844108788506/epubprivate/OEBPS/Images/46_02.jpg?sign=1739516397-WoY7pz5IMIQnhubUzSfpAHurTrXkzVRx-0-11782740a20f259774b5984e02f2cc0f)
图3-9 使用CREATE TEMPORARY TABLE语句创建临时表
说明:当使用SHOW TABLES命令显示数据表列表时,将无法查看到所创建的临时表student_temp,但可以使用INSERT、UPDATE、DELETE、SELECT等命令对它进行操作。