ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## DDL-表的操作 ## 一、创建表 **基本语法为:** ~~~  create table table_name(     column_name_1 data_type constrains,     column_name_2 data_type constrains,     ...     column_name_x data_type constrains,     column_name_n data_type constrains  ); ~~~ 其中,column\_name 是列的名字,data\_type 是列的数据类型,constrains 是此列的约束条件。 例如,创建一个表 people: ~~~  mysql> create table people(     -> name varchar(10) not null,     -> age int(2),     -> birthday date,     -> address varchar(100)     -> );  Query OK, 0 rows affected (0.04 sec) ~~~ 其中,not null 便是约束条件,表示默认不为空。 ### 0.创建表的完整语法: ~~~  create [temporary] table [if not exists] table_name(     create_definition,     ...  )[table_options] [partition_options]; ~~~ * `temporary` :临时表,会话结束时自动消失; * `if not exists` :当不存在此表时,顺利创建,若已存在则会显示警告; * `create_definition` :表的创建定义,即字段的定义; * `table_options`:表选项,设置表的字符集、存储引擎、文件目录等; * `partition_options` :分区选项,便于管理非常大的表。 ### 1.create\_definition-表的创建定义 表的创建定义 create\_definition 即 **字段的定义**,每个字段的定义以逗号(英文)结束,最后一个字段后不能有逗号,每个字段必须有数据类型,约束条件可选。 对于字段的定义: ~~~  column_name data_type [not null | null] [default default_value] [auto_increment] [unique key | primary key] [comment 'comment_string']; ~~~ #### a、`[not null | null]` : * mysql 默认设置为 null;此时插入一行数据时,若没设置该字段值,则该字段值为 null;null 作为占位符; * 建议设置为 not null ,比 null 的效率要好许多;B 树索引时不会存储 NULL 值的,所以如果索引的字段可以为 NULL,索引的效率会下降很多。在 MyISAM 引擎下,NULL 对索引、索引统计、磁盘占用都会有额外的开销,一个允许为 NULL 的列,每个字段的长度都比 NOT NULL 的多 1bit。 * mysql 中的 null 其实是占用空间的占位符,而空值是不占用空间的; * not null 的字段是不能插入 ‘null’ 的,只能插入空值 `''` (单引号之间是没有空格的); #### b、`[default default_value]`: 因为一般建议设置字段时是设置为 not null 的,所有一般都会给字段设置有默认值。如数值类型设置为 0,字符串设置为空值 `''` 。 特别当开发中 mysql 启用严格模式(strict mode)时,更应显示指定默认值。 #### c、`[auto_increment]`: 设置字段的自增,取值范围是 1 至 65535;默认从 1 开始,可在创建表时的表选项中用 `AUTO_INCREMENT=n` 来指定自增的初始值。 设置 auto\_increment 的数据列数据类型必须为整型正数,且必须有唯一索引(primary key 或 unique key),必须具备 not null 属性(当设置了索引时会自动设置为not null)。 当插入记录时,若没有为 auto\_increment 字段明确指定值,则等同插入 null值;若插入 null 值或者 0 时,该字段将自动生成下一个序列编号。当插入或更新记录为 auto\_increment 字段明确指定值,如果该值和已有的编号重复则会报错;如果该值大于已编号的值,下一个编号将该值开始递增;如果该值小于已编号的值,则仅仅该记录改动。 #### d、`[unique key | primary key]` : 设置特殊索引 key: * primary key 主键索引:唯一标识数据库表中的每条记录;主键必须包含唯一的值;主键列不能包含 NULL 值;每个表都应该有一个主键,并且每个表只能有一个主键。(PRIMARY KEY 拥有自动定义的 UNIQUE 约束); * UNIQUE 约束:唯一标识数据库表中的每条记录。 UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。(每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束) #### e、`[comment 'comment_string']` : 设置该字段的注释 ,便于理解该字段的意义,建议为每个字段加上清晰明了的注释。 ### 2.table\_options-表选项