1.创建表的语法形式
create table 表名 (属性名 数据类型 [完整性约束条件]);
create table example0(id int,name varchar(20),sex boolean);
2.设置表的主键
Create table 表名(属性名 数据类型 primary key)
create table example1(stu_id int primary key,stu_name varchar(20),stu_sex boolean);
3.多字段主键
create table 表名(属性名 数据类型 primary key(属性名1,属性名2,…))
create table example2(stu_id int,course_id int,grade float,primary_key(stu_id,course_id));
4.设置表的外键
create table 表名(属性名 数据类型 primary key (属性1.1,属性1.2) reference 表名(属性名2.1,属性2.2) )
mysql> create table example3(
-> stu_id int,
-> course_id int,
-> constraint c_fk foreign key(stu_id,course_id)references example2(stu_id,course_id)
-> );
5.设置表的非空约束
create table 表名(属性名 数据类型 not null)
mysql> create table example4(
-> id int not null primary key,
-> name varchar(20) not null,
-> stu_id int,
-> constraint d_fk foreign key (stu_id)
-> references example1(stu_id)
-> );
6.设置表的唯一性约束
create table 表名(属性名 数据类型 unique)
mysql> create table example5(
-> id int primary key,
-> stu_id int unique,
-> name varchar(20) not null
-> );
7.设置表的属性值自动增加
create table 表名(属性名 数据类型 auto_increment)
mysql> create table example6(
-> id int primary key auto_increment,
-> stu_id int unique,
-> name varchar(20) not null
-> );
8.设置表的属性的默认值
create table 表名(属性名 数据类型 default 默认值)
mysql> create table example7(
-> id int primary key auto_increment,
-> stu_id int unique,
-> name varchar(20) not null,
-> english varchar(20) default 'zero',
-> math float default 0,
-> computer float default 0
-> );
查看表结构
1.查看表结构的语句
describe 表名;
describe example3;
结果:mysql> describe example3;
+-----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| stu_id | int(11) | YES | MUL | NULL | |
| course_id | int(11) | YES | | NULL | |
+-----------+---------+------+-----+---------+-------+
2.查看表详细结构语句
show create table 表名;
show create table example7 G
mysql> show create table example7 G;
*************************** 1. row ***************************
Table: example7
create Table: CREATE TABLE `example7` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`stu_id` int(11) DEFAULT NULL,
`name` varchar(20) NOT NULL,
`english` varchar(20) DEFAULT 'zero',
`math` float DEFAULT '0',
`computer` float DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `stu_id` (`stu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.01 sec)
修改表
1.修改表名
alter table 旧表名 rename to 新表名;
我们修改example0的表名:
修改前
![550f76b32e80ba9d8f473323370e517d.png](https://i-blog.csdnimg.cn/blog_migrate/7ef97c4dc1e66651994a2525cf20080f.jpeg)
mysql> alter table example0 rename to user;
修改后
![4808d1c2b5f78546eb26a1c45e5fe1c2.png](https://i-blog.csdnimg.cn/blog_migrate/cdb5f36ccc66044a2cd8bf71f10e1ee6.jpeg)
2.修改字段的数据类型
alter table 表名 modify 属性名 数据类型;
我们修改name字段的数据类型
alter table user modify name varchar(30);
修改前:
![bee7ed1d094a939733670408163b4eb9.png](https://i-blog.csdnimg.cn/blog_migrate/1f4e5b1801f413d3ce47d3cfdc333817.jpeg)
修改后:
![9b6edd80ad8a6355b9eaaef1a0011bbb.png](https://i-blog.csdnimg.cn/blog_migrate/a2d35bfa362ff11f07ea154d67f0eb5c.jpeg)
3.修改字段名
alter table 表名 change 旧属性名 新属性名 新数据类型;
1. 只修改字段名,不修改数据类型
![6a03a159023fd45a86bcb5f2c91b8939.png](https://i-blog.csdnimg.cn/blog_migrate/65f6d35f8c295b6145e4875fce507dad.jpeg)
修改example1中stu_named的字段名为name
alter table example1 change stu_name name varchar(20);
![1790a84b5402850f94f1e4a342cf99b3.png](https://i-blog.csdnimg.cn/blog_migrate/3bc426a7c6e7f5a5e1d94a6ff24b8046.jpeg)
2. 修改字段名且修改数据类型
修改example1中stu_sex的字段为sex,且数据类型修改为int(2)
alter teble example1 change stu_sex sex int(2);
![9d5ab330618ab6c98b7ae97e7a35cb3d.png](https://i-blog.csdnimg.cn/blog_migrate/24f6c28a69510d19e1b566026dca431e.jpeg)
3. 增加字段
alter table 表名 add 属性名1 数据类型[完整性约束条件] [first |after 属性名2];
属性1:指需要增加的字段的名称;
数据类型:新增字段的数据类型;
(1) 增加无完整性约束条件的字段
我们在user表中增加一个无完整性约束条件的字段phone字段。
未执行语句之前
执行语句后
alter table user add phone varchar(20);
(2) 增加有完整性约束条件的字段
我们在user表中增加一个有非空约束的age字段
语句执行前
![84d660d70cbebc6d5c064928d6400c2d.png](https://i-blog.csdnimg.cn/blog_migrate/9b5fffb4c83348cd6410fcf9e27ad00f.jpeg)
语句执行后
alter table user add age int(4) not null;
![c4a76b93a0eee46e331f43fdead924b8.png](https://i-blog.csdnimg.cn/blog_migrate/5ac4e686da3d83a02ede0f938cab20a4.jpeg)
(3) 表的第一个位置增加字段
我们将在user表中第一个位置增加一个num字段,并设置为主键
语句执行前
![c4400deb6db82ac79630ac6d6e476238.png](https://i-blog.csdnimg.cn/blog_migrate/68f5c3a443b9582dc3106b65d9e6e130.jpeg)
语句执行后
alter table user add num int(8) primary key first;
![d65ec3741ea27a64f561f754e62ee11f.png](https://i-blog.csdnimg.cn/blog_migrate/a64dcdd1d1fe66c91fc34af3edf07bff.jpeg)
(4) 表的指定位置增加字段
我们将user表中phone的后面增加address字段
语句执行前
![7160b940d2ef9b2055dddca5d7e06ad1.png](https://i-blog.csdnimg.cn/blog_migrate/21043598aa138488be4b9f4b470e9ffb.jpeg)
语句执行后
alter table user add address varchar(30) after phone;
![f00cbaa98cb7b31278698e1026de8884.png](https://i-blog.csdnimg.cn/blog_migrate/a88f914c4c351a7794565fac1f1354fd.jpeg)
4.删除字段
alter table 表名 drop 字段名;
我们从user表中删除id字段
语句执行前
![fd7ed0fc90a71773544c35ffb275d6b0.png](https://i-blog.csdnimg.cn/blog_migrate/dbd618ba9b434d6acc436151f9a55859.jpeg)
语句执行后
alter table user drop id;
![ba83475345c7049ac791f8c541bdfad0.png](https://i-blog.csdnimg.cn/blog_migrate/82e5ea1db3968b7414277e440d18d428.jpeg)
5.修改字段的排列位置
语法:alter table 表名 modify 属性名1 数据类型 first|after 属性名2;
属性名1:指需要修改位置的字段名称;
数据类型:指属性名1的数据类型;
first:指指定位置为表的第一个位置;
after 属性名2:指指定属性名1插入在属性名2之后。
(1)字段修改到第一个位置
我们user表中name字段修改为该表的第一个字段
修改前
![bca2c6eebbff14f0f7556b4c13b786f4.png](https://i-blog.csdnimg.cn/blog_migrate/28f3c94d09494552b9c153ec7b2be609.jpeg)
修改后
alter table user modify name varchar(30) first;
![eadf539ded5648a58bbbb68c74b1ae0e.png](https://i-blog.csdnimg.cn/blog_migrate/6323be897f34b0a4769f2c75dc6460c8.jpeg)
(2)字段修改到指定位置
我们将user表中sex字段排到age字段之后
语句执行前
![dbdb77f775325d54cc86a45f80b24dc2.png](https://i-blog.csdnimg.cn/blog_migrate/b9f804acbf2cb26783ab642811023f7c.jpeg)
语句执行后
alter table user modify sex tinyint(1) after age;
![6c5695008aede71f2bc3b91c61c193cf.png](https://i-blog.csdnimg.cn/blog_migrate/94406d7f85be155032cb330bd061fc81.jpeg)
6.更改表的存储引擎
语法:alter table表名 engine=myisam;
我们先查看一下user表的存储引擎,结果为:InnoDB
![0c354a5c8242278960578e1ddcde3d83.png](https://i-blog.csdnimg.cn/blog_migrate/db11d19bf1326685384d0851d13dce10.jpeg)
执行后
alter table user engine=myisam;
![d2c16be360d966b857a5cb81e3ac4271.png](https://i-blog.csdnimg.cn/blog_migrate/1a09bd4f66a93cbbe5aed20c394afd6e.jpeg)
7.删除表的外键约束
语法:alter table 表名 drop foreign key 外键别名;
外键别名:指创建表时设置的外键的代号
我们将example3的外键约束删除
语句执行前
![2582dd89294cf729f0f880ec5e1968ea.png](https://i-blog.csdnimg.cn/blog_migrate/b1393f730b8abbf6957ba2760ea91b8c.jpeg)
语句执行后
alter table example3 drop foreign key c_fk;
![854f0ca8eaeef0b9d9812a0487025cd0.png](https://i-blog.csdnimg.cn/blog_migrate/f527f0625c3c87e33f7a7ad0b419d9ee.jpeg)
删除表
(1)删除没有被关联的普通表
语法:drop table 表名
我们接下来将example5表删除
语句执行前
![73e39a5c4e601d3ffdb28a5e8ef805ac.png](https://i-blog.csdnimg.cn/blog_migrate/86fb2e2f4ea95621afdc49c013c4acc1.jpeg)
语句执行后
drop table example5;
![ee8f63fca458ded9c017d25dc952ab78.png](https://i-blog.csdnimg.cn/blog_migrate/5cd49f2e55178d820d97d66585dde1ca.jpeg)
(2)删除被其他表关联的父表
接下来我们删除example1表
drop table example1;
![6ea196764d531da3235859151efb9b55.png](https://i-blog.csdnimg.cn/blog_migrate/2b06df0b77de57d7bf80ed096b1840fa.jpeg)
删除失败,有外键依赖于该表
example4表依赖于example1表。example4表的外键时stu_id 依赖于example1表的主键。example1表是example4表的父表。方法一:如果要删除example4表,必须先去掉这种依赖关系。最简单直接的办法是,先删除example4,然后再删除父表example1。方法二:先删除子表的外键约束,然后删除父表。
执行语句前
![0f5fff9399bd1c4b664134742e704bd3.png](https://i-blog.csdnimg.cn/blog_migrate/444691a602ee488d5ab7b359791aaa9c.jpeg)
语句执行后
![d18eec30f45c8b7cb9816ccccb035f20.png](https://i-blog.csdnimg.cn/blog_migrate/c4cfaace0c6e4a45cb695afee2a49acb.jpeg)
结果显示成功
![4ff87cf37aad08cbbb4b2e6e3f1498c3.png](https://i-blog.csdnimg.cn/blog_migrate/da5e201df8a73ea3b141d0606e8d9da9.jpeg)