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:全文索引(对中文无效)