数据库的基本操作(一)

mysqld install # 安装sql服务

net start mysql # 启动服务

net stop mysql # 停止服务

select user(); # 查看当前用户

mysql -uroot -p # 用户名 密码
mysql -uroot -h192.168.12.61    # 连接其他人的mysql

set password = password('123');      # 设置密码(注意分号,忘记了可换行直接补上一个‘;’)

\c # 表示放弃当前要执行的sql语句

create user '用户名'@'允许的网段' identified by '密码' # 创建账号
# 创建账号
mysql> create user 'eva'@'192.168.10.%' identified by '123'; # 指示网段
mysql> create user 'eva'@'192.168.10.5' # 指示某机器可以连接
mysql> create user 'eva'@'%' # 指示所有机器都可以连接
mysql> show grants for 'eva'@'192.168.10.5'; # 查看某个用户的权限
# 远程登陆
mysql -uroot -p123 -h192.168.10.3
# 给账号授权
mysql> grant all on . to 'eva'@'%';
mysql> flush privileges; # 刷新使授权立即生效
# 创建账号并授权
mysql> grant all on . to 'eva'@'%' identified by '123'

 

基础操作:

数据库的基本操作:

create database 数据库名;

show databases; 查看数据库

use 数据库名  切换到库中

数据表的基本操作:

create table damo(num int, user_name char(12), password char(32));   创建一个表

show tables; 查看当前库中的所有表

desc 表名    查看表结构

数据的基本操作:

insert into demo values(1,'xuhuo','xuhuo');

select * from 表名;  查看表的所有内容

select 字段1,字段2... from 表名     查看表的指定字段

update demo set password = 'xuhuo1' where num = 1;     # 修改数据

delete from demo where num = 1;     删除数据,where后边跟删除的数据

 

数据类型

  • 数字类型

    • 整数 tinyint(0,255) int (0-四十多亿)

    • 默认创建的所有的数据都是有符号的

    • create table t1(i1 tinyint unsigned,i2 int unsigned) # unsigned 是约束,表示无符号

    • 小数 float double

    • create table t3(f1 float(7,2),f2 double)

  • 字符串

    • 定长:节省时间 浪费空间 char (255个字符)

    • 变长:节省空间 浪费时间 varchar(65535个)

    • create table t5(c1 char(5),c2 varchar(5))

  • 时间类型

    • datetime # 年月日时分秒 0000-9999年

    • date # 年月日

    • time # 时分秒

    • year # 年

    • timestamp # 年月日时分秒 1970-2038年

  • enum 和 set

    • enum 单选

    • create table t6(username char(12),sex char() enum(''))

    • set 多选

 

单表操作:

insert

# 增 insert
# insert into emp values (3,'alex',84,'female',2.2,'linux,python'),
# (4,'alex',84,'female',2.2,'linux,python');
# insert into emp(id,name) values (5,'wusir'), (6,'wusir');
# insert into emp2 select * from emp;
# insert into emp2(id,name) select id,name from emp;

# 删
delete

# 改update
update 表 set 字段1= 值1, 字段1=值2 where 条件;

 

select:

# 建表准备:
create table employee(
id int not null unique auto_increment,
emp_name varchar(20) not null,
sex enum('male','female') not null default 'male', #大部分是男的
age int(3) unsigned not null default 28,
hire_date date not null,
post varchar(50),
post_comment varchar(100),
salary double(15,2),
office int, #一个部门一个屋子
depart_id int
);

https://www.cnblogs.com/Eva-J/articles/9688313.html

select * from 表名;

# 指定列查询:
select name from 表名;
# 在列中使用四则运算:
select emp_name,salary * 12 from employee;
# 重命名查询结果的字段:
select emp_name,salary * 12 as annul_salary from employee;
# 去重 distinct
select distinct post from employee;

# concat()拼接
select concat('姓名:',emp_name),concat('年薪:',salary*12) from employee;

case when语句
SELECT
(
CASE
WHEN emp_name = 'jingliyang' THEN
emp_name
WHEN emp_name = 'alex' THEN
CONCAT(emp_name,'_BIGSB')
ELSE
concat(emp_name, 'SB')
END
) as new_name
FROM
employee;

 

where:

where语句 根据条件筛选行
比较运算 = > < >= <= !=/<>
between a and b
select * from employee where salary between 10000 and 20000;
in
select * from employee where salary in (17000,19000);
like模糊查询
_通配符,匹配一个字符长度的内容
select * from employee where emp_name like 'jin___';
%通配符,匹配任意长度的内容
select * from employee where emp_name like 'jin%';
regexp正则匹配
select * from employee where emp_name regexp '^jin';

 

逻辑运算
# and
select * from employee where age > 18 and salary > 10000;
# or
select * from employee where age > 18 or salary > 10000;
# not
select * from employee where salary not in (10000,17000);

 

关于null
查看岗位描述为null的员工信息
select * from employee where post is null;
查看岗位描述不为null的员工信息
select * from employee where post is not null;

 

五个聚合函数
count()
max()
min()
avg()

 

group by分组聚合
查询岗位名和岗位包含的所有员工姓名
select post,emp_name from employee group by post;
查询各部门内年龄在20岁以上的人的平均薪资
select post,avg(salary) from employee where age > 20 group by post;

 

过滤having(group by + 聚合函数)
查询平均薪资大于一万的部门:
select post from employee group by post having avg(salary) > 10000;

 

 

order by 排序
升序
select * from employee order by salary;
select * from employee order by salary asc;
降序
select * from employee order by salary desc;
select * from employee order by age,salary desc;
select * from employee order by age desc,salary asc;

 

limit
select * from 表 order by 列 limit n; # 取前n条
select * from 表 order by 列 limit m,n;从m+1开始,取n条
select * from 表 order by 列 limit n offset m;从m+1开始,取n条

 

# 使用关键字必须按照顺序写
select * from 表 where 条件 group by 分组 having 过滤 order by 排序 limit n;

 

select post,group_concat(emp_name) from employee group by post;
# 查询一个组中的所有成员

 

# 练习

https://www.cnblogs.com/Eva-J/articles/11074845.html

https://www.cnblogs.com/Eva-J/articles/9772614.html

posted @ 2019-09-25 20:21  徐-  阅读(332)  评论(0编辑  收藏  举报