时间:2021-07-01 10:21:17 帮助过:25人阅读
USE cuixiaozhao;#使用数据库实例-cuixiaozhao;
1 CREATE TABLE <表名>( 2 字段名1,数据类型 [列级别的约束条件] [默认值], 3 字段名2,数据类型 [列级别的约束条件] [默认值], 4 字段名3,数据类型 [列级别的约束条件] [默认值], 5 ...... 6 [表级别的约束条件] 7 )ENGINE=InnoDB DEFAULT CHARSET=utf8;View Code
举例说明
CREATE TABLE empoyee(
id INT(11),
name VARCAHR(20),
deptId INT(11),
salary FLOAT
)ENGINE=InnoDB DEFAULT CHARSET = utf8;
1 主键,又称主码,是表中一列或多列的组合。数据唯一、不允许为空。可结合外键来定义不同数据表之间的关系并且加快数据库查询速度。分为单字段主键和多字段联合主键。 2 create table tb1( 3 nid int not null auto_increment primary key, 4 num int null 5 )ENGINE=InnoDB DEFAULT CHARSET=utf8; 6 或 7 create table tb2( 8 nid int not null, 9 num int not null, 10 primary key(nid,num) 11 )ENGINE=InnoDB DEFAULT CHARSET=utf8;主键约束
1 外键,用来在两个表之间建立连接关系,可以是一列或者多列。一张表可以有一个或多个外键,作用保持数据的一致性和完整性。 2 主表(父表),即主键所在的表; 3 从表(子表),外键所在的表; 4 CREATE TABLE color ( 5 nid INT NOT NULL PRIMARY KEY, 6 NAME CHAR (20) NOT NULL 7 ) ENGINE = INNODB DEFAULT CHARSET = utf8; 8 9 CREATE TABLE fruit ( 10 nid INT NOT NULL PRIMARY KEY, 11 smt CHAR (32) NULL, 12 color_id INT NOT NULL, 13 CONSTRAINT fk_cc FOREIGN KEY (color_id) REFERENCES color (nid) 14 ) ENGINE = INNODB DEFAULT CHARSET = utf8;外键约束
1 非空约束,Not Null Constraint,指字段的值不能为空。 2 1、null #可为空 3 2、not null#不可为空 4 语法: 5 字段名 数据类型 NOT NULL非空约束
1 唯一性约束,Unique Constraint,要求该列唯一,可以为空,但只能出现一个空值。唯一约束可以确保一列或者几列不出现重复值。 2 语法: 3 字段名 数据类型 UNIQUE唯一约束
1 默认约束,Default Constraint,指定某列的默认值。 2 语法: 3 字段名 数据类型 DEFAULT 默认值 4 如果插入一条新纪录时,没有为该字段赋值,那么系统会自动为这个字段赋值为设定的默认值。默认约束
1 在数据库应用中,希望在每次插入新纪录时,系统自动生成字段的主键值。可通过为表的主键增加AUTO_INCREMENT 关键字来实现。MySQL中默认初始值为1,一条记录自动加1,一个表只能有一个字段使用AUTO_INCREMENT 约束,且该字段必须为主键的一部分。AUTO_INCREMENT 的字段类型可以是任何整数类型(TINYINT\SMALLINT\INT\BIGINT等) 2 语法: 3 字段名 数据类型 AUTO_INCREMENT自增约束
注意:外键约束PREIGN KEY 不能跨MySQL存储引擎使用!因为外键约束是用来保证数据的参照完整性,如果之间需要关联外键,却指定了不同的存储引擎,这些表之间是不能创建外键约束的。
2、查看数据表结构
1 ysql> DESC tb_emp1; 2 +--------+-------------+------+-----+---------+-------+ 3 | Field | Type | Null | Key | Default | Extra | 4 +--------+-------------+------+-----+---------+-------+ 5 | id | int(11) | NO | PRI | NULL | | 6 | name | varchar(25) | YES | | NULL | | 7 | deptId | int(11) | YES | | NULL | | 8 | salary | float | YES | | NULL | | 9 +--------+-------------+------+-----+---------+-------+ 10 4 rows in set (0.01 sec) 11 12 mysql> DESCRIBE tb_emp1; 13 +--------+-------------+------+-----+---------+-------+ 14 | Field | Type | Null | Key | Default | Extra | 15 +--------+-------------+------+-----+---------+-------+ 16 | id | int(11) | NO | PRI | NULL | | 17 | name | varchar(25) | YES | | NULL | | 18 | deptId | int(11) | YES | | NULL | | 19 | salary | float | YES | | NULL | | 20 +--------+-------------+------+-----+---------+-------+ 21 4 rows in set (0.00 sec) 22 23 mysql>View Code
1 mysql> SHOW CREATE TABLE tb_emp1; 2 +---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 3 | Table | Create Table | 4 +---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 5 | tb_emp1 | CREATE TABLE `tb_emp1` ( 6 `id` int(11) NOT NULL, 7 `name` varchar(25) DEFAULT NULL, 8 `deptId` int(11) DEFAULT NULL, 9 `salary` float DEFAULT NULL, 10 PRIMARY KEY (`id`) 11 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 12 +---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 13 1 row in set (0.00 sec) 14 15 mysql>View Code
3、删除数据表
DROP TABLE 表名
语法:DROP TABLE [IF EXISTS] 表1,表2,表3,表n;#加上IF EXISTS 参数,如果表不存在,SQL语句可以顺利执行,但是会发生警告(warnig)
1、可以先删除关联的子表,再删除父表,但同时删除了两张表;
2、删除关联表的外键约束,在删除父表,保留了子表;
4、清空表
5、修改表
修改表指的是修改数据库中已存在的数据表结构。MySQL中使用ALTER TABLE 语句修改表。包含:需改表名、字段名、字段的数据类型、增加和删除字段、修改字段的排列位置、更改表的存储引擎、删除表的外键约束!
1、修改表名
ALTER TABLE <旧表名> RENAME [TO] <新表名>;#其中,TO为可选参数;
1 mysql> SHOW DATABASES; 2 +--------------------+ 3 | Database | 4 +--------------------+ 5 | information_schema | 6 | cuixiaozhao | 7 | mysql | 8 | performance_schema | 9 | sys | 10 +--------------------+ 11 5 rows in set (0.00 sec) 12 13 mysql> USE cuixiaozhao; 14 Reading table information for completion of table and column names 15 You can turn off this feature to get a quicker startup with -A 16 17 Database changed 18 mysql> SHOW TABLES; 19 +-----------------------+ 20 | Tables_in_cuixiaozhao | 21 +-----------------------+ 22 | tb_cxz | 23 +-----------------------+ 24 1 row in set (0.00 sec) 25 26 mysql> DESC tb_cxz; 27 +--------+-------------+------+-----+---------+-------+ 28 | Field | Type | Null | Key | Default | Extra | 29 +--------+-------------+------+-----+---------+-------+ 30 | id | int(11) | NO | PRI | NULL | | 31 | name | varchar(25) | YES | | NULL | | 32 | deptId | int(11) | YES | | NULL | | 33 | salary | float | YES | | NULL | | 34 +--------+-------------+------+-----+---------+-------+ 35 4 rows in set (0.00 sec) 36 mysql> SHOW CREATE TABLE tb_cxz; 37 +--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 38 | Table | Create Table | 39 +--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 40 | tb_cxz | CREATE TABLE `tb_cxz` ( 41 `id` int(11) NOT NULL, 42 `name` varchar(25) DEFAULT NULL, 43 `deptId` int(11) DEFAULT NULL, 44 `salary` float DEFAULT NULL, 45 PRIMARY KEY (`id`) 46 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 | 47 +--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 48 1 row in set (0.00 sec) 49 50 mysql> ALTER TABLE tb_cxz RENAME TO tb_cxs; 51 Query OK, 0 rows affected (0.00 sec) 52 53 mysql> SHOW TABLES; 54 +-----------------------+ 55 | Tables_in_cuixiaozhao | 56 +-----------------------+ 57 | tb_cxs | 58 +-----------------------+ 59 1 row in set (0.00 sec) 60 61 mysql>修改表名
注意:修改表名并不修改表的结构;
2、修改字段的数据类型
ALTER TABLE <表名> MODIFY <字段名> <数据类型>;
1 mysql> DESC tb_cxs; 2 +--------+-------------+------+-----+---------+-------+ 3 | Field | Type | Null | Key | Default | Extra | 4 +--------+-------------+------+-----+---------+-------+ 5 | id | int(11) | NO | PRI | NULL | | 6 | name | varchar(25) | YES | | NULL | | 7 | deptId | int(11) | YES | | NULL | | 8 | salary | float | YES | | NULL | | 9 +--------+-------------+------+-----+---------+-------+ 10 4 rows in set (0.00 sec) 11 12 mysql> ALTER TABLE tb_cxs MODIFY name VARCHAR(30); 13 Query OK, 0 rows affected (0.00 sec) 14 Records: 0 Duplicates: 0 Warnings: 0 15 16 mysql> DESC tb_cxs; 17 +--------+-------------+------+-----+---------+-------+ 18 | Field | Type | Null | Key | Default | Extra | 19 +--------+-------------+------+-----+---------+-------+ 20 | id | int(11) | NO | PRI | NULL | | 21 | name | varchar(30) | YES | | NULL | | 22 | deptId | int(11) | YES | | NULL | | 23 | salary | float | YES | | NULL | | 24 +--------+-------------+------+-----+---------+-------+ 25 4 rows in set (0.00 sec) 26 27 mysql>修改字段的数据类型
3、修改字段名
ALTER TABLE <表名> CHANGE <旧字段名> <新字段名> <新数据类型>;
1 修改字段名,数据类型保持不变; 2 mysql> DESC tb_cxs; 3 +--------+-------------+------+-----+---------+-------+ 4 | Field | Type | Null | Key | Default | Extra | 5 +--------+-------------+------+-----+---------+-------+ 6 | id | int(11) | NO | PRI | NULL | | 7 | name | varchar(30) | YES | | NULL | | 8 | deptId | int(11) | YES | | NULL | | 9 | salary | float | YES | | NULL | | 10 +--------+-------------+------+-----+---------+-------+ 11 4 rows in set (0.00 sec) 12 13 mysql> ALTER TABLE tb_cxs CHANGE salary pay float; 14 Query OK, 0 rows affected (0.01 sec) 15 Records: 0 Duplicates: 0 Warnings: 0 16 17 mysql> DESC tb_cxs; 18 +--------+-------------+------+-----+---------+-------+ 19 | Field | Type | Null | Key | Default | Extra | 20 +--------+-------------+------+-----+---------+-------+ 21 | id | int(11) | NO | PRI | NULL | | 22 | name | varchar(30) | YES | | NULL | | 23 | deptId | int(11) | YES | | NULL | | 24 | pay | float | YES | | NULL | | 25 +--------+-------------+------+-----+---------+-------+ 26 4 rows in set (0.00 sec) 27 28 即修改字段名称,同时修改数据类型; 29 mysql> DESC tb_cxs; 30 +--------+-------------+------+-----+---------+-------+ 31 | Field | Type | Null | Key | Default | Extra | 32 +--------+-------------+------+-----+---------+-------+ 33 | id | int(11) | NO | PRI | NULL | | 34 | name | varchar(30) | YES | | NULL | | 35 | deptId | int(11) | YES | | NULL | | 36 | salary | float | YES | | NULL | | 37 +--------+-------------+------+-----+---------+-------+ 38 4 rows in set (0.00 sec) 39 40 mysql> ALTER TABLE tb_cxs CHANGE salary pay INT(10); 41 Query OK, 0 rows affected (0.04 sec) 42 Records: 0 Duplicates: 0 Warnings: 0 43 44 mysql>修改字段名
小结:CHANGE也可以只修改数据类型,实现和MODIFY同样的效果,方法是:将SQL语句中的“新字段名”和“旧字段名”设置为相同的名称,只改变“数据类型”!
但是,由于不同的数据在机器中存储的方式及长度并不相同,修改数据类型可能会影响到数据表中已有的数据记录,因此,当数据表中已经存在数据时,不要轻易修改数据类型;
4、添加字段
ALTER TABLE <表名> <新字段名> <数据类型> [约束条件] [ FIRST | AFTER 已存在的字段名 ];#FIRST 与AFTER为可选参数,如果没有,默认将新字段添加至最后列;
1 mysql> DESC tb_cxs; 2 +--------+-------------+------+-----+---------+-------+ 3 | Field | Type | Null | Key | Default | Extra | 4 +--------+-------------+------+-----+---------+-------+ 5 | id | int(11) | NO | PRI | NULL | | 6 | name | varchar(30) | YES | | NULL | | 7 | deptId | int(11) | YES | | NULL | | 8 | pay | int(10) | YES |