初学SQL(2)

在学习了sql的简单语句之后,学习了更多的sql语法。

一.between

为了查询出值1和值2之间的所有值,我们就用between来实现,select  列 from 表 where 条件列 betweem 值1 and 值2 ;如果要查询的是除了值1和值2两个值的值,那就在between and前加一个not。select 列 from 表 where 条件列 not between 值1 and 值2。在不同的数据环境中,对于边界值的取定有着不同的结果。如果是between...and...则会去到边界值,倘若是not between...and...则不会取到边界值。

我们有时候我们需要查询的值可能存在同一个表中,而我们只能有一个结果集,那么我们就可以同时查询多个表。select 表1.列1,表2.列1 from 表1,表2;这样就可以查询出多个表。

二.Alias(AS)

AS是用作给表和列等来起别名用的,以便我们方便阅读和记忆。表名AS表的别名,列名AS列的别名。我们一般都这样用别名:select 表1的别名.列1的别名,表2的别名.列1的别名,表3的别名.列1的别名 from 表1 AS表1的别名,表2AS表2的别名。例:select one.one_id,two.two_id,three_id from student as one,two;

三.JOIN

很多时候我们的数据库不止要做一张表,当很多张表出现的时候会让我们觉得数据很混杂,需要一个把多张表的值传到一个结果集上面的方法,那就是用JOIN。它可以同时访问多个表,并且把结果集返回到一张表上面,我们需要使用这几张表里面的相关联的字段的值来进行筛选返回值。select * from 表1,表2 where 表1.id=表2.id;

inner join:如果两个表中至少有一个匹配,就返回行。select * from [inner]  join  表2on 表1.id=表2.id;例:select * from join student on score.id=student.id;

Left join:既是是表2中没有匹配的,也会从表1中返回所有行。select * from 表1 left join 表2 on 表1.id=表2.id;如果表1没有匹配表2的值,表1就会用nul配对。

right join:既是在表1中没有匹配的,也会在表2中返回所有行。select * from 表1 right join 表2 on 表1.id=表2.id;如果表2没有匹配表1的值。表2就会用null配对。

full join:只要和其中一个表中存在配对,就能返回行。select * from 表1 full join 表2 on 表1.id=表2.id;此功能只能在5.1以上才能使用此 全联接功能。

四.UNION

UNION关键字,联合,用于合并两个或多个select语句的结果集。select 列 from 表 (换行)UNION(换行) select 列 from 表;(此处加分号)。两次查询子句返回的结果集的列数必须一样,类型相似。使用UNION会自动去掉重复行,如果不去掉就在UNION后面加all 即:select 列 from 表(换行)UNION ALL(换行) select 列 from 表;如果在select语句中没有order by,limit,就不用()。如果有order by,limit,即:(select 列 from order by id limit(10)(换行)UNION ALL (换行)(select 列 from order by id desc limit(10));使用了order by和limit就需要加上括号,如果没有使用就不需要括号。还有,如果只使用排序的order by,而不使用limit该order by也会失效。.返回结果集的字段名,是用第一个查询语句的字段名来命名。用于将两个查询逻辑完全相反的结果集合并到一起。

五.SQL约束

sql约束是用来约束进入该表的数据的类型。一般是在建表和建表之后使用,建表后用alter table语句修改。

NOT NULL(非空):该字段不能为空,在插入一个数据的时候,如果该数据中的这个/规定不能为空的字段为空,则该数据不能插入。例:create table student(id int(100) not null,name varchar(20));insert into student(name)values('xiaoming');输入该语句会报错,不能正确插入表中。当insert into student(id)values('1');该条数据不会因为name为null而报错。是因为我们规定了id这个字段不能为空。

UNIQUE(唯一性):该约束是为了标识该字段的数据唯一性,就是问了数据不重复。

在建表的时候如果需要规定:create table student(id int(100),name varchar(20) unique(id));意思是id这个字段名里面的数据都是唯一的,不能重复。

建表之后追加unique:alter table student add unique(id);(单个唯一性),多列唯一性:alter table student add constraint unique (id,name);向表中添加唯一值规定的时候,观察表中所需加的字段名处是否已经有了重复,如果重复则无法再加此约束。

需要删除该约束的时候,我们用:alter table student drop index unique(id)(只有一个id有唯一性的情况下);添加多列的UNIQUE约束时,这个约束名,需要我们来重命名。

PRIMARY KEY(主键):主键,用于约束唯一标识数据库表中的每条记录。设置主键的时候,主键所在的列都是唯一值,数据不能重复,主键所在的列不能有null值,并且每张表中只能有一个主键。

建表时设主键:create table student(id int(100),name varchar(20)primary key(id));此处设id为主键。

在建表后追加主键:alter table student add primary key(id);设id为这张表的主键。

删除主键:alter table student drop primary key。每张表只有一个primary key,所以不用指明其所在的字段。

FOREIGN KEY(外键):外键约束,用来指向另一个表中的PRIMARY KEY。外键用来预防破坏表之间连接的动作。也可以防止非法数据的插入因为外键必须是他指向的那个表的值之一。

在建表的时候设置外键:create table student(id int(100),name varchar(20)FOREIGN KEY(id) reference score(id));

在建表后追加外键:alter table student add foreign key(id) reference score(id);

删除FOREIGN约束,需要外键约束(constraint)alter table student drop foreign key 外键约束名 ;

CHECK(值限定):设定列的值得范围。

添加check约束的方法,create table student(id int(100),name varchar(20)...,check(字段名>=0));

追加的方法,alter table student add check(id>0)(单列追加);alter table student add constraint 约束名 check(id>=0 AND year<=40)(多列追加);
删除约束的方法:alter table student drop check 约束名

DEFAULT(默认值):设定的默认值。我们MySQL会给这些列自动加一个默认值为NULL的默认值。我们如果追加默认值会覆盖掉前面设定的默认值。如果删除默认值,他是不会自动回到default NULL。而是没有了默认值,没有默认值那么我们插入数据的时候就一定需要插入这一列的数据,这个数据也可以是NULL。

添加的方法:

CREATE TABLE 表名 (字段名 字段类型 DEFAULT 默认值,字段名 字段类型...);

例如:create table student(id int(100)default ‘001’,name varchar(20));
追加的方法:
ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值 ;

例如:alter table student alter id set default ‘001’;
删除约束的方法:
ALTER TABLE 表名 ALTER 列名 DROP DEFAULT
;

例如:alter table student alter id drop default;

六.View视图

约束用于限制介入表的数据的类型。可以简化某些我们较为复杂的业务逻辑,视图用于读取数据,插入数据要受原来的表的限制,视图虽然看起来是一张表,但是他的数据完全不是自己控制,他的所有数据都是存储于其他的表。视图是从一个表或多个表中导出的虚表,它与常规表不同之处在于它并不存储数据,它只是在一个存储的查询中定义。视图同真实表一样,也包含一系列带有名称的列和数据。视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。向视图提供数据内容的语句为select语句, 可以将视图理解为存储起来的select语句。视图向用户提供基表数据的另一种表现形式

创建视图:create view  视图名 AS select * 查询语句。而修改视图和创建视图的语句是一样的。

所以修改视图时:create view 视图名 AS select * from 查询语句。

删除视图:drop view 视图名;


七.事务

事务是一个能够更新数据和访问数据的程序执行单元,事务由事务开始和事务结束之间执行的全体操作组成。

事务具有四个属性:原子性,一致性,隔离性,持久性。

原子性:执行一组sql语句,它们中只要有一条语句执行失败,整个事务都失败。

一致性:在事务开始之前和事务结束以后,数据库的设定是一样的。

隔离性:当使用事务对数据进行操作时,我们另外的会话是无法对此条数据进行操作的。我们的InnoDB使用的是数据行锁。

持久性:当事务成功,数据将提交到数据库,数据就被持久化了。

在事务中,一个操作中,有任何一个步骤执行失败就会返回到操作前的初始状态。只有所有步骤都成功了,才算是操作成功,成功后数据库会得要相应的变化。

事务实现原理:首先执行sql语句,再保存到日志文件,随后将执行结果提交到服务器,完成整个操作。一般mysql是有自动提交功能,我们可以设置为我们操作的提交功能【SET @@autocommit = 0; (1,为自动提交;0,为手动提交)】,完成了sql语句之后,提交到数据库【commit】,做出向相应的改变。

在还没有提交(commit)到数据库之前,若果你不想改变数据库,就用rollback来使数据库恢复到原始状态。

流程一般为:启动事务: start transaction,

回到事务启动前:rollback;

提交:commit;

如果我们不想会滚到事务启动前,那我们就在一个地方设置savepoint(点名,设置标记),让事务(rollback to)能够回滚到能够,我们所设置的此点的状态。



猜你喜欢

转载自blog.csdn.net/sweet_smile5/article/details/41312857