MySQL 创建数据表 | MySQL 教程

创建MySQL数据表需要以下信息:

  • 表名
  • 表字段名
  • 定义每个表字段

语法

以下为创建MySQL数据表的SQL通用语法:

CREATE TABLE table_name (column_name column_type);

以下例子中我们将在 WEB176 数据库中创建数据表web176_tbl:

CREATE TABLE IF NOT EXISTS `web176_tbl`(
   `web176_id` INT UNSIGNED AUTO_INCREMENT,
   `web176_title` VARCHAR(100) NOT NULL,
   `web176_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `web176_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

实例解析:

  • 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
  • AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
  • PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
  • ENGINE 设置存储引擎,CHARSET 设置编码。

通过命令提示符创建表

通过 mysql> 命令窗口可以很简单的创建MySQL数据表。你可以使用 SQL 语句 CREATE TABLE 来创建数据表。

实例

以下为创建数据表 web176_tbl 实例:

root@host# mysql -u root -p
Enter password:*******
mysql> use WEB176;
Database changed
mysql> CREATE TABLE web176_tbl(
   -> web176_id INT NOT NULL AUTO_INCREMENT,
   -> web176_title VARCHAR(100) NOT NULL,
   -> web176_author VARCHAR(40) NOT NULL,
   -> submission_date DATE,
   -> PRIMARY KEY ( web176_id )
   -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.16 sec)
mysql>

注意:MySQL命令终止符为分号 ; 。

注意: -> 是换行符标识,不要复制。

使用PHP脚本创建数据表

你可以使用 PHP 的 mysqli_query() 函数来创建已存在数据库的数据表。

该函数有两个参数,在执行成功时返回 TRUE,否则返回 FALSE。

语法

mysqli_query(connection,query,resultmode);
参数描述
connection必需。规定要使用的 MySQL 连接。
query必需,规定查询字符串。
resultmode可选。一个常量。可以是下列值中的任意一个:MYSQLI_USE_RESULT(如果需要检索大量数据,请使用这个)MYSQLI_STORE_RESULT(默认)

实例

以下实例使用了PHP脚本来创建数据表:

<?php
$dbhost = 'localhost';  // mysql服务器主机地址
$dbuser = 'root';            // mysql用户名
$dbpass = '123456';          // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
    die('连接失败: ' . mysqli_error($conn));
}
echo '连接成功<br />';
$sql = "CREATE TABLE web176_tbl( ".
        "web176_id INT NOT NULL AUTO_INCREMENT, ".
        "web176_title VARCHAR(100) NOT NULL, ".
        "web176_author VARCHAR(40) NOT NULL, ".
        "submission_date DATE, ".
        "PRIMARY KEY ( web176_id ))ENGINE=InnoDB DEFAULT CHARSET=utf8; ";
mysqli_select_db( $conn, 'WEB176' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
    die('数据表创建失败: ' . mysqli_error($conn));
}
echo "数据表创建成功\n";
mysqli_close($conn);
?>

执行成功后,就可以通过命令行查看表结构:

mysql> use WEB176;
Query OK,0 rows affected (0.00 sec)

mysql> show tables;
+-----------+---------------+---------------+-----------------+
| Tables_in_web176 |
+-----------+---------------+---------------+-----------------+
| web176_tbl      |
+-----------+---------------+---------------+-----------------+
1 rows in set (0.01 sec)

mysql> desc web176_tbl;
+-----------+---------------+---------------+----------------------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------+---------------+---------------+----------------------------+
| web176_id       | int(11)      | NO   | PRI | NULL    | auto_increment |
| web176_title    | varchar(100) | NO   |     | NULL    |                | 
| web176_author   | varchar(40)  | NO   |     | NULL    |                | 
| submission_date | date         | YES  |     | NULL    |                | 
+-----------+---------------+---------------+----------------------------+
4 rows in set (0.01 sec)

其他内容

细节

创建 MySql 的表时,表名和字段名外面的符号 ` 不是单引号,而是英文输入法状态下的反单引号,也就是键盘左上角 esc 按键下面的那一个 ~ 按键,坑惨了。

反引号是为了区分 MySql 关键字与普通字符而引入的符号,一般的,表名与字段名都使用反引号。

MySQL 字段属性应该尽量设置为 NOT NULL

除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL。这看起来好像有点争议,请往下看。

1、首先,我们要搞清楚空值 “” 和 NULL 的概念:

  • 1)空值是不占用空间的
  • 2)MySQL中的NULL其实是占用空间的

所谓的 NULL 就是什么都没有,连 \0 都没有,\0 在字符串中是结束符,但是在物理内存是占空间的,等于一个字节,而 NULL 就是连这一个字节都没有。

2、其次,在数据库里是严格区分的,任何数跟 NULL 进行运算都是 NULL, 判断值是否等于 NULL,不能简单用 =,而要用 IS NULL关键字。

3、数据库的字段 col1 设为 NOT NULL, 仅仅说明该字段不能为 NULL, 也就是说只有在:

INSERT INTO table1(col1) VALUES(NULL);

这种情况下数据库会报错,而:

INSERT INTO table1(col1) VALUES('');

不会报错。

(如果字段是自增ID,第一句不会报错,这不能说明是可以为NULL,而是 数据库系统会根据ID设的缺省值填充,或者如果是自增字段就自动加一等缺省操作。)

4、含有空值的列很难进行查询优化,而且对表索引时不会存储 NULL 值的,所以如果索引的字段可以为 NULL,索引的效率会下降很多。因为它们使得索引、索引的统计信息以及比较运算更加复杂。你应该用 0、一个特殊的值或者一个空串代替空值。

5、联表查询的时候,例如 LEFT JOIN table2,若没有记录,则查找出的 table2 字段都是 null。假如 table2 有些字段本身可以是 null,那么除非把 table2 中 not null 的字段查出来,否则就难以区分到底是没有关联记录还是其他情况。

MySQL 存储引擎 InnoDB 与 MyISAM

ENGINE = innodb

存储引擎是 innodb。innodb 是 MySQL 上第一个提供外键约束的数据存储引擎,除了提供事务处理外,InnoDB 还支持行锁,提供和 Oracle 一样的一致性的不加锁读取,能增加并发读的用户数量并提高性能,不会增加锁的数量。InnoDB 的设计目标是处理大容量数据时最大化性能,它的 CPU 利用率是其他所有基于磁盘的关系数据库引擎中最有效率的。

InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 有它自己的缓冲池,能缓冲数据和索引,InnoDB 还把数据和索引存放在表空间里面,可能包含好几个文件,这和 MyISAM 表完全不同,在 MyISAM 中,表被存放在单独的文件中,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB。

作者:terry,如若转载,请注明出处:https://www.web176.com/mysql/6135.html

(0)
打赏 支付宝 支付宝 微信 微信
terryterry
上一篇 2022年5月16日 下午2:10
下一篇 2022年5月16日 下午2:28

相关推荐

发表回复

登录后才能评论