a.数据库的操作: 操作对象的属性需要标识:database;table...
* create database 库名(纯小写);//在Mysql中新建一个数据仓库
* show databases;//显示Mysql中所有数据库
* drop database 库名;//直接删除掉该数据库
* use 库名;//在新建表之前一定要选择操作哪个数据库
b.数据表的创建:(create)
* use 库名;//在新建表之前一定要选择操作哪个数据库
* create table 表名(
列名1(英文) 列的类型 约束,//字符串的类型不是String 是varchar(30)
列名2(英文) 列的类型 约束,
);
* show tables;//看的是当前数据库的所有表
* drop table 表名;//删除表的结构
c.主键与外键与自动增长
主键:唯一,作为列的主键该列的数据不能重复
自动增长:作为自动增长的列,不用我们手动插入数据,由数据库来维护
外键:
Test1表 A列 B列
Test2表 B列 C列//在B列中加一个外键约束引用Test1表B列
Test2表中B列的取值必须是Test1表中B列中的数据
4.向表中插入数据(insert into...values...)
* INSERT INTO gjp_sort (sid,sname,parent,sdesc) VALUES //既写列名也写该列对应的值
(1,'工资收入','收入','我就喜欢发工资')
-- 写入数据的方式,是推荐
* INSERT INTO gjp_sort (sname,parent,sdesc) VALUES //如果有自动增长列,可以不用手动插入值
('基金收入','收入','我买了点基金')
* INSERT INTO gjp_sort VALUES //一个列名都不写,值默认从表左侧开始,都要插入
(3,'旅游支出','支出','黄金周旅游')
* INSERT INTO gjp_sort (sname,parent,sdesc) VALUES //可以批量插入值
('基金收入','收入','我买了点基金'),
('吃饭支出','支出','下馆子')
5.修改表结构(Alter)(了解,一般不建议在建好表上修改表结构)
6.修改表中的数据(Update...set...)
* update 表名 set 字段1=字段值,字段2=字段值 [where 修改条件]//[]代表可选
7.删除表中的数据(delete from):
drop是删除结构(数据库结构和表结构,结构删完,数据也没了)
delete是删除数据
* delete from 表名 [where 删除条件]
8.查询表中的数据库(select...from...)
select * from 表名//查询该表中所有列的数据
select 列名1,列名2... from 表名//查询出指定列的数据
select distinct 列名 from 表名//将指定的列的数据去除重复 distinct 有区别的
select 列名1 as '别名',列名2 as '别名',.... from 表名//将查询结果中的列起一个别名,但是原表中的列名不变
9.对表的字段(数值字段)进行排序
select 列名1,列名2... from 表名 order by 列名 [ASC/DESC]//ASC 升序(默认); desc 降序
10.聚合函数:
a.count函数
统计该表一共有多少行:
select count(*) from 表名 [where 筛选条件] 一般可用于统计人数
统计该列一共有多少条数据:(不包含值为NULL列)
select count(列名) from 表名 [where 筛选条件]
b.sum函数
select sum(列名) from 表名 [where 筛选条件] //将该列数据相加
c.avg函数
select avg(列名) from 表名 [where 筛选条件] //将该列数据 相加÷该列一共有多条
11.group by语句
a.group by 后面跟单列
//以gjp数据库的gjp_ledger为例
SELECT COUNT(*) as 'num',pstudy FROM person GROUP BY pstudy //pstudy列合并同类项后分组显示,同类项总数由count聚合
SELECT SUM(money),parent FROM gjp_ledger GROUP BY parent;//以parent列分组
//将parent列中parent值相同的合并为一组(支出组,收入组)
//分别对支出组和收入组进行money的求和
b.group by后面跟多列
SELECT SUM(money),parent,account FROM gjp_ledger GROUP BY parent,account //将parent与account组合相同的分为一组
//parent与account有多少种组合,最终就有多少组
//一般来说group by 后面跟的列 和select 后面查询的列一一对应
//否则数据无意义
c.having子句:
SELECT SUM(money)AS 'sumMoney',parent FROM gjp_ledger GROUP BY parent
HAVING sumMoney >= 20000//HAVING之和group by 联合使用,having是对分组后的结果进行过滤
为什么sql里面not in后面的子查询如果有记录为NULL的,主查询就查不到记录???原因很简单:
SELECT *
FROM dbo.TableA AS a
WHERE a.id NOT IN ( 2, NULL )
–等同于:
SELECT *
FROM Table_A AS a
WHERE a.id <> 2
AND a.ID <> NULL
由于NULL值不能参与比较运算符,导致条件不成立,查询不出来数据。
在MySQL中我们对数据表字段的修改命令使用alter
常用的方法
1.增加一个字段
alter table user add COLUMN new1 VARCHAR(20) DEFAULT NULL; //增加一个字段,默认为空
alter table user add COLUMN new2 VARCHAR(20) NOT NULL; //增加一个字段,默认不能为空
2.删除一个字段
alter table user DROP COLUMN new2; //删除一个字段
3.修改一个字段
alter table user MODIFY new1 VARCHAR(10); //修改一个字段的类型
alter table user CHANGE new1 new4 int; //修改一个字段的名称,此时一定要重新
//主键
alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);
//增加一个新列
alter table t2 add d timestamp;
alter table infos add ex tinyint not null default ‘0′;
//删除列
alter table t2 drop column c;
//重命名列
alter table t1 change a b integer;
//改变列的类型
alter table t1 change b b bigint not null;
alter table infos change list list tinyint not null default ‘0′;
//重命名表
alter table t1 rename t2;
加索引
mysql> alter table tablename change depno depno int(5) not null;
mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]);
mysql> alter table tablename add index emp_name (name);
加主关键字的索引
mysql> alter table tablename add primary key(id);
加唯一限制条件的索引
mysql> alter table tablename add unique emp_name2(cardnumber);
删除某个索引
mysql>alter table tablename drop index emp_name;
增加字段:
mysql> ALTER TABLE table_name ADD field_name field_type;
修改原字段名称及类型:
mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;
删除字段:
mysql> ALTER TABLE table_name DROP field_name;
mysql修改字段长度
alter table 表名 modify column 字段名 类型;
例如
数据库中user表 name字段是varchar(30)
可以用
alter table user modify column name varchar(50) ;