MySQL练习(一)

1.创建数据库demo: create database demo;

2.创建表:

use demo;
CREATE TABLE user(
	id int UNSIGNED auto_increment,
	name VARCHAR(20) not null,
	age int(3) UNSIGNED not NULL
)ENGINE=INNODB CHARSET=utf8;

这里简单说一下engine的概念,即存储引擎,MySQL常用的存储引擎有两个,一个是Myisam,一个是innodb,区别在于前者不支持事物,速度快,后者反之。

3.修改表之增加列:

    语法:

alter table tbName 
add 列名称1 列类型 [列参数] [not null default ]

如修改user表增加列:

alter TABLE user change department department varchar(11);

4.修改表之修改列:

    语法:

alter table tbName
change 旧列名  新列名  列类型 [列参数] [not null default ]

如:修改user表的department字段改为不可为null:

alter TABLE user change department department varchar(11) not null;

5.修改表之减少列:

语法:

alter table tbName 
drop 列名称;

如:删除user表的department列字段:

ALTER TABLE user drop department

6.修改表之增加主键:

  语法:

alter table tbName add primary key(主键所在列名);

如:将user表的id列设为主键:

alter table user add PRIMARY key(id);

7:修改表之删除主键:

alter table user drop primary key

8:修改表之增加索引:

语法

alter table tbName add [unique|fulltext] index 索引名(列名);

如:将user表的age字段增加索引:

alter table user add UNIQUE index age_index(age);

9.修改表之删除索引

语法

alter table tbName drop index 索引名;

如:删除刚刚创建的索引

ALTER TABLE USER DROP index age_index

10.清空表数据:

truncate user

11.增删改查基本操作:

5.1 插入数据 
	insert into 表名(col1,col2,……) values(val1,val2……); -- 插入指定列
	insert into 表名 values (,,,,); -- 插入所有列
	insert into 表名 values	-- 一次插入多行 
	(val1,val2……),
	(val1,val2……),
	(val1,val2……);


5.3修改数据
	update tablename 
	set 
	col1=newval1,  
	col2=newval2,
	...
	...
	colN=newvalN
	where 条件;

5.4,删除数据    delete from tablenaeme where 条件;

5.5,    select     查询

  (1)  条件查询   where  a. 条件表达式的意义,表达式为真,则该行取出
			   b.  比较运算符  = ,!=,< > <=  >=
                           c.  like , not like ('%'匹配任意多个字符,'_'匹配任意单个字符) 
				in , not in , between and
                           d. is null , is not null			
  (2)  分组       group by 
			一般要配合5个聚合函数使用:max,min,sum,avg,count
  (3)  筛选       having
  (4)  排序       order by
  (5)  限制       limit

12.内连接与外连接:

    先对数据库demo做出如下修改:

create table class
(
	id int(11) not null PRIMARY key auto_increment,
	class_name VARCHAR(11) not null,
	grade varchar(11) not null)ENGINE=INNODB CHARSET=utf8;
alter table user add PRIMARY key(id);
alter TABLE user add c_id int(11) not null;

创建新表class班级表,修改user表增加主键以及增加c_id列。

插入数据:

insert into user VALUES(1,'张三',11,1),(2,'李四',32,1),(3,'王五',24,2),(4,'赵流',45,3),(5,'小伟',33,5);
INSERT into class VALUES(1,'软件一班','大一'),(2,'软件二班','大二'),(3,'软件三班','大一'),(4,'计算机网络一班','大二')

12.1:内连接查询:

语法:.... inner join ..... on ... ...

如:user表内连接class表,条件为user.cid = class.id:

SELECT * from user inner join class on user.c_id = class.id

结果如下:


12.2:左连接:

同样的查询要求,如下:

SELECT * from user left  join class on user.c_id = class.id

结果:


12.3:右连接:

如下:

SELECT * from user right  join class on user.c_id = class.id

结果:


总结:内连接是根据条件查询两表的交集,即符合连接条件的结果保留,不符合的全部丢弃。左外连接查询以左表为基准,左表的数据保留,右表不符合连接条件的丢弃,而右外链接正好是相反的。

13.子查询:

13.1:where型子查询:即where条件后面跟的是一条查询语句。

如:

SELECT * from user where c_id in (select id FROM class)

结果:


13.2:from型子查询:内层查询结果作为一张表,以供外层sql进行再次查询:

如:

SELECT class_name from (select * from class where id = 1) as temp

结果:


13.3:exists子查询:后面的参数,可以是任意一个子查询,这个子查询的作用相当于测试,它不产生任何数据,只返回TRUE或FALSE ,当返回值为TRUE时,外层的查询才会执行。

如:看一下结果返回false的情况:

select * from class where EXISTS (select * from class where id >7)

结果:


注意:外层的select * from class这条sql语句并没有执行。

那么,返回true的情况,只需要将上面的sql中id>7改为大于2,即返回true执行查询语句:

结果:


14.这里记录一下索引的相关概念:

    索引的作用在于提高了查询速度,但是降低了增删改的速度,所以这里要根据实际需求来使用,因此,我们常常将经常作为查询条件的列添加索引。值越分散的列,索引的效果越好。

    索引类型:

        primary key:主键索引。

        index :普通索引

        unique index :唯一性索引

        fulltext index:全文索引(对中文无效)

    





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值