目录
一、表的基本操作
1、展示数据库中表
2、创建表
2.1基本语法
2.2给建表语句添加注释
2.3 if not exists 语句来校验表是否存在
3、删除表
if exists语句
4、查看表结构
5、直接使用某个库中的某个表
6、修改表
6.1修改表名
6.2增加列
6.3删除列
6.4修改列的信息
6.5一条语句实现多个修改操作
二、列的属性
1、简单的查询和插入语句
1.1简单的查询语句
1.2简单的插入语句
1.3批量插入
2、列的属性
2.1默认值-default
2.2NOT NULL
2.3主键
2.4unique 约束
2.5主键和unique约束的对比
2.6外键
2.7AUTO_INCREMENT
2.8列的注释
2.9显示宽度与zerofill
3、查看表结构是的列属性
4、标识符的命名规范
表的基本操作:包括展示表、创建表、修改表、删除表、查询表等其他操作。
列的属性:mysql列属性包括:NULL 、default、comment、primary key、unique key
方式一:直接展示默认数据库的那些表
show tables;
方式二:展示指定数据库的那些表
show tables from test;
/**test指的是数据库名**/
创建表的注意事项:
- 给表起名(注意:表面如果是多个单词用下划线代替。例如test_first;不要出现空格开头或者在中间或者在末尾的表名,例如: test、test first、test );
- 给表定义一些列,并且给表的列命名(列名也叫字段);
- 每一个列都需要定义一种数据类型(数据类型请查看MySQL基础(二));
- 如果有需要的话,可以给些列定义相应的属性,比如设置默认值等(详情看本章第二大点);
create table 表名 (
列名1 数据类型 [列的属性],
列名2 数据类型 [列的属性],
列名3 数据类型 [列的属性],
...
列名n 数据类型 [列的属性]
);
/**列的属性在创建表的时候可要可不要,可选择性的,具体等到本章第二节会细讲**/
create table 表名 (
`列名1` 数据类型 [列的属性],
`列名2` 数据类型 [列的属性],
`列名3` 数据类型 [列的属性],
...
`列名n` 数据类型 [列的属性]
);
/**列的属性在创建表的时候可要可不要,可选择性的,具体等到本章第二节会细讲**/
为什么要添加表注释?
- 在公司团队开发时,可能你的同事不知道该表是用来干什么的,但是一旦你加上注释后,大家一眼就能看懂是用来存储什么数据的,减少开发时间;
- 对于个人而言,如果时间久了,在看这个表时,忘记了他是干什么的,但是加了注释就不一样了。
comment语句,就是为表加注释的,而且还可以为字段加注释,详情看后续介绍,这个地方只介绍表注释,格式如下:
create table 表名 (
列的信息.....
)comment '我是表的注释名';
create table 表名 (
`列名1` 数据类型 [列的属性],
`列名2` 数据类型 [列的属性],
`列名3` 数据类型 [列的属性],
...
`列名n` 数据类型 [列的属性]
)comment '我是表的注释名';
/**表的注释不需要太长,简明表达意思就行**/
与重复创建数据库是一样,当数据库存在表时,在创建一个重复的表就会报错,所以这个地方依旧可以用if not exists来进行校验。具体操作如下:
create table if not exists 表名 (
`列名1` 数据类型 [列的属性],
`列名2` 数据类型 [列的属性],
`列名3` 数据类型 [列的属性],
...
`列名n` 数据类型 [列的属性]
)comment '我是表的注释名';
如果觉得某个表以后再也不会用到了,就可以把他删除了。在工作时,一定要注意表的删除,一旦删除,所有的数据将会丢失,慎重!!!
具体语句如下所示:
drop table 表1,表2,表3,表n;
/**可单独删除一个表,也可以同时删除多个表**/
和删库一样,如果该库里面不存在这个表,那么删除报错,所以要校验一下库中是否存在该表。具体语句如下所示:
drop table if exists 表名;
查看表结构一共有五种方式,具体如下:(可自己都执行一下看看效果)
describe 表名;
desc 表名;
explain 表名;
show columns from 表名;
show fields from 表名;
如果你不想要以列表的形式展示,想要查看原始建表SQL,你可以执行下面的语句:
show create table 表名\G;
想要使用某个库的某个表很简单,只需要在操作表的时候,在表前面加上库名即可。具体操作如下:
数据库名.表名
/**列如展示某个库的表结构**/
show create table 数据库名.表名\G;
一般一个表的建立初期会存在很多细节问题,所以我们需要返回修改以保证最终表的稳定性。虽然现在我们可以直接在Navicat上直接对表结构进行修改,但是我们还是要知道一些修改表的操作语句。
修改表名,这个地方提供两种方式给大家参考,具体选择哪一个,可以根据自己的爱好选择。
方式1:
alter table 旧表名 rename to 新表名;
方式1,一次只能修改一个表名,修改完之后,刷新数据库,或者直接查看当前数据库下的表就可以看表名是否修改成功,查看当前库下的所有表SQL前面有,忘记了的可以去复习一下。
方式2:
rename table 旧表名1 to 新表名1,旧表名2 to 新表名2,旧表名3 to 新表名3,...,旧表名n to 新表名n;
方式2,可以同时修改多个表的表名。
如果说,你在修改表名的时候指定了相应的数据库,那么复习上一小节的内容,具体SQL如下:
alter table 数据库名.旧表名 rename to 数据库名.新表名;
rename table 数据库名.旧表名1 to 数据库名.新表名1,数据库名.旧表名2 to 数据库名.新表名2,数据库名.旧表名3 to 数据库名.新表名3,...,数据库名.旧表名n to 数据库名.新表名n;
/**如果想要把A库的表转移到B库,可以这样操作**/
alter table 数据库名A.旧表名 rename to 数据库名B.新表名;
rename table 数据库名A.旧表名1 to 数据库名B.新表名1,数据库名A.旧表名2 to 数据库名B.新表名2,数据库名A.旧表名3 to 数据库名B.新表名3,...,数据库名A.旧表名n to 数据库名B.新表名n;
如果在建表完后,需要增加一些列,可以这样操作:
alter table 表名 add column 列名 数据类型 [列的属性];
如果你想要把新增的这一列,添加到第一列,可以这样:
/**添加到第一列**/
alter table 表名 add column 列名 数据类型 [列的属性] first;
如果想要在某一个列后面新增一列,可以这样:
/**添加到指定列的后面**/
alter table 表名 add column 列名 数据类型 [列的属性] after 指定列名;
有时候建表会保留几个备用列,当确定表结构时,就可以去掉这些列,删除命令如下:
alter table 表名 drop column 列名1;
alter table 表名 drop column 列名2;
alter table 表名 drop column 列名3;
我们还可以对列的信息进行修改,但是切记!!!在修改后的数据类型和属性一定要兼容表中现有的数据。
比如说原来的数据最多能存100个字符,现在表里的数据是三个字符,如果列的数据类型改成了只能村2两个字符,那么在修改的时候就会报错。
列的信息修改有两种方式
方式1:
alter table 表名 modify 列名 新数据类型 [新属性];
方式1 只能修改列的相关数据类型和属性。
方式2:
alter table 表名 change 旧列名 新列名 新数据类型 [新属性];
方式2不光可以修改数据类型和属性,还可以修改列名。可以根据自己的喜好选择。
另外我们还可以修改列的排列位置
alter table 表名 modify 列名 列的类型 列的属性 first;
alter table 表名 modify 列名 列的类型 列的属性 after 指定列名;
我们可以把6.3的三条SQL整合为一个SQL,这样简化操作。具体如下:
alter table 表名 操作1,操作2,操作3,...,操作n;
在讲列的属性前,我们先了解一下简单的查询和插入语句,应该在查询和插入的时候会受到个别列的约束。
查询语句我们一般用select关键字进行查询,用“*”代替所有的返回字段(在实际开发中,最好用具体的字段来返回查询结果,减少“*”代替查询)。具体SQL如下:
select * from 表名;
在MySQL中插入数据的时候是以行为单位的,一行数据也称为一条记录。具体语句如下:
insert into 表名(列1,列2,...) values(值1,值2,...);
MySQL也提供了一次性插入多条数据,具体的操作如下:
insert into 表名(列1,列2,...) values(值1,值2,...),(值1,值2,...),(值1,值2,...),...(值1,值2,...),...;
接下来开始介绍列的属性,相比在本章第一大节已经对列的属性有了一个模糊的了解,在本大节将会具体的介绍。
mysql列属性包括:NULL 、default、comment、primary key、unique key
在插入数据的时候,如果没有设值,那么这个值就会是NULL。换一种说法就是列的默认值就是NULL,其含义就是该列的值还没有被设置。如果我们不想列的默认值为NULL,而是使它变为有意义的默认值,那么我们就可以加一个default属性。具体操作如下:
`列名1` 数据类型 default 默认值
/**例如建表**/
create table if not exists 表名 (
`列名1` 数据类型 default 默认值,
...
`列名n` 数据类型 default 默认值
)comment '我是表的注释名';
如果我们不加默认值,其实下面这两个SQL是一样的
`列名1` 数据类型 default NULL
/**例如建表**/
create table if not exists 表名 (
`列名1` 数据类型,
...
`列名n` 数据类型
)comment '我是表的注释名';
create table if not exists 表名 (
`列名1` 数据类型 default NULL,
...
`列名n` 数据类型 default NULL
)comment '我是表的注释名';
有时候我们会要求表里面的某些列必须有值,不能存放NULL,这个时候我们就可以给这个列添加NOT NULL属性。具体操作如下:
`列名1` 数据类型 NOT NULL
/**例如建表**/
create table if not exists 表名 (
`列名1` 数据类型 NOT NULL,
...
`列名n` 数据类型 NOT NULL
)comment '我是表的注释名';
一旦我们设置了列的属性NOT NULL后,我们在插入数据的时候,改列的值就必须传,不能省略改列的值了,否则就会报错。
有时候在表中可以通过某个列或者某些列组合来确定唯一一个记录,我们可以把这个列或者这些列的组合称为候选键。一个表里面可能存在多个候选键,我们可以选择一个候选键作为表的主键。并且一个表最多只能有一个主键,主键的值不能重复,通过主键可以查到唯一的一条记录。
创建主键主要以下两种方式:
create table if not exists 表名 (
`列名1` 数据类型 primary key,
`列名2` 数据类型 [列的属性],
`列名3` 数据类型 [列的属性],
...
`列名n` 数据类型 [列的属性]
)comment '我是表的注释名';
create table if not exists 表名 (
`列名1` 数据类型,
`列名2` 数据类型 [列的属性],
`列名3` 数据类型 [列的属性],
...
`列名n` 数据类型 [列的属性],
primary key(`列1`)
)comment '我是表的注释名';
create table if not exists 表名 (
`列名1` 数据类型,
`列名2` 数据类型,
`列名3` 数据类型 [列的属性],
...
`列名n` 数据类型 [列的属性],
primary key(`列1`,`列2`)
)comment '我是表的注释名';
主键列默认具有NOT NULL属性,如果填入NULL值会报错。
除了主键以外,有时候我们也希望其他某个列或者列组合中的存储也是唯一的。这个时候就用到了UNIQUE约束(也可以称为UNIQUE键)。其作用就是给那些有必要保持唯一性的列和列组合添加UNIQUE约束。其方式也有两种。
方式1:如果是单个列声明unique约束,可以直接在列名后填写 unique或者unique key
create table if not exists 表名 (
`列名1` 数据类型,
`列名2` 数据类型 unique,
`列名3` 数据类型 [列的属性],
...
`列名n` 数据类型 [列的属性],
primary key(`列1`)
)comment '我是表的注释名';
方式2:可以把unique约束单独提出来声明,并且如果是多个列为约束的话必须提出来
unique [key] [约束名称] (列名1,列名2,...)
/**key和约束名称都可以省略不谢,但是MySQL会给你一个默认的约束名称**/
/**单个**/
create table if not exists 表名 (
`列名1` 数据类型,
`列名2` 数据类型,
`列名3` 数据类型 [列的属性],
...
`列名n` 数据类型 [列的属性],
primary key(`列1`),
unique key 约束名 (列名2)
)comment '我是表的注释名';
/**多个**/
create table if not exists 表名 (
`列名1` 数据类型,
`列名2` 数据类型,
`列名3` 数据类型,
...
`列名n` 数据类型 [列的属性],
primary key(`列1`),
unique key 约束名 (列名2,列名3)
)comment '我是表的注释名';
补充:
/**在表创建之后追加唯一键**/
alter table 表名 add unique key(字段列表); #unique key 或 unique 都可以
alter table 表名 modify 字段名 数据类型 unique; #修改已经存在的字段为唯一键
索引简单介绍
索引的作用: 提高查询效率、约束数据的有效性
1. 主键索引 primary key
2. 唯一键索引 unique key
3. 全文索引 textfull index
4. 普通索引 index
主键和unique约束都可以保证某个列或者列组合的唯一性。但是:
如果我们想要两个关联起来的表的数据联动起来,就要绑定一个外键,避免在A表里面可以查到数据,但是B表查不到,就很离谱了。所以MySQL提供了外键约束。SQL语句如下:
constraint [外键名称] foreign key(列1,列2,..) references 父表名(父列1,父列2,..);
/**外键名称也是一个可选的,如果我们不命名,MySQL会帮忙命名的**/
如果A表中的某个列或者某些列依赖于B表中的某个列或者某些列,那么就称A表为B表的字表,B表为A表的父表。子表和父表之间可以用外键关联起来。例如下面的SQL:
create table if not exists A (
`列名1` 数据类型,
`列名2` 数据类型,
`列名3` 数据类型 [列的属性],
...
`列名n` 数据类型 [列的属性],
primary key(`列1`),
unique key 约束名 (`列名2`),
constraint foreign key(`列3`) references B(`列3`)
)comment '我是表的注释名';
/**这样我们在插入A表数据的时候就会查询一下B表,如果没有就会报错**/
/**切记,在MySQL中,父表中被子表依赖的列或者列组合必须建立索引**/
AUTO_INCREMEN即“自动增长”。简明就是“自增”。我们可以使用整数类型或者浮点数类型的列声明该属性,在之后插入新纪录时,可以不显示指定改列的值,MySQL就会自动帮该列生成自动增长的唯一值。具体SQL如下:
列名 列的类型 ATUO_INCREMENT
/**建表**/
create table if not exists A (
`列名1` INT UNSIGNED ATUO_INCREMENT,
`列名2` 数据类型,
`列名3` 数据类型 [列的属性],
...
`列名n` 数据类型 [列的属性],
primary key(`列1`),
unique key 约束名 (`列名2`),
constraint foreign key(`列3`) references B(`列3`)
)comment '我是表的注释名';
/**UNSIGNED 代表无符号,在自增时前面不会补充0**/
注意:
设置AUTO_INCREMENT属性应该注意:
列的注释所要用的语句和表注释的一样,都是comment。具体SQL如下:
create table if not exists 表名 (
`列名1` 数据类型 primary key comment '我是主键',
`列名2` 数据类型 [列的属性] comment '列名2',
`列名3` 数据类型 [列的属性] comment '列名3',
...
`列名n` 数据类型 [列的属性] comment '列名n'
)comment '我是表的注释名';
一个正整数可以有三个写法:3、003、000003。他们虽表示的都是3,但是如果要在MySQL数据库中展示出后两者,就需要用到zerofill属性。
对于无符号整数类型的列,如果想在查询结果中让数字左边补0,就得给该列的属性加上zerofill。SQL语句如下:
create table zerofill_table_test (
id1 int unsigned zerofill,
id2 int unsigned
);
我们按照顺序执行下面的三个SQL:
insert into zerofill_table_test(id1,id2) VALUES(1,1);
SELECT * FROM zerofill_table_test;
show create table zerofill_table_test
你会发现,查询的id1是0000000001,id2是1,并且表结构中id1的数据类型为int(10),意思这个地方要写补充9个0,因为宽度为10,但是它的实际值为1.
在使用zerofill属性时,要注意:
在本章第一大节中我们指出了如何查询表结构,desc 表名;
数据库名、表名、列名、约束名称、别名、视图名、存储过程名等,这些名称统称为标识符。虽然MySQL没有对标识符做过多的限制。但是以下三个是不允许且不受欢迎的:
如果非要强行使用,那么要加上``,但是即使这样在给数据库名、表名、列名起名时仍然不能以空格字符结尾。
MySQL基础(三)-----表的基本操作和列的属性。就分享到这个地方,后续会更新MySQL基础(四)-----简单查询和带附带条件的查询。
今天的分享就到此结束了,如果觉得对您有帮助,麻烦给个三连!
以上内容为本人的经验总结和平时操作的笔记。若有错误和重复请联系作者删除!!感谢支持!!