MySQL数据库
创建数据库 : create database 数据库名称 [character set 字符集 collate 字符集校对规则];
查看数据库服务器中所有的数据库:show databases;
查看某个数据库的定义信息: show create database 数据库名称;
修改数据库: alter database 数据库名称 character set 字符集 collate 校对规则;
删除数据库: drop database 数据库名称;
切换数据库: use 数据库名称;
查看当前正在使用的数据库: select database();
创建表: create table 表名称(字段名称 字段类型(长度) 约束,字段名称 字段类型(长度) 约束…);
约束:
主键约束:primary key 主键约束默认就是唯一 非空的
唯一约束:unique
非空约束:not null
例:
create database web_test1; use web_test1; create table user( id int primary key auto_increment, username varchar(20) unique, password varchar(20) not null, age int, birthday date );
查看某个数据库下的所有的表语法:show tables;
查看某个表的结构信息语法:desc 表名;
删除表: drop table 表名;
修改表: 添加列 alter table 表名 add 列名 类型(长度) 约束;
修改列类型 长度和约束 alter table 表名 modify 列名 类型(长度) 约束;
删除列 alter table 表名 drop 列名;
修改列名称 alter table 表名 change 旧列名 新列名 类型(长度) 约束;
修改表名 rename table 表名 to 新的表名;
修改表名 rename table 表名 to 新的表名;
SQL对数据库表的记录进行操作
SQL添加表的记录
向表中插入某些列:insert into 表名 (列名1,列名2,列名3…) values (值1,值2,值3…)
向表中插入所有列:insert into 表名 values (值1,值2,值3…);
注意事项
1.值的类型与数据库中表列的类型一致。
2.值的顺序与数据库中表列的顺序一致。
3.值的最大长度不能超过列设置最大长度。
4.值的类型是字符串或者是日期类型,使用单引号引起来。
直接向数据库中插入中文记录会出现错误!!!
解决方法:
show variables like '%character%'; --查看数据库中与字符集相关参数:
需要将MySQL数据库服务器中的客户端部分的字符集改为gbk。
找到MySQL的安装路径:my.ini文件,修改文件中[client]下的字符集
SQL修改表的记录
update表名 set 列名=值,列名=值[where 条件];
SQL删除表的记录
delete from 表名 [where 条件];
注意事项
1.删除表的记录,指的是删除表中的一行记录。
2.删除如果没有条件,默认是删除表中的所有记录。
删除表中的记录有两种做法:
delete from user;
删除所有记录,属于DML语句,一条记录一条记录删除。事务可以作用在DML语句上的
truncate table user;
删除所有记录,属于DDL语句,将表删除,然后重新创建一个结构一样的表。事务不能控制DDL的
SQL查看表的记录
基本查询 select distinct *|列名 from 表 [条件]; ([distinct]表示不显示重复的值,可以不要)
查看学生姓名和学生的总成绩
select name,english+chinese+math from exam;
别名查询
select name,english+chinese+math as sum from exam;
条件查询
使用where子句
> , < , >= , <= , <> ,=
like:模糊查询
in:范围查询
条件关联:and , or ,not
like可以进行模糊查询,在like子句中可以使用_或者%作为占位符。_只能代表一个字符,而%可以代表任意个字符。
* like ‘李_’ :名字中必须是两个字,而且是姓李的。
* like ‘李%’ :名字中姓李的学生,李子后可以是1个或任意个字符。
* like ‘%四’ :名字中以四结尾的。
* like ‘%王%’ :只要名称中包含这个字就可以。
排序查询
使用order by 字段名称 asc/desc;(desc是倒序查询,asc是正序查询,不写默认是正序)
查询学生信息,先按照语文成绩进行倒序排序,如果成绩相同再按照英语成绩升序排序
select * from exam order by chinese desc,english asc;
分组统计查询
聚合函数使用
sum();
获取所有学生的英语成绩的总和:
select sum(english) from exam;
count();
获得学生的总数
select count(*) from exam;
max();
获得数学成绩的最高分:
select max(math) from exam;
min();
获得语文成绩的最小值
select min(chinese) from exam;
avg();
获取语文成绩的平均值
select avg(chinese) from exam;
分组查询
语法:使用group by 字段名称;
where的子句后面不能跟着聚合函数。如果现在使用带有聚合函数的条件过滤(分组后条件过滤)需要使用一个关键字having
在员工表上添加外键
alter table employee add foreign key (dno) references dept(did);
设置外键为非空
alter table employee modify dno int not null;