MySQL数据表的创建、修改、删除及基本操作

1.在 mysql中,可以使用 CREATE TABLE 语句创建表。其语法格式为:转自:https://www.cnblogs.com/bigbigbigo/p/10917429.html

/*建表的语法*/
create table [if not exists] Table_name(
    字段一  数据类型 [字段属性|约束] [索引] [注释] ,
    字段二  数据类型 [字段属性|约束] [索引] [注释] ,
    .........
    )[表类型][表字符集][注释]

例1:在students数据中创建一个名为student的表,表结构如下所示:

字段名称  数据类型 备注
stuID int(5) 学号,不为空,主键
stuName varchar(50) 姓名,不为空
stuSex char(10) 性别
stuAge smallint 年龄
use students;
create table student
(
    stuID  int(5)  not null primary key,
    stuName  varchar(50)  not null,
    stuSex CHAR(10),
    stuAge smallint
)

运行:

 易错点:

(1)中文的逗号和括号错误,命令中全部为英文状态下的逗号,括号;

(2)最后一个字段不适用逗号,比如上面的stuAge一行;

(3)使用use students,但没有创建数据库;

(4)数据类型写错,比如varchar写成varcher;

(5)重复多次运行,导致提示表已经存在的错误。

 数据类型详细介绍可参考以下网址:

 MySQL数据类型简介   http://c.biancheng.net/view/2421.html 

 MySQL中的约束概述  http://c.biancheng.net/view/7576.html

约束名称 概述
not null  非空
primary key 主键(唯一且非空)
unique key 唯一键
default   默认值

其他关键字说明:auto_increment 自增(此列必须是:primary key或者unique key),unsigned 非负数,comment 注释。

例2:在students数据中创建一个名为courses的表,表结构如下所示:

字段名称  数据类型 备注
couID int 课程号,不为空,主键,自动增长
couName varchar(50) 课程名称,不为空,默认值“大学英语”
couHours smallint 课时数,非负数
couCredit tinyint 学分,不为空,默认值为2
CREATE TABLE if not EXISTS courses(
         couID int  not null primary key auto_increment COMMENT '学号',
         couName varchar(50) not null DEFAULT('大学英语'),
         couHours  smallint UNSIGNED,
         couCredit  tinyint not null DEFAULT(2) COMMENT '学分'
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE  utf8mb4_0900_ai_ci/*默认字符集和校验规则可不写*/

 注意:1.创建表语句最后一个括号要加上分号;2.default约束有的版本不能加括号,不然会报错,可写为DEFAULT '大学英语' 的形式,中间隔一个空格。

例3:在students数据中创建一个名为stu_cou的选课表,表结构如下所示:

字段名称  数据类型 备注
ID int 主键,不为空,自动增长
stuID int(5) 学号,不为空
couID int 课程号,不为空
time DATETIME 选课时间,默认值使用函数now()获取当前时间
 
CREATE TABLE if not EXISTS stu_cou(
         ID int not null primary key auto_increment,
         stuID int(5)  not null  COMMENT '学号',
         couID int  not null  COMMENT '课程编号',
         time datetime not null DEFAULT(now())
)

 注意:在有些MySQL的版本下,设置字段的默认时间时,字段类型要设置为timestamp,如下所示:

couTime timestamp DEFAULT now()

2.在 mysql中,可以使用ALTER TABLE 语句来改变原有表的结构,例如增加或删减列、更改原有列类型、重新命名列或表等。其语法格式为:转自:http://c.biancheng.net/view/7583.html

ALTER TABLE <表名> [修改选项]

修改选项的语法格式如下:

{ ADD COLUMN <列名> <类型>
| CHANGE COLUMN <旧列名> <新列名> <新列类型>
| ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT }
| MODIFY COLUMN <列名> <类型>
| DROP COLUMN <列名>
| RENAME TO <新表名>
| CHARACTER SET <字符集名>
| COLLATE <校对规则名>

| MODIFY COLUMN <列名> <类型>   first

| MODIFY COLUMN <列名> <类型>   after  <列名>

}

也就是

(1)增加字段    (2)更改列名     (3)修改字段默认值  (4)修改字段数据类型  (5)删除字段(列名) (6)重命名表名    (7)修改表的字符集    (8)修改表的校验规则   (9)将字段顺序改为第一位    (10)将字段顺序改为另一个字段之后

例4.(1)修改students数据库中的student表,增加列名stuColleage,数据类型为varchar(50);       

ALTER TABLE students add COLUMN stuColleage varchar(50);

       (2)修改students数据库中的student表,将列名stuName更改为stuTitle,同时,数据类型改为varchar(30);       

alter TABLE students CHANGE COLUMN stuName stuTitle varchar(30);

       (3)修改students数据库中的student表,将stuSex列设置默认值为"男";

alter TABLE students ALTER COLUMN stuSex set DEFAULT('');

         (4)修改students数据库中的student表,修改stuSex列的数据类型为varchar(20);       

alter TABLE students modify COLUMN stuSex varchar(20);

       (5)修改students数据库中的student表,删除stuColleage列;      

alter TABLE students drop COLUMN stuColleage;

       (6)修改students数据库中的student表,更改字符集为utf8mb4,校验规则为utf8mb4_0900_ai_ci;    

alter TABLE students CHARACTER set utf8mb4 COLLATE utf8mb4_0900_ai_ci;

使用show create table <表名>命令查看创建表的sql语句。

         (7)修改students数据库中的student表,重命名表名为stuInfo;     

alter TABLE students rename to stuInfo;

        (8)修改students数据库中的stuInfo表,将stuTitle列放在第一列;     

alter TABLE stuInfo modify COLUMN stuTitle varchar(30) first;

          (9)修改students数据库中的stuInfo表,将stuTitle列放在stuID列后面;     

alter TABLE stuInfo modify COLUMN stuTitle varchar(30) after stuID;

 Tip:可使用 DESC <表名>;命令查看修改后的表结构。

 3.1.在MySQL中,使用 DROP TABLE 语句可以删除一个或多个数据表,语法格式如下:转自:http://c.biancheng.net/view/2439.html

DROP TABLE [IF EXISTS] 表名1 [ ,表名2, 表名3 ...]

对语法格式的说明如下:

  • 表名1, 表名2, 表名3 ...表示要被删除的数据表的名称。DROP TABLE 可以同时删除多个表,只要将表名依次写在后面,相互之间用逗号隔开即可。
  • IF EXISTS 用于在删除数据表之前判断该表是否存在。如果不加 IF EXISTS,当数据表不存在时 MySQL 将提示错误,中断 SQL 语句的执行;加上 IF EXISTS 后,当数据表不存在时 SQL 语句可以顺利执行,但是会发出警告(warning)。

   两点注意:

  • 用户必须拥有执行 DROP TABLE 命令的权限,否则数据表不会被删除。
  • 表被删除时,用户在该表上的权限不会自动删除。

 例5:删除students数据库中的courses表。 

drop table if EXISTS courses;

3.2. 删除被其他表关联的主表

首先要解除关联表,只要删除表的外键约束即可通过drop table if exists 表名 进行删除。

语法结构:alter table 表名 drop foreign key 外键约束名;

drop table if exists 表名1,表名2,…表名n;

posted @ 2022-09-25 20:54  YorkShare  阅读(989)  评论(2编辑  收藏  举报