mysql——2-18数据库

uniqueidentifier 列是 RowGuid,RowGuid 为 true 的列,进入mysql,mysql数据库中,to ‘新用户名’@’IP地址’,    remane user ‘用户名’@’IP地址’

rowguidcol 并非大家钦定的列名,但 SQL Server
会自动找到该列。这里我们能够见见。叁个表只会有一个RowGuid 为 true 的列。

选择database
use database名称;
在脚下database能够任何时候选用任何的database 只须求直接use 名称就可以

a.默认值

select rowguidcol from table1
select * from table1 where rowguidcol=’afa8ff7b-0e8e-4219-b21a-0d5e9ca7f690′

action :
add 添加
set 设置
change 改变
modify 修改
CHANGE
对列进行重命名或纠正列的品种,需给定旧的列名称和新的列名称、当前的花色
MODIFY 能够转移列的系列,那个时候无需重命名(不需给定新的列名称)
drop 删除
engine 改造类型
rename 改名

数据行等第:

在安顿表时,对于字段类型 uniqueidentifier 有个属性叫
RowGuid,那是怎么样意思吧,只怕它有何用吧?

mysql数据库中 :
database : 文件夹
table : 数据表(数据文件卡塔尔国

      时间:

           DATE:

                 YYYY-MM-DD(1000-01-01/9999-12-31)

           TIME:

                 HH:MM:SS(‘-838:59:59’/’838:59:59’)

           YEAR:

                 YYYY(1901/2155)

           DATETIME:

                 YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31
23:59:59)

           TIMESTAMP:

                 YYYYMMDD HHMMSS(1970-01-01 00:00:00)

有一些人讲 RowGuid 是用来约束 uniqueidentifier 唯少年老成性的,其实不是。假若七个uniqueidentifier 列是 RowGuid,那么大家能够使用
rowguidcol 代替该列的列名。譬喻:

查询著名字里第多个假名是e的职员和工人的号子、姓名、薪给、职业部门名称和办事地点
依据薪酬从大到小的次第排序
select e.empno,e.ename,e.salary,d.dname,d.location from
emp e join dept d on e.deptno = d.deptno
where e.ename like ‘__e%’ order by e.salary desc;

2、通配符

      select * from 表名 where user like ‘sdf%’;            
#翻看该表中user列中以sdf先导的全数值(多字符串)

      select * from 表名 where user like ‘sdf_’;            
#翻开该表中user列中以sdf初阶的全部值(三个字符串)

查询出比部门20总人口多的单位编号和部门人数
select deptno,count(empno) count_emp from emp group by deptno
having count_emp > (select count(empno) from emp where deptno = 20);

二、顾客权限:

私下认可,什么都未有

show grants for ‘用户名’@’IP地址’                          #查看权限

grant 权限 on 数据库.表 to ‘用户名’@’IP地址’          #授权

remove 权限 on 数据库.表 to ‘用户名’@’IP地址’      #废除授权

allprivileges      
#除了那几个之外grant外的保有权限即除去无法给其余用户设置权限外,其余具备root具备的权位它都有

select         #査权限

数据库.表

test.tb1         #只同意査test数据库中的tb1表

test.*       #同意査test数据库中全体表

*.*                 #同意查看所数据库和数据Curry的全数表

      select,insert #査和插入数据权限

准绳删除、条件更新、条件查询都能够运用数据库中的通用相比较运算符

      整数:

           tinyint

           smallint

           int

           bigint        –上边七个的区分为各自的约束不相像

组函数
count(列名卡塔尔国 依据该列的值,再次来到相应的数据
sum(列名State of Qatar 依照该列的值,再次来到该列值的总量
avg(列名卡塔尔 根据该列的值,重回该列的平平均数量
max(列名卡塔尔国 依照该列的值,再次来到该列的最大值
min(列名卡塔尔 依据该列的值,重返该列的最小值

修改表:

           添加列:

           alter table 表名 add 列名 类型;

           删除列:

           alter table 表名 drop column 列名;

           修改列:

           alter table 表名 modify column 列名 类型;         
#一定要改类型

           alter table 表名 change 原列名 新列名 类型;
#不仅可以改列名又能改项目

           增多主键:

           alter table 表名 add primary key(列名);

           删除主键:

           alter table 表名 drop primary key;

           alter table 表名 modify 列名 int,drop primary key;

           增加外键:

           alter table 表名 add constraint
外键名(形如:FK_从表_主表) foreign key 从表(外键列名)references
主表(主键字段);

           删除了这几个之外键:

           alter table 表名 dropforeign key 外键名;

select e.empno,e.ename,d.dname,d.location from
dept d left outer join emp e on e.deptno = d.deptno;

意气风发、客商管理

当IP地址为生机勃勃段时是可应用通配符%,即’192.1638.1.%’

始建客商

create user ‘用户名’@’IP地址’ identfied by ‘密码’;

剔除客户

    drop user ‘用户名’@’IP地址’;

校正顾客

    remane user ‘顾客名’@’IP地址’;to ‘新客商名’@’IP地址’;;

改革密码

    set password for ‘用户名’@’IP地址’=password(‘新密码’);

通用函数
ifnull(列名,value卡塔尔(قطر‎ 就算该列的某多个值为NULL,则改进为value
在局地数据库中该函数叫nvl

e、其他

  • 生龙活虎种通配符,用来表示全体列 日常情状下,职业中不应用
    因为须求多叁遍遍历查询表内列名

数据库等级

              show databases ;           #翻开当前Mysql都有怎样数据

           create database 数据库名;    #创办数据库

           create database 数据库名 default charset utf8 collate
utf8_general_ci;

           use 数据库名;                  #行使该数据库

           drop database 数据库名; #剔除数据库

select empno,ename from emp where empno <> all
(select mgr from emp where mgr is not null);

      3、限制

           select * from 表名 limit 5;                #前5行

           select * from 表名 limit 6,5;             
#从第6行起头的5行(不提出使用)

           select * from 表名 limit 5 offset 6;  
#从第6行发轫的5行(推荐应用)

询问薪给超越5000且低于10000的职工的数码、姓名和薪水
select empno,ename,salary from emp where salary > 5000 and salary
< 10000;

      二进制数据:

      tinyblob,blob,mediumblob,longblob

求出全数工作者的编号、姓名和做事天数
select empno,ename,to_days(curdate())-to_days(hiredate) work_day from
emp;

c.自增列(一张表只可以有一个,数字,必需是索引-主键)

变动全体数码 update 表名 set 列名 = 列值;

d.主键索引:

     
一张表只好有八个主键,独一不可能重复,不可能为null,经常情形下,自增列设置主键

独一索引:

           可感到null,一张表能够有七个独一列

            –约束

           –索引,加快查找

主键:

      不能够为null、无法再一次、一张表唯有叁个主键(能够多列组成主键)

      #近似用法:

           id int auto_increment primary key,

select empno,ename from emp e1 where exists
(select 1 from emp e2 where e1.deptno = e2.deptno and e2.ename =
‘Lacus’)
and ename <> ‘Lacus’;

小数:

           decimal   –准确的,保存的是原值

           float         –最不可相信赖

           double    –不太精确

询问出装有职员和工人的号码、姓名、部门名和做事地方把还未机构的职员和工人也显得出来
select e.empno,e.ename,d.dname,d.location from
emp e left outer join dept d on e.deptno = d.deptno;

d、査

      select * from 表名 ;               #查阅该表内全数数据

      select 列名1,列名2 from 表名;   
#翻看该表中列名1和列名2的多寡,展现时是以列名1和列名2的依次突显,而非建表是的次第

      select 列名1,列名2 from 表名 where 条件;
#查阅该表中满意条件的列名1和列名2的数额,展现时是以列名1和列名2的生龙活虎意气风发显示,而非建表是的各种

                     

插入数据
1.insert (into )表名 values(列值,列值1,…列值N);
该种插入方式必得与表中的列顺序生机勃勃致

三、SQL语句

什么人和拉克丝同部门?列出除了拉克丝的人
select empno,ename from emp where deptno in
(select deptno from emp where ename = ‘Lacus’)
and ename <> ‘Lacus’;

a、增

      insert into 表名(列名,列名) values(’值1′,’值2′);  
#三次性扩张一条数据

      insert into 表名(列名,列名)
values(’值1′,’值2′),(’值3’,’值4’);#一回性增加加条数据

      insert into 表1名(列名,列名) select 列名,列名 from 表2名;   
#将表第22中学的数据插入表1

      eg:insert into tb1(name,age)select class,people from
tb2;#将tb2中class和people列中的数据插入到tb1中的name和age列

      注意:插入数据时一定留意对应两列的数据类型要生机勃勃律

      insert into 表名(列名,列名) select 列名,列名 from
数据所在的表名 where 条件;    #将表第22中学符合供给的多寡插入表1

      eg:insert into tb1(name,age)select class,people from tb2
where id>2;    
#将tb第22中学id大于2的class和people列中的数据插入到tb1中的name和age列

关联子查询
怎么着职员和工人的薪资比本部门的平均薪资低?
select empno,ename,salary from emp e1 where salary <
(select avg(salary) from emp e2 where e1.deptno = e2.deptno);

字符串:

      char(m)        
–定长字符串,保存时是以一定长度储存,相比占空间,查找速率快

      varchar(m)    –变长字符串,保存时最多可存款和储蓄设定的值,查找速率慢

      text           —

      mediumtext

      longtext

求出集团职工全数人的总薪资
select sum(salary + ifnull(bonus,0)) sum_sal from emp;

b.是还是不是可认为空,为空设为null,不能够为空设为not null

询问出从未奖金的工作者编号和姓名
select empno,ename from emp where bonus is NULL;

      7、连表

      select * from 表1 ,表2 where 表1.列1=表2.列2;
#将表第22中学的数据依靠表1.列1=表2.列2相配后对应的来得在表1的动手,以表1为法规

      select * from 表1 left join 表2 on 表1.列1=表2.列2
;#将表第22中学的数据依照表1.列1=表2.列2相配后对应的呈现在表1的左边,以表1为尺度

      select * from 表1 inner join 表2 on
表1.列1=表2.列2;#两张表的多少依赖表1.列1=表2.列2,相称显示后,将包括null的行撤消,实际上便是将left
join的结果开展筛选展现

外号机制
在数据库中
一个列名之后直接助长二个未定义的单词,也就是对该列实行别称操作
例:select ename name from emp; name既是ename的小名 中间略写了举足轻重字as
数据表也足以起别称,sql语句的施行各类为
from起向右推行,施行完结后再从select起始向右实践

c、改

      update 表名 set 列名=值;                   
#将该表中钦命列的值全部制修改为钦点值

      update 表名 set 列名=值 where 条件;    
#将该表中满足条件的钦定列的值全体制改正为钦点值 

                     

修改数据表布局
alter table 表名 action

      6、组合

      select 列1 from 表1 union select 列2 from 表2;    
#将表第22中学列2的数量在表1中列1的数量背后呈现,暗中认可交易会开去重操作,如不想扩充去重,则在union前边加上all

子查询
询问出薪金比Lacus高的职员和工人的号码、姓名、薪水
select empno,ename,salary from emp where salary >
(select salary from emp where ename = ‘Lacus’);

     f、数据类型:数值、时间和字符串

何以职位的人头当先1私有?
select job,count(empno) from emp group by job
having count_emp > 1;

     枚举和集聚的区分:

      枚举是单选,集合是多选

drop table 表名;                       #直接删除表

delete from td1;                          
#清空表内容,自增时会随之删除前的数值增添

truncate table 表名;                   
#清空表内容,速度快,自增回到原点

删除数据
原则删除 delete from 表名 where 列名 = 列值;

      4、排序

           select * from 表名 order by 列名 asc ;                
#依照列从小到大排列

           select * from 表名 order by 列名 desc ;              
#基于列从大到小排列

           select * from 表名 order by 列1 desc ,列2 asc;    
#依赖列1从大到小排列,如若豆蔻年华致则按列2从小到大排列

删除database
drop database 名称;

表级别

              show tables;                      #查阅数据库中全数表

           desc  表名;                   #翻开数据表的数据构造

           create table 表名(列名 数据类型,列名 数据类型)#创建表

                 eg:create table td1(id int,name varchar(20));

                 eg:create table 表名(

                            列名 类型 是或不是足认为空

                            列名 类型 是不是可感觉空

                      )engine=InnoDB default charset=utf8;

主键:唯生龙活虎鲜明一条记下。能够由四个或多少个字段爆发。
create table student(stuId int not null auto_increment primary key
, stuName varchar(32) not null default ‘NewStu’
, stuSex char(7) not null default ‘male’
, stuAge int not null default 18
, stuPart varchar(32) not null default ‘computer’);

      5、分组

将数据以某一列的雷同值相互归总成一条数据。

      select * from 表名 group by 列名;  #以内定列将该表数据举办分组

      使用聚合函数:

      select age ,max(part),min(part),sum(part),count(part)from
tb3 group by age;
#以age列分组,max(part)中显得该分组中part列中的最大值,min(part)中体现该分组中part列中的最小值,sum(part)中显示该分组中又有part值相加的和,count(part)中显得该组是由几条数据统后生可畏的分组,

      select age ,max(part) as a,min(part) as b from tb3 group by
age;   
#以age列分组,a中呈现该分组中part列中的最大值,b中显得该分组中part列中的最小值,

      select age ,count(part) from tb3 group by age having
count(part)>2;  #来得出count(part卡塔尔(قطر‎>2的以age为分组规范的数额

询问工作者的全名,编号,每月工资,一年的基本薪资,一年总奖金,一年的总薪俸
select empno,ename,
salary+ifnull(bonus,0) sal_month,
salary12 sal_base_year,
bonus
12 bonus_year,
(salary+ifnull(bonus,0)) *12 sal_year from emp;
列仍然为能够直接与三个常量做运算,而且运算结果还是能够做三回运算

MySQL常用命令

select empno,ename from emp e1 where exists
(select 1 from emp e2 where e1.empno = e2.mgr);

b、删

      delete from 表名 where 条件;   #删去满意条件的数据行

      delete from 表名 where 条件1 and 条件2;  
#剔除知足条件1和标准2的数据行

      delete from 表名 where 条件1 or 条件2;
#除去满意条件1或条件2的数据行

平均薪俸大于5000元的部门编号和平均报酬,未有机关的不算
select avg(salary) avg_sal,deptno from emp
group by deptno having avg_sal > 5000;
当分组之后不得以选取where条件查询只尚可having

     e、外键:

      alter table 被约束表的表名 add constraint 外键名 foreign key
被节制表(被节制的列名) references
另一张表的表名(提供节制范围的列名)。

      其功能为:两张表创设约束,达成风华正茂对多

询问出全数职工的号码、姓名、部门名和劳作地点把还没工作者的机构也体现出来
select e.empno,e.ename,d.dname,d.location from
emp e right outer join dept d on e.deptno = d.deptno;

      数值 :

           bit   二进制

表间关联合检查询 表A join 表B on 条件
询问出装有职员和工人的编号、姓名、部门名和做事地方
select e.empno,e.ename,d.dname,d.location from emp e,dept d
where e.deptno = d.deptno; 部分数据库不帮衬

1、条件

      select * from 表名 where 条件;#查看该表满意条件的富有数据

      select * from 表名 where 条件1 and 条件2; 
#翻看该表同期满意条件和规范2的有所数据

      select * from 表名 where 条件1 or
条件2;#翻开该表满足条件或条件2的兼具数据

      select * from 表名 where 列名 between 值1 and 值2;
#查看该表中钦命列的值在值1和值2之间的全数数据

      select * from 表名 where id in(1,4,5);
#查看该表中id是1,4,5的全数值

      select * from 表名 where id not in(1,4,5);     
#翻看该表中id不是1,4,5的全部值

      select * from 表名 where id in(select nid from
表2);#翻开该表中id是表第22中学nid的全部值

full outer mysql不协理 在此外数据库中均援助
select e.empno,e.ename,d.dname,d.location from
emp e full outer join dept d on e.deptno = d.deptno;

查询盛名字叫Lacus的职员和工人的号子、姓名、薪金
select empno,ename,salary from emp where ename = ‘Lacus’;
在mysql中查询字符串音信时不区分抑扬顿挫写,但在任何数据库中区分
急需使用upper和lower做相应的转换

询问工资在5000到10000之内的职工的号码、姓名和报酬
select empno,ename,salary from emp
where salary between 5000 and 10000;

create table score(stuId int not null
, couId int not null
, mark float not null default 60
, primary key(stuId, couId)
, foreign key(stuId) references student(stuId)
, foreign key(couId) references course(couId));

在数据库中 相比较于c/c++新扩展了一个新的体系date
特别用来存款和储蓄日期类型的数据类型
在mysql date的延擅长的项目目 time timestamp datetime year
timestamp 暗许存储当前光阴,当改进同风姿罗曼蒂克行数据时会暗中同意改革