重学MYSQL之创建和操作表

数据库 2020-09-10 948

1.创建表

创建表可以使用CREATE TABLE语句

例子,创建一个test表

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT, -- 自增
  `category` varchar(20) NOT NULL,
  `addTime` datetime(6) NOT NULL,
  PRIMARY KEY (`id`) # 主键
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

创建一个test表,包括id、category、addTime字段,int,varchar表示数据类型,NOT NULL表示非空。

1.1 使用NULL值

NULL值就是没有值或缺省,允许NULL值的列允许在插入行时不给出该列的值。不允许NULL值的列不接受没有列值的行,换句话说,在插入或更新行时,该列必须有值。

每个表要么是NULL列,要么是NOT NULL列。

下面例子是一个创建混合了NULL和NOT NULL列的表

CREATE TABLE Vendors
(
  vend_id CHAR(10) NOT NULL,
  vend_name CHAR(50) NOT NULL,
  vend_address CHAR(50) NOT NULL,
  vend_city CHAR(50)  ,
  vend_state CHAR(50) ,
)

NULL为默认值,如果不指定NOT NULL,就认为指定的是NULL

注意:不要把NULL值与空字符串相混淆。NULL值就是没有值,不是空字符串。如果指定'',这在NOT NULL是允许的。

1.2 指定默认值

SQL允许指定默认值,在插入行时如果不给出值,数据库自动采用默认值。默认值在CREATE TABLE语句中用关键字DEFAULT指定。

CREATE TABLE Order
(
 order_num INTEGER NOT NULL,
 order_item INTEGER NOT NULL,
 quantity INTEGER NOT NULL DEFAULT 1,
)

在指定系统时间时,各个数据库使用的语句都不相同,下表为各数据库使用系统时间的方式

DBMS 函数/变量
Access NOW()
DB2 CURRENT_DATE
MySQL CURRENT_DATE()
Oracle SYSDATE
PostgreSQL CURRENT_DATE
SQL Server GETDATE()
SQLite date('now')

2.更新表

更新表,使用ALTER TABLE语句。下面是使用ALTER TABLE时需要考虑的问题:

  • 理想情况下,不要在表中包含数据时对其进行更新。应在表设计过程中充分考虑未来可能的需求,避免今后对表的结构做大的改动。
  • 所有数据库都允许给现有的表增加列,不过对所增加列的数据类型有所限制。
  • 许多数据库不允许删除或更改表中的列
  • 多数数据库允许重命名表中的列
  • 许多数据限制对已经填有数据的列进行更改,对未填有数据的列几乎没有限制

增加行

ALTER TABLE blog_banner ADD test CHAR(20);

 为banner表增加了一个test列

更改或删除列,增加约束或增加键,这些操作也使用类似的语法(注意,下面的例子并非对所有数据库都有效)

ALTER TABLE blog_banner DROP COLUMN test;

注意:使用ALTER TABLE时应该非常小心,应该在进行改动前做完整的备份。数据库表的更改不能撤销,如果增加或删除列,可能导致部分或全部数据的丢失。

3.删除表

删除表,使用如下语句:

DROP TABLE blog_banner;

4.重命名表

 每个db对于重命名表的支持有所不同。DB2、MariaDB、MySQL、Oracle和PostgreSQL使用RENAME语句,SQL Server使用sp_rename存储过程,SQLite用户使用ALTER TABLE语句。

标签:数据库

文章评论

评论列表

已有0条评论