关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

MySQL-表的基本操作(一)

发布时间:2023-06-30 20:00:41

一、创建数据表


创建数据表是指在已经创建好的数据库中建立新表。创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性约束的过程。创建表之前应先使用语句{use 数据库名} 进入到指定的数据库,再执行表操作。

创建表

语法:

CREATE TABLE  (字段名1, 数据类型 [列级别约束条件] [默认值], 字段名2, 数据类型 [列级别约束条件] [默认值],...);

   

例:

创建bbs库并进入

1. mysql> create database bbs; 2. Query OK, 1 row affected (0.00 sec) 3. mysql> use bbs; 4. Database changed

   

创建test表,编号为int类型,姓名为varchar类型,部门为int类型,薪资为float类型。

int:整数 4个字节

varchar:可变字符串 0~65535

float:浮点数 4个字节

1. mysql> create table test( 2. -> id int, 3. -> name varchar(20), 4. -> deptid int, 5. -> salary float); 6. Query OK, 0 rows affected (0.02 sec) 7. mysql> show tables; 8. +---------------+ 9. | Tables_in_bbs | 10. +---------------+ 11. | test | 12. +---------------+ 13. 1 row in set (0.00 sec)

   

插入两行数据,下面有两种插入方式,第二种更加精确。但是如果未定义列值将出现null。

1. mysql> insert into test values(1,'zs',10,3000); 2. Query OK, 1 row affected (0.05 sec) 3. 4. mysql> insert into test (id,name,deptid) values (2,'ls',20); 5. Query OK, 1 row affected (0.00 sec) 6. 7. mysql> select * from test; 8. +------+------+--------+--------+ 9. | id | name | deptid | salary | 10. +------+------+--------+--------+ 11. | 1 | zs | 10 | 3000 | 12. | 2 | ls | 20 | NULL | 13. +------+------+--------+--------+ 14. 2 rows in set (0.00 sec)

   

主键约束

主键约束要求:主键列的数据唯一,并且不允许为空。

(1)单字段主键

语法:

字段名 数据类型 PRIMARY KEY [默认值]

   

例:

创建file1表,定义id为主键。

1. mysql> create table file1( 2. -> id int primary key, 3. -> name varchar(20), 4. -> deptid int, 5. -> salary float); 6. Query OK, 0 rows affected (0.01 sec)

   

插入两行数据,主键id都为1,插入第二条数据时报错,表明id已存在不可重复。

1. mysql> insert into file1 values(1,'zs',10,3000); 2. Query OK, 1 row affected (0.01 sec) 3. 4. mysql> insert into file1 values(1,'ls',20,3000); 5. ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

   

(2)在定义完所有列后指定主键

语法:

[CONSTRAINT ] PRIMARY KEY [字段名]

   

创建file2表,末尾定义主键。

1. mysql> create table file2( 2. -> id int, 3. -> name varchar(20), 4. -> deptid int, 5. -> salary float, 6. -> PRIMARY KEY(id)); 7. Query OK, 0 rows affected (0.01 sec)

   

插入两行数据,主键id都为1,插入第二条数据时报错,表明id已存在不可重复。

1. mysql> insert into file2 values(1,'zs',10,3000); 2. Query OK, 1 row affected (0.00 sec) 3. 4. mysql> insert into file2 values(1,'ls',20,3000); 5. ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

   

(3)多字段联合主键

语法:

PRIMARY KEY [字段1,字段2,....]

   

创建file3表,末尾定义多主键。

1. mysql> create table file3( 2. -> name varchar(20), 3. -> deptid int, 4. -> salary float, 5. -> PRIMARY KEY(name,deptid)); 6. Query OK, 0 rows affected (0.01 sec)

   

插入多行数据,主键为name和deptid,表示可以有多个“zs”或多个“10”,但是不能有两个姓名为“zs”并且部门为“10”。

1. mysql> insert into file3 values('zs',10,3000),('ls',20,4000),('ww',30,5000); 2. Query OK, 3 rows affected (0.00 sec) 3. Records: 3 Duplicates: 0 Warnings: 0 4. 5. mysql> insert into file3 values('zs',40,6000); 6. Query OK, 1 row affected (0.00 sec) 7. 8. mysql> insert into file3 values('ls',10,6000); 9. Query OK, 1 row affected (0.00 sec) 10. 11. mysql> insert into file3 values('zs',10,6000); 12. ERROR 1062 (23000): Duplicate entry 'zs-10' for key 'PRIMARY'

   

外键约束

外键用来在两个表数据之间建立连接,它可以是一列或者多列。

语法:

[CONSTRAINT] FOREIGN KEY [字段名1,字段名2...] REFERENCES 主键列1[主键列2...]

   

创建两个表,外键名为dep_id,字段名为deptid,外键定义为dept1表中的id列。

1. mysql> create table dept1( 2. -> id int PRIMARY KEY, 3. -> name varchar(20) not null, 4. -> location varchar(50)); 5. Query OK, 0 rows affected (0.05 sec) 6. 7. mysql> create table emp1( 8. -> id int PRIMARY KEY, 9. -> name varchar(20), 10. -> deptid int, 11. -> salary float, 12. -> CONSTRAINT dep_id FOREIGN KEY(deptid) REFERENCES dept1(id)); 13. Query OK, 0 rows affected (0.02 sec)

   

dept1表创建三行数据

1. mysql> insert into dept1 values(1,'zs','bj'),(2,'ls','hd'),(3,'ww','tz'); 2. Query OK, 3 rows affected (0.01 sec) 3. Records: 3 Duplicates: 0 Warnings: 0

   

emp1表第一条数据创建正常,第二条创建失败(因为在dept1表中的id列没有“4”,所以emp1表deptid列创建不了。通俗点讲dept1表中的id列没有的数据,emp1表的deptid列就创建不了)。第三条创建成功。

1. mysql> insert into emp1 values(1,'zs',1,3000); 2. Query OK, 1 row affected (0.00 sec) 3. 4. mysql> insert into emp1 values(2,'ls',4,3000); 5. ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`bbs`.`emp1`, CONSTRAINT `dep_id` FOREIGN KEY (`deptid`) REFERENCES `dept1` (`id`)) 6. mysql> insert into emp1 values(2,'ls',3,3000); 7. Query OK, 1 row affected (0.00 sec)

   

非空约束

非空约束指字段的值不能为空。

语法:

字段名 数据类型 not null

   

例1:

创建test1表,姓名列不能为空。

1. mysql> create table test1( 2. -> id int PRIMARY KEY, 3. -> name varchar(20) NOT NULL, 4. -> deptid int, 5. -> salary float); 6. Query OK, 0 rows affected (0.02 sec)

   

插入数据,第一条全部插入成功,第二条除了name列全部插入,结果反馈"name"列报错。

1. mysql> insert into test1 values(1,'zs',10,3000); 2. Query OK, 1 row affected (0.01 sec) 3. 4. mysql> insert into test1(id,deptid,salary) values(1,10,3000); 5. ERROR 1364 (HY000): Field 'name' doesn't have a default value

   

唯一约束

使用unique来指定列,表明为该列的唯一性,不可具有重复性。

语法:

[CONSTRATIN ] UNIQUE ()

   

创建test2表,unique指定name列。

1. mysql> create table test2( 2. -> id int PRIMARY KEY, 3. -> name varchar(20), 4. -> location varchar(50), 5. -> CONSTRAINT STH UNIQUE(name)); 6. Query OK, 0 rows affected (0.01 sec)

   

指定name列后,该列姓名不可具有同名。

1. mysql> insert into test2 values(1,'zs','bj'); 2. Query OK, 1 row affected (0.00 sec) 3. 4. mysql> insert into test2 values(2,'zs','hd'); 5. ERROR 1062 (23000): Duplicate entry 'zs' for key 'sth'

   

默认约束

默认约束指定某列的默认值。

语法:

字段名 数据类型 DEFAULT 默认值

   

例:

创建test3表,指定deptid列默认为666。

1. mysql> create table test3( 2. -> id int PRIMARY KEY, 3. -> name varchar(20) NOT NULL, 4. -> deptid int DEFAULT 666, 5. -> salary float, 6. -> info varchar(50)); 7. Query OK, 0 rows affected (0.02 sec)

   

插入两行数据,除了deptid列,其他列都写入数据。而后查看test3表,deptid列默认的值都为666(默认状态为NULL)。

1. mysql> insert into test3(id,name,salary,info) values(1,'zs',3000,'bjcp'); 2. Query OK, 1 row affected (0.00 sec) 3. 4. mysql> insert into test3(id,name,salary,info) values(2,'ls',3000,'bjcp'); 5. Query OK, 1 row affected (0.00 sec) 6. 7. mysql> select * from test3; 8. +----+------+--------+--------+------+ 9. | id | name | deptid | salary | info | 10. +----+------+--------+--------+------+ 11. | 1 | zs | 666 | 3000 | bjcp | 12. | 2 | ls | 666 | 3000 | bjcp | 13. +----+------+--------+--------+------+ 14. 2 rows in set (0.00 sec)

   

属性值自动增加

试想一下,id或与之类似的列,每次插入数据该列都需要输入。其值本身就需要递增,而如果自动添加将会省事很多,下面语句将解决这一问题。

语法:

字段名 数据类型 AUTO_INCREMENT

   

例:

创建test4表,指定id为主键、属性值自动增加。

1. mysql> create table test4( 2. -> id int PRIMARY KEY AUTO_INCREMENT, 3. -> name varchar(20) not null, 4. -> deptid int, 5. -> salary float); 6. Query OK, 0 rows affected (0.01 sec)

   

插入三行数据,指定插入name、salary。

1. mysql> insert into test4(name,salary) values('zs',1000),('ls',2000),('ww',3000); 2. Query OK, 3 rows affected (0.01 sec) 3. Records: 3 Duplicates: 0 Warnings: 0

   

查看id列自动添加值。

1. mysql> select * from test4; 2. +----+------+--------+--------+ 3. | id | name | deptid | salary | 4. +----+------+--------+--------+ 5. | 1 | zs | NULL | 1000 | 6. | 2 | ls | NULL | 2000 | 7. | 3 | ww | NULL | 3000 | 8. +----+------+--------+--------+ 9. 3 rows in set (0.00 sec)

   

二、查看表结构


查看基本结构

语法:

DESCRIBE 表名; 或 DESC 表名;

   

例:

查看test1表结构。

1. mysql> describe test1; 2. +--------+-------------+------+-----+---------+-------+ 3. | Field | Type | Null | Key | Default | Extra | 4. +--------+-------------+------+-----+---------+-------+ 5. | id | int(11) | NO | PRI | NULL | | 6. | name | varchar(20) | NO | | NULL | | 7. | deptid | int(11) | YES | | NULL | | 8. | salary | float | YES | | NULL | | 9. +--------+-------------+------+-----+---------+-------+ 10. 4 rows in set (0.02 sec)

   

或desc,两者查看的结果相同。

1. mysql> desc test1; 2. +--------+-------------+------+-----+---------+-------+ 3. | Field | Type | Null | Key | Default | Extra | 4. +--------+-------------+------+-----+---------+-------+ 5. | id | int(11) | NO | PRI | NULL | | 6. | name | varchar(20) | NO | | NULL | | 7. | deptid | int(11) | YES | | NULL | | 8. | salary | float | YES | | NULL | | 9. +--------+-------------+------+-----+---------+-------+ 10. 4 rows in set (0.00 sec)

   

查看详细结构

语法:

SHOW CREATE TABLE ;

   

例:

查看test1表的详细结构信息。

1. mysql> show create table test1; 2. +-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 3. | Table | Create Table | 4. +-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 5. | test1 | CREATE TABLE `test1` ( 6. `id` int(11) NOT NULL, 7. `name` varchar(20) NOT NULL, 8. `deptid` int(11) DEFAULT NULL, 9. `salary` float DEFAULT NULL, 10. PRIMARY KEY (`id`) 11. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | 12. +-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 13. 1 row in set (0.04 sec)

   



/template/Home/leiyu/PC/Static