关系型数据库
保存的数据文件不能以文件的方式打开
RDBMS:关系型数据库管理系统
列:字段
行:记录
唯一标记字段:主键
安装:ubuntu
1: sudo apt-get install mysql-server
2:apt-get isntall mysql-client
3:sudo apt-get install libmysqlclient-dev
安装:win10
1:解压
2: 在文件目录新建初始文件my.ini
文件内容: [mysqld]
#设置3306端口 port=3306
#设置mysql的安装目录 basedir=D:\Program Files\MySQL
#设置mysql数据库的数据的存放目录 datadir=D:\Users\qiuzhiwen\MySQL\Data
3:管理员方式cmd进入bin目录,安装 : mysqld --install
4: 初始化:mysqld --initialize --console
,执行完成后,会打印 root 用户的初始默认密码
5:启动服务器 net start mysql
6:进入mysql mysql -u root -p
然后输入密码即可
7:更改密码ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘新密码’;
列名,类型,约束(Null,Key,Default,Extra)
unsigned 会显示政数
导出表数据:mysql togedata -u root -p -e"select * from sheet2" > D:\123.txt
不同连接之间转移表数据:navicat中点工具,数据传输,选择目标源表所载的连接、数据库、表名;选择需要粘贴表的连接、数据库、表名即可。
命令 | 用途 |
---|---|
show databases; | 显示所有数据库 |
select now(); | 显示当前数据库时间 |
select version(); | 显示当前数据库版本 |
create database dbname; | 创建数据库(dbname为数据库名字) |
show create database dbname | 显示某个数据库的创建详情 |
drop database dbname | 删除数据库 |
select database(); | 查看当前正在使用的数据库 |
use dbname | 进入数据库 |
show tables; | 查看当前数据库中所有的表 |
create table tbname(id int,name varchar(30)); | 创建数据表(tbname是表的名字) |
drop table yueshu; | 删除数据表(yueshu是表名) |
create table yueshu(id int primary key not null auto_increment,name varchar(20)); | 创建时添加约束 |
desc tbname | 查看表结构(tbname为表名) |
show create table students; | 查看创建表的详情(stundents为表名),(可以查看操作引擎和默认编码格式) |
insert into students values(0,“老王”,25,170.0,“man”,1); | 插入字段(students 为表名) |
alter table students add birthday datetime; | 修改表结构之添加字段 |
alter table students modify birthday date; | 修改表结构之修改字段类型(birthday为字段名,date为新的类型(type)) |
alter table students change birthday birth datetime; | 修改表结构之修改字段名字和类型 (birthday是原字段名,birth为新字段名,datetime是新类型) |
alter table students drop hige; | 修改表结构之删除字段(hige是字段名) |
CURD | 创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作 |
insert into students(name,age) values(“小狗”,18); | 记录的部分插入(插入数据时只指定部分字段) |
insert into students(name,age) values(“小猪”,23),(“小鸟”,21); | 同时多行插入记录 |
update students set gender=1; | 修改数据(students为表名,gender为字段名) |
select name as 姓名,age as 年龄 from students where id < 3; | 查询时候从命名字段名 |
delete from students where id > 6; | 删除数据 |
alter table students add is_delete bit default 0; | 逻辑删除 |
分割线 | 分割线 |
select id,name,age from students; | 查询部分字段 |
select students.id,students.name,students.age from students; | 查询时用 “表名.字段名” 的形式查询部分字段 |
select id as “编号”,name as “名字”,age as “年龄” from students; | 查询时修改显示的字段名(列名) |
select st.id,st.name,st.age from students as st; | 查询时修改表的名字 |
select distinct gender from students; | 查询时去重(distinct在字段名前面) |
select * from students where id < 3; | 条件查询,用where引出条件(等号是=,不是==),(and or 连接多个条件) |
select * from students where not (age >= 25 or age <= 18); | 用not取条件的反操作,如果没有小括号会优先对临近的一个条件取发操作 |
select * from students where name like “小%”; | 模糊查询,%表示任意多个字符 |
select * from students where name like “__”; | 模糊查询,一个_表示一个任意 |
select * from students where name rlike “老.*”; | 正则查询(rlike) |
select * from students where age in (25,18); | 在一个不连续的范围内查询(也可以使用 not in ) |
select * from students where age between 18 and 25; | 连续范围内查询(使用between… and…的形式 ,否定用 not between,not (between… and…) 的方法是错的 ,因为between… and…是一个条件而不是两个 ) |
select * from students where birth is null; | 查询空 null (否定为 is not null) |
分割线 | 分割线 |
select * from students where birth is null order by age; | 排序,在sql语句末尾添加 order by age 或者order by age asc(升序,默认升序),降序为 order by age desc |
select * from students order by age desc, id desc; | 多个字段排序,以前一个排序条件为主,若出现相同的再按第二个条件对相同第一个条件的记录排序 |
分割线 | 分割线 |
select count(*) as “总条数” from students; | 聚合之计算个数 |
select max(age) as “最大年龄” from students; | 聚合之最大值 |
select min(age) as “最小年龄” from students; | 聚合之最小值 |
select sum(age) as “年龄总和” from students; | 聚类之求和 |
select avg(age) as “年龄平均值” from students;或select sum(age)/count(age) as “年龄平均值” from students; | 聚类之求平均值(这说明select 后面可以跟函数) |
select round(avg(age),2) as “年龄平均值” from students; | 四舍五入操作,round(目标数值,保留小数位数) |
分割线 | 分割线 |
select gender from students group by gender; | 分组 (分组的意义在于聚合) |
select count(gender) from students group by gender; | 分组和聚合同时使用举例 |
select gender,count(gender),avg(age) from students group by gender; | 分组后显示多个聚合结果 |
select gender ,group_concat(name) from students group by gender; | 显示组内的具体信息,(只分组,不聚合,使用group_concat() ) |
select gender,group_concat(name) from students group by gender having avg(age)<22; | 设置分组条件 having |
select gender,group_concat(name) from students where is_delete=0 group by gender having avg(age)<22; | 可以看到where是对table的数据进行筛选,在表的后面,having 是对分组之后的数据进行筛选,在group by 的后面 |
分割线 | 分割线 |
select * from students limit 3; | 分页,设置显示记录的个数 ,如果有order by 的话,limit要在order by 的后面 |
select * from students limit 0,3; | 设置读取分页的起始位置,0为下标位置,3为显示个数 |
分割线 | 分割线 |
select * from students inner join classes; | 内链接inner join ,会变成第一个表中的所有记录后面都添加第二给表中的所有记录,若第一个表有m个记录,第二表中有n个数据,则取交集后会有m*n个记录 |
select * from students inner join classes on students.class_id=classes.id; | on 后面设置取交集的条件(即外键),只会显示外键匹配的记录,不匹配的不会显示,即交集 |
select s.id as stu_id,s.name as stu_name,s.age,c.name as class_name from students as s left join classes as c on s.class_id=c.id; | 外连接之左外连接,显示交集和左边表格的全部记录,不匹配的位置用null代替 |
select s.id as stu_id,s.name as stu_name,s.age,c.name as class_name from students as s right join classes as c on s.class_id=c.id; | 外连接之右外连接,同上(连接查询可以在sql语句后面加where 或者 having 的筛选条件,区别在于是原表还是连接后的新表) |
select P.Name as Employee from Employee as P inner join Employee as M on P.ManagerId=M.Id where P.Salary > M.Salary; | 自关联查询,关键在于在from后面用一个表命名成两个名字,中间用合适的join连接 |
子查询 |