做Java的项目的时候,发现大多数的项目的数据库都是使用Mysql,就看看跟SQL server有什么区别,发现大区别没有,SQL语言类似的,并不像SQL server使用T-SQL语言
MySQL:开源免费,Oracle收购了sun公司,sun公司收购MySQL。
登陆 mysql -uroot -proot 创建数据库 create database 数据库名字 创建数据库的时候,指定字符集 create database 数据库名字 character set 字符集(utf8) collate 校队规则; 查看数据库 查看所有show databases 查看单个show create datatbase 数据库名字 查看一下当前正在使用的数据库 select database 修改数据库 alter database 数据库名字 character set 字符集 ·删除数据库 dorp database 数据库名字 其他数据库操作命令 切换数据库(当前选中) use 数据库名字
创建表 create table 表名(列名 列的类型(长度) 约束) 列的类型(int、char、double、float、date、time、datetime、text、blob) 列的约束(主键primary key、唯一unique、非空not null) 查看表 所有的表show tables 查看表的定义show create table student 查看表结构desc student 修改表 添加列alter table 表名 add 列名 列的类型 列的约束 修改列alter table 表名 modify 列名 列的类型 列的约束 修改列名alter table 表名 change 列名 删除列 alter table 表名 drop 列名 修改表名rename table 表名 to 表名2 修改表的字符集 alter table 表名 character set 字符集 删除表 drop table 表名
插入数据 insert into 表名(列名1,列名2,列名3)values(值1,值2,值3) 批量插入 insert into 表名(列名1,列名2,列名3)values(值1,值2,值3),(值1,值2,值3) 简单写法 insert into 表名 values(值1,值2,值3) insert into 表名(列名1) values(值1) 查看表中数据 select * from 表名 删除记录 delete from 表名 【where 条件】 【可选】 没有筛选条件时一条一条全部删除数据DML 更新表记录 update 表名 set 列名=列的值,列名2=列的值2【where 条件】 查询记录 select【distinct】【*】【列名1 .列名2】from 表名 【where 条件】 distinct 去除重复的数据 as关键字的使用 表别名 select p.列名 from 表名 as p 列别名 select 列名 列别名 from 表名 select运算查询 仅仅在查询结构上做 + - / * 条件查询 where 关系运算符 > < >= <= <> 逻辑运算符 and or not like模糊查询 where name like "%罗" _ : 代表一个字符 % : 代表多个字符 in 在某个范围中获得值 where id in (1,5,6) 排序查询 【order by】 asc:升序 desc:降序 select * from 表名 order by 列名 【asc|desc】
聚合函数 sum():求和 select sum(列名) from 表名 avg():求平均值 count():统计数量 max():最大值 min():最小值 分组函数 group by select 列名 ,count(列名) from 表名 group by 列名 having 关键字 可以接聚合函数的 出现在分组之后 where 关键字 不可以接聚合函数 出现在分组之前 编写顺序 select ... from ... where ... group by ... having ... order by 执行顺序 from ... where ... group by ... having ... select ... order by
外键约束:foreign key alter table 表名 add foreign key(列名) references 表名2(列名) 建库原则 通常情况下,一个项目|应用建一个数据库 多表之间的建表原则 一对多:分类 和 商品 建表原则:在多的一方添加一个外键指向(reference)一的一方。 多对多:学生 和 课程 建表原则:建立一张中间表,将多对多的关系拆分成一对多的关系,中间表至少要有两个外键,分别指向原两张表。 一对一:公民 和 身份证 建表原则:两张表合并,删除一张表的主键;两张表使用相同主键。
多表查询应用 交叉连接 select * from 表名A,表名B; 外连接 用于某元组外键不相对应,需要显示所有元组。 左外连接,会将左表所有数据查询出来,右表用null替代 select * from 表名A a left outer join 表名B con a.con=b.cid; 右外连接,同上 内链接 select * from 表名A,表名B where A中列名=B中列名; 隐式内链接select * from 表名A as p,表名B as c where p.列名=c.列名; 显式内链接select * from 表名A p inner join 表名B c on p.列名=c.列名; 区别:隐式先查询,在筛选where条件 显式带着条件去查询结构,执行效率要高
分页查询 百度查询分很多页 limit 第一页3条数据 select * from 表名A limit 0,3; offset 子查询 查询的嵌套 select * from 表名A where con=(select cid from 表名B where 列名="xxx");
视图、索引、存储过程后面接着说。