MySQL命令学习4
MYSQL学习4
1 .插入数据
① 使用 insert
使用insert向数据表中添加数据
insert into users(username,password,userage) values('ddddd','123456',27);
如上插入数据成功,由于id为主键,自增,因此不需要给其添加值,添加成功后下面显示一行受影响;
②插入多行数据
可以使用多条insert语句,但是会比较繁琐
insert into users(username,password,userage)
values('ddddd','123456',27),
('eeeee','123456',28);
如图所示,values()后面添加即可,但是必须与前面的字段对应;
其中单条insert语句有多组值,每组值用一对圆括号括起来,用逗号分隔;
2 .更新与删除数据
① 使用update更新数据
进行更新时一定主意给与条件,否则很容易就会更新所有的行;
#例如users数据表中有,id,username,password,userage
#我们需要修改id=6的用户的密码改为666666
update users
set password='666666'
where id=6;
如图修改完毕,密码修改成功;
② 使用delete删除数据
需要注意给予条件,否则可能会删除所有行
如上图中我们想删除id=10的用户
delete from users where id=10;
数据没了,删除成功;
更快的删除,如果想删除表中所有的行,不要使用delete,可以使用truncate table语句,它完成相同的工作,但速度更快(truncate实际时删除原来的表并重新创建一个表,而不是逐行删除表中的数据)
- 除非确实打算更新或者删除每一行,否则绝对不要使用不带where子句的update或delete语句;
- 保证每个表都有主键,尽可能像where子句那样使用它(可以指定各主键,多个值或值的范围);
- 在对update或delete语句使用where子句前,应该先用select进行测试,保证它过滤的是正确的记录,以防编写的where子句不正确;
- 使用强制实施引用完整性的数据库,这样MySQL将不允许删除具有与其他表相关联的数据的行;
3 .创建与操纵表
① 创建表
例如:创建car表,有字段id,name,price三个字段
create table car(
id int(10) not null primary key,
name varchar(20),
price double
);
表创建成功,not null表示该字段不能为空,primary key表示该字段为主键,int(10)为字段类型与长度,varchar(20)为可变字符串,长度20,double为浮点类型数据
插入一条数据
理解NULL,不要把NULL值与空串相混淆,NULL值是没有值,它不是空串,如果指定’ ',这在NOT NULL列中是允许的,空串是一个有效的值,它不是无值,NULL值用关键字NULL而不是空串指定。
② 主键
主键必须唯一,即,表中的每个行必须具有唯一的主键值,如果主键使用单个列,则它的值必须唯一,如果使用多个列,则这些列的组合值必须唯一。
使用primary key关键字,为主键约束。
主键和NULL值 主键为其唯一标识表中每个行的列,主键中只能使用不允许NULL值的列,允许NULL值的列不能作为唯一标识。
③ auto_increment关键字
被它标识的字段,表示该字段自增,当插入行时,该字段的值会加一,每个表只允许一个auto_increment列,而且它必须被索引(如,通过使它成为主键)。
覆盖auto_increment:如果一个列被指定为auto_increment,则它需要使用特殊的值吗?你可以简单地在insert语句中指定一个值,只要它是唯一的即可,该值将被用来替代自动生成的值。后续的增量将开始使用该手工插入的值。
获取最后一次插入数据的id
④ 指定默认值
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
我们需要做如下查询:
查询每个用户的角色名并显示,我们前面做过此查询,使用关联查询即可做到
select user.id,username,role.name as role_name
from user,role
where user.rid=role.id;
使用关联查询似乎很麻烦,我们再次使用视图做相同查询,创建一个名为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;
如图创建了一个视图(虚拟表),查询语句和单表查询无任何区别
如图虚拟的表结构相当于创建了一个新的表,不过物理上它是不存在的
为什么使用视图?
- 重用SQL语句
- 简化复杂的SQL操作。在编写查询后,可以方便地重用而不必知道它的基本查询细节。
- 使用表的组成部分而不是整个表。
- 保护数据,可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。
- 更改数据格式和表示,视图可返回与底层表的表示和格式不同的数据。
性能问题:
因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。如果你用多个联结和过滤创建了复杂的视图或嵌套了视图,可能会发现性能下降得很厉害。因此,在部署使用了大量视图的应用前,应该进行测试。
② 视图的规则和限制
- 与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)。
- 对于可以创建的视图数目没有限制。
- 为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。
- 视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。
- order by 可以用在视图中,但如果从该视图检索数据select中也包含order by,那么该视图中的order by将被覆盖。
- 视图不能索引,也不能有关联的触发器或默认值。
- 视图可以和表一起使用。例如,编写一条联结表和视图的select语句。
删除视图:drop view 视图名;
小结:视图为虚拟的表。他们包含的不是数据而是根据检索数据的查询。视图提供了一种MySQL的select语句层次的封装,可用来简化数据处理以及重新格式化基础数据或保护基础数据。
上一篇: 林芝之行发现无以名状的没
下一篇: JAVA设计模式学习9——原型模式