欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL命令学习4

程序员文章站 2022-05-03 18:43:25
...

MYSQL学习4

1 .插入数据

① 使用 insert

使用insert向数据表中添加数据

 insert into users(username,password,userage) values('ddddd','123456',27);

MySQL命令学习4
如上插入数据成功,由于id为主键,自增,因此不需要给其添加值,添加成功后下面显示一行受影响;

②插入多行数据

可以使用多条insert语句,但是会比较繁琐

 insert into users(username,password,userage) 
 values('ddddd','123456',27),
 	   ('eeeee','123456',28);

MySQL命令学习4

如图所示,values()后面添加即可,但是必须与前面的字段对应;

其中单条insert语句有多组值,每组值用一对圆括号括起来,用逗号分隔;

2 .更新与删除数据

① 使用update更新数据

进行更新时一定主意给与条件,否则很容易就会更新所有的行;

#例如users数据表中有,id,username,password,userage
#我们需要修改id=6的用户的密码改为666666
update users
set password='666666'
where id=6;

MySQL命令学习4
MySQL命令学习4

如图修改完毕,密码修改成功;

② 使用delete删除数据

需要注意给予条件,否则可能会删除所有行

如上图中我们想删除id=10的用户

delete from users where id=10;

MySQL命令学习4
数据没了,删除成功;

更快的删除,如果想删除表中所有的行,不要使用delete,可以使用truncate table语句,它完成相同的工作,但速度更快(truncate实际时删除原来的表并重新创建一个表,而不是逐行删除表中的数据)

  1. 除非确实打算更新或者删除每一行,否则绝对不要使用不带where子句的update或delete语句;
  2. 保证每个表都有主键,尽可能像where子句那样使用它(可以指定各主键,多个值或值的范围);
  3. 在对update或delete语句使用where子句前,应该先用select进行测试,保证它过滤的是正确的记录,以防编写的where子句不正确;
  4. 使用强制实施引用完整性的数据库,这样MySQL将不允许删除具有与其他表相关联的数据的行;

3 .创建与操纵表

① 创建表

例如:创建car表,有字段id,name,price三个字段

create table car(
	id int(10) not null primary key,
    name varchar(20),
    price double
);

MySQL命令学习4

表创建成功,not null表示该字段不能为空,primary key表示该字段为主键,int(10)为字段类型与长度,varchar(20)为可变字符串,长度20,double为浮点类型数据

插入一条数据
MySQL命令学习4

理解NULL,不要把NULL值与空串相混淆,NULL值是没有值,它不是空串,如果指定’ ',这在NOT NULL列中是允许的,空串是一个有效的值,它不是无值,NULL值用关键字NULL而不是空串指定。

② 主键

主键必须唯一,即,表中的每个行必须具有唯一的主键值,如果主键使用单个列,则它的值必须唯一,如果使用多个列,则这些列的组合值必须唯一。

使用primary key关键字,为主键约束。

主键和NULL值 主键为其唯一标识表中每个行的列,主键中只能使用不允许NULL值的列,允许NULL值的列不能作为唯一标识。

③ auto_increment关键字

被它标识的字段,表示该字段自增,当插入行时,该字段的值会加一,每个表只允许一个auto_increment列,而且它必须被索引(如,通过使它成为主键)。

覆盖auto_increment:如果一个列被指定为auto_increment,则它需要使用特殊的值吗?你可以简单地在insert语句中指定一个值,只要它是唯一的即可,该值将被用来替代自动生成的值。后续的增量将开始使用该手工插入的值。

获取最后一次插入数据的id

MySQL命令学习4
④ 指定默认值

create table car(
	id int(10) not null primary key,
    name varchar(20),
    price double default 100
);

假如插入值时,没有给定price列的值,则会使用默认值100填充

⑤ 更新表

使用alter table来修改表结构

小心使用alter table ,应该在进行改动前做一个完整的备份(模式和数据的备份)。数据库表的更改不能撤销,如果增加了不需要的列,可能不能删除它们,类似,如果删除了不应该删除的列,可能会丢失该列中的所有数据。

⑥ 删除表

使用 drop table 表名; 即可删除;

⑦ 重命名表

使用 rename table 原表名 to 新表名;

可以使用逗号修改多个表;

rename table 原表名 to 新表名,原表名 to 新表名;

4 .使用视图

MySQL5版本及以上支持视图

①创建和使用视图

视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。

我们做个例子:

有两张表user 表与role表,user表的rid为外键,对应role表的主键id
MySQL命令学习4

我们需要做如下查询:

查询每个用户的角色名并显示,我们前面做过此查询,使用关联查询即可做到

select user.id,username,role.name as role_name 
from user,role
where user.rid=role.id;

MySQL命令学习4

使用关联查询似乎很麻烦,我们再次使用视图做相同查询,创建一个名为user_role的视图,相当于创建表名为user_role的虚拟表,表的字段为id,username,role_name

#使用视图 as后面与前面的关联查询一模一样
create view user_role
as
select user.id,username,role.name as role_name 
from user,role
where user.rid=role.id;

MySQL命令学习4
如图创建了一个视图(虚拟表),查询语句和单表查询无任何区别

MySQL命令学习4

如图虚拟的表结构相当于创建了一个新的表,不过物理上它是不存在的

为什么使用视图?

  • 重用SQL语句
  • 简化复杂的SQL操作。在编写查询后,可以方便地重用而不必知道它的基本查询细节。
  • 使用表的组成部分而不是整个表。
  • 保护数据,可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。
  • 更改数据格式和表示,视图可返回与底层表的表示和格式不同的数据。

性能问题:

因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。如果你用多个联结和过滤创建了复杂的视图或嵌套了视图,可能会发现性能下降得很厉害。因此,在部署使用了大量视图的应用前,应该进行测试。

② 视图的规则和限制

  • 与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)。
  • 对于可以创建的视图数目没有限制。
  • 为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。
  • 视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。
  • order by 可以用在视图中,但如果从该视图检索数据select中也包含order by,那么该视图中的order by将被覆盖。
  • 视图不能索引,也不能有关联的触发器或默认值。
  • 视图可以和表一起使用。例如,编写一条联结表和视图的select语句。

删除视图:drop view 视图名;

小结:视图为虚拟的表。他们包含的不是数据而是根据检索数据的查询。视图提供了一种MySQL的select语句层次的封装,可用来简化数据处理以及重新格式化基础数据或保护基础数据。