组成:
Oracle(全球市场占额1/3,功能强大!),DB2,Informix,Sybase,SQL Server(微软),ProstgreSQL面向对象数据库,MySQL(底层用java编写,小巧玲珑),Access(Office系列的,基本无人用),SQLite(安卓手机用,非常小,仅几KB)等
create database mydb;
创建数据库
show create database mydb;
查看创建数据库的语句
use mydb;
改变当前数据库
drop database mydb;
删除数据库
show databases;
查看所有的数据库
alter database mydb1 character set utf8;
修改数据库mydb1的字符集为utf8
create database mydb1 character set gbk;
创建数据库mydb1,字符集用gbk
show collation;
查看数据库中所有的校对规则
show collation like ‘%gb%’;
查看部分校验规则,%相当于*号
create collation mydb2 character set gbk collate gbk_bin;
创建数据库mydb2,字符集用gbk,校验规则用gbk_bin
create table t(
id int ,
name varchar(20)
);
创建表t
show create table t;
查看创建表的源码
create table t1(
id int ,
name varchar(20)
)character set gbk;
创建表t1,并使用字符集gbk
create table t3(
id int,
name varchar(20),
optime timestamp
);
创建一个表t3,timestamp是时间类型,系统会自动插入
select * from t3;
查询t3中的数据,* 表示所有字段
insert into t3(id,name) values(1,’张三’);
向t3插入一条数据
insert t3(id,name) values(2,”李四”);
insert t3 values(3,’王五’,’2016-1-1’);
省略字段,意味着所有的字段都必须给定值(自增除外)
set character_set_client=gbk;
设置客户端的字符集为gbk
set character_set_results=gbk;
设置结果集的字符集为gbk
update t3 set name=’王五’ where id=3;
将表t3的第三条记录姓名改为“刘五”
update t3 set name=’孙一’;
将所有记录的名字都改为“孙一”
update t3 set id=5,name=’郑二’ where id=2;
修改多个字段
delete from t3;
删除所有记录
truncate table t3;
删除所有记录
alter table t3 add address varchar(100);
给表t3增加一个字段address
alter table t3 drop column address;
删除字段address(整列)
desc t3;
查看表的结构
DQL:Data Query Language
作用:查询数据
常用关键字:SELECT
创建一个学生表
create table stu
(
id int,
name varchar(30),
sex char(2),
age int,
address varchar(50)
);
insert into stu values(1,'张无忌','男',20,'北京');
insert into stu values(2,'小龙女','女',18,'古墓');
insert into stu values(3,'黄蓉','女',15,'桃花岛');
insert into stu values(4,'韦小宝','男',24,'扬州');
insert into stu values(5,'乔峰','男',34,'雁门关');
insert into stu values(6,'张果老','男',34,'雁门关');
insert into stu values(7,'老张','男',38,'黑木崖');
insert into stu values(8,'黄药师','男',34,'桃花岛');
insert into stu values(9,'张','女',34,'桃花岛');
insert into stu values(10,'张','男',34,'桃花岛');
查看所有的数据
select * from stu;
查看小龙女的信息
select * from stu where id = 2;
select * from stu where name='小龙女';
查看年龄在20~30之间的人
select * from stu where age >= 20 and age <= 30;
//包括20和30
//select * from stu where age between 20 and 30;
查看所有人的姓名
select name from stu;
查看所有人的姓名,年龄,性别
select name,age,sex from stu;
select * from 表名 where 字段名 like 字段表达式
%表示任意字符数
_表示任意的一个字符
查询所有以“张”开头的人
select * from stu where name like '张%';
查询姓名中含有“张”这个字的人
select * from stu where name like '%张%';
查询姓名中含有“张”这个字并且姓名的长度是3个字的人
select * from stu where name like '张__' or name like '_张_' or name like '__张';
查询表中总共有几种性别
select distinct sex from stu;
查询姓名和年龄整体都不同的记录
select distinct name,set from stu;
创建新表分数表
create table score
(
id int,
sid int,
china int,
english int,
history int
);
insert into score values(1,1,68,55,81);
insert into score values(2,3,86,23,34);
insert into score values(3,4,34,87,76);
insert into score values(4,6,98,99,93);
insert into score values(5,7,24,39,66);
把每人的china加上10分
select id,china+10,english,history from score;
as 可以省略
select id as 编号,china as 语文,english as 英语,history 历史 from score;
查看所有人考试的总分
select id,china + english + history 总分 from score;
查看所有总分大于200的人
select * from score where china+english+history > 200;
查询家在桃花岛或者黑木崖的人
select * from stu where address in('桃花岛','黑木崖');
查询没有参加考试的人
select id,name from stu where id not in(select sid from score);
查询没有地址的人
select * from stu where address is null;
查询地址不是空的人
select * from stu where address is not null;
对考试的人的语文升序排序
select * from score order by china asc;
对考试的人的历史降序排序
select * from score order by history desc;
根据多个字段进行排序(语文升序,对语文成绩一样的人再进行历史降序)
select * from score order by china asc,history desc;
根据考试总分降序排序
select * from score order by china + english + history desc;
为了保证插入到数据中的数据是正确的,防止用户可能存在的输入错误
实体完整性
域完整性
指数据库表的列(即字段)必须符合某种特定的数据类型或约束。
参照完整性
保证一个表的外键和另一个表的主键对应
创建一个表
create table stu
(
id int primary key, #主键约束(唯一,非空)
name varchar(30) unique, #唯一约束(可以为空,但是只能有一个)
sex char(2) not null, #非空约束
age int check(age > 0 and age < 100), #检查约束(MySQL不支持)
address varchar(50) default '北京' #默认约束
)
再创建一个表和上表建立联系
create table score
(
id int primary key,
sid int,
china int,
english int,
history int,
constraint sid_FK foreign key(sid) references stu(id)
)
在表外创建引用约束
alter table score add constraint stu_score_FK foreign key (sid) references stu(id);
删除约束
alter table score drop foreign key stu_score_FK;
id自动增长(系统帮你创建)
create table t
(
id int primary key auto_increment,
name varchar(20)
);
insert into t(name) values('张三');
查询每个人的考试成绩
#交叉查询
select * from stu s cross join score c on s.id=c.sid;
查询参加考试的人的成绩
#内连查询
select name,china,english,history,china+english+history 总分 from stu s inner join score c on s.id = c.sid;
查询所有人的成绩
#左外连
select name,china,english,history,china+english+history 总分 from stu s left join score c on s.id = c.sid;
#右外连
select name,china,english,history,china+english+history 总分 from stu s right join score c on s.id = c.sid;
查询没有参加考试的人
#子查询
select * from stu where id not in(select sid from score);
查询参加考试的人的成绩
select name,china,english,history,china+english+history 总分 from stu s,score c where s.id=c.sid;
聚合函数
sum max min avg count
分组函数
根据多个字段进行分组
select count(*) 数量,sex,name from stu group by sex,name;
分组条件
select count(*),sex from stu where age >= 16 group by sex having count(*)>1;
数据库备份
#在退出数据库以后在dos命令行执行
mysqldump -u root -proot 数据库名>test.sql
数据库恢复
或者
#在退出数据库以后在dos命令行执行
mysql -u root -proot 数据库名>test.sql