找回密码
 立即注册
张生乐 +好友
这个人很懒什么都没写
听众
8
主题
39
金钱
158
个人名片
  • 未填写地址
  • 这家伙很懒什么都没写
粉丝关注
还没有人关注TA
添加表情

数据库单表操作

已有 202 次阅读2018-11-29 23:06


data-数据
date-日期
database:数据库 存储或管理数据的容器
databases:多个数据库
对数据库的:增删改查(行业间的命名)
增加 删除 修改 查询
在淘宝搜东西 是查的淘宝后台的数据库。
 
数据库的概念?database
个人理解:存储和管理数据的容器。
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
数据库管理系统:
关系型数据库: mysql 5.1 (免费,开源)数据库管理系统。还有 DB2 oracle(甲骨文)-收费型的 sql server
非关系型数据库: nosql redis 也是增删改除。
service (服务)mysqld(程序) status (状态)=查询它的状态
yum install mysql 安装mysql 也可以yum install php
mysql -uroot -p -u数据库用户名 -p密码

yum install
出现以上28000证明没有启动,输入service  mysqld  start  启动mysql服务 再输入访问时:mysql -u root -p 回车 第一次输入不要密码 输入密码,在回车

5.1.73 版本号,第一次进入不要密码。 

service  mysqld  resstart 重启
select 查义
出现-》 是没有按; 键,点了就可以了

create table wzq_student(age int(12),name varchar(20));
desc wzq_student;  --查看表结构 wzq_student;  --查看表结构表的名称

field 字段名
type 数据类型
default  默认值
extra 额外的,备注


truncate+表名,在表中数据比较大的时候用它快速删除(较少用)。
一个字节=8bit(位)
DESC 是descend 降序意思 asc 是ascend 升序的意思





准备:
 
数据的概念?data
数据是信息的表现形式和载体,可以是符号、文字、数字、语音、图像、视频等
在计算机系统中,数据以二进制信息单元0,1的形式表示
 
延伸:
“大数据”是指以多元形式,自许多来源搜集而来的庞大数据组,往往具有实时性。在企业对企业销售的情况下,这些数据可能得自社交网络、电子商务网站、顾客来访纪录,还有许多其他来源。这些数据,并非公司顾客关系管理数据库的常态数据组。
从技术上看,“大数据”与“云计算”的关系就像一枚硬币的正反面一样密不可分。大数据必然无法用单台的计算机进行处理,必须采用分布式计算架构。它的特色在于对海量数据的挖掘,但它必须依托云计算的分布式处理、分布式数据库、云存储和/或虚拟化技术。(在维克托·迈尔-舍恩伯格及肯尼斯·库克耶编写的《大数据时代[4]》中大数据指不用随机分析法(抽样调查)这样的捷径,而采用所有数据的方法)大数据的4V特点:Volume(大量)、Velocity(高速)、Variety(多样)、Value(价值)。
“信息无处不在,信息就在大家身边。”信息,指音讯、消息、通讯系统传输和处理的对象,泛指人类社会传播的一切内容。
 
数据库的概念?database
个人理解:存储和管理数据的容器。
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
 
 
 
常见的数据库有:
MySQL,DB2,Oracle,SQLite,SQL server,Sybase,SQL2000,Access等;
 
Navicat产品有一个 Lite(简化的) 版本(非商业化的)和一个 Premium(进阶的) 版本。
 
Navicat premium是一款数据库管理工具,是一个可多重连线资料库的管理工具,它可以让你以单一程式同时连线到 MySQL、SQLite、Oracle 及 PostgreSQL 资料库,让管理不同类型的资料库更加的方便
 
 
上课:
MySQL 是一个关系型数据库:是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。 也可以理解为以行和列的形式进行数据存储
由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。
 
 
一、卸载mysql
1:  rpm -aq |grep -i  mysql   查看是否有mysql数据库
*****.i686
2:  service  mysqld  status(查询状态)/stop(停止)/start(运行)/restart(重启)
3:yum erase *****.i686  在线卸载
5:find / -name mysql
6:rm –rf   删除所有“mysql”文件 (my.cnf*数据配置文件)(在WINDOWS上,my.ini)
7:find / -name mysql   无数据,已手动清除
8:退出MySQL:quit或exit
二、安装:yum 在线安装mysql_5.1
1:yum install mysql
按2次‘y’,直至出现“Complete!”表示安装成功
2:service  mysqld  status (mysqld是mysql的守护进程)
mysqld: unrecognized service
3:yum  install  mysql-server
按1次‘y’,直至出现“Complete!”表示安装成功
若出现trying other mirror,表示没有连接外面,ping www.baidu.com
或NAT网络配置地址转换,service network restart 重启网卡
4:service  mysqld  status (查看mysql状态)
mysqld is stopped
5:service  mysqld  start  启动mysql服务
6:service  mysqld  status  (查看mysql状态)
mysqld (pid  2937) is running...   安装成功
7:安装成功后,可以有2种方式访问:
1)无密码访问(默认的root用户密码为空)mysql -u root -p 回车后,再回车,出现如下字样,表示访问mysql服务器成功:mysql>
2)有密码访问(给root用户设置密码:mysqladmin -u root Password ”123456” 回车后,重启数据库;访问时:mysql -u root -p 回车后,输入密码,在回车
 
SQL操作学习思路:
第一部分:
一:库的操作
指令:
Show databases 查询库
Create database aa 创建库
drop database wzq;      删除数据库
use aa 进入库名
desc aa   查看列表内容
create table wzq_student(id int(4) primary key,name varchar(20) not null,sex int(2),age int(3), phone int(12))  创建表内容 primary key 主键约束
select * froom aa 查看表具体内容
drop table 表名; //删除基本表
insert into aa(name,sex,age,class,number)values('test',1,30,1603,13424302636);插入一条记录
mysql> alter table aa drop number;  删除‘number’字段
   delete from aa where id=5 or id=7:删除指定的内容  注:可以同时删除两种,如果是and 则是满足两个条件的才可以删。
alter table aa add primary key(id)id 的位置加唯一值。
alter table aa change id_dd int(12) auto_increment; //将主码id设为自增长
如果删除表中的主键约束,需取消该字段的自增长 alter table dcs25 change id sid int(4)  #取消自增长
删除主键约束:alter table 表名 drop primary key;
select * from dcs33 where class=1832 order by chinese desc; 排序 降序
select avg (math),class from dcs33 group by class; 按班级分组
update dcs33 set chinese=60 where chinese<60; update 修改 set 设置
1.show databases;   //注意别忘记database后面的“s”
2.create database dcs_21; //注意数据库名的命名尽量使用下划线
3.drop database dcs_21;
 
1.mysql> show databases;        查询数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| wzq         |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set
2. mysql> create database wzq;     创建数据库
Query OK, 1 row affected
3. mysql> drop database wzq;      删除数据库
Query OK, 1 row affected
 
表的操作
1. mysql> use wzq;   进入“wzq”的库
Database changed
2. mysql> show  tables;    查询该库的表  
+---------------------------+       
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
3. mysql> create table aa(id int(4) primary key,name varchar(20) not null,sex int(2),age int(3), phone int(12));红色字体是额外加的规定,是把建的字段第一个是,加上主健值(唯一值)建表后表key里会出现pri字样,第二个是设置填表时这一项不能为空 加了唯一值后, 注:只有在了primary key 主健值之后才能设置自增长。哪个字段设置了主健值,哪个字段才可以设置自增长。如果建表的时候没有加上,可以后来加上,alter table aa add primary key(id)id 的位置加。  Int varchar 是类型,一定要写,int 针对数字,varchar 针对字符。
 
Query OK, 0 rows affected       //创建“wzq_stu,dent”表
注:建表的要点:字段名,数据类型,数据长度及字段约束:
MySQL 中,有三种主要的类型:文本、数字和日期/时间类型。
常见数据类型:
数字类number类型:
Int/  bigint: 当整数值超过int数据范围时才使用bigint  整数
Float :单精度浮点型  小数点,如1.1 3.3     double float:双精度浮点型
文本类 text类型:
Char/varchar :字符型    char:固定长度    varchar:可变长度
(一定要用单引号或者双引号不然会报错, )
Char/varchar  的区别:
char(10)可能占用了10个字节  编码格式:ascii Unicode uif-8 gbk
varchar(10)可能只占了6个字节,把其余的4个字节留给了下一个字符
所以varchar比char更加的节省空间
日期类 date类型:                                            
Date 建表的时候在日期的后面接 Date,并且加引号  注:它是一种数据类型,如果把date(也可以设置为其它字段名)字段设置为date 如同在字段后面写的 int(9)一样的,这个不用加括号。建表的时候也不用加引号,但在添加值的时候,这个字段 值要加单引号,如‘20181127  会转变为 2018-11-28 http://blog.sina.com.cn/s/blog_a48039740100zh1e.html
  
注:1因为mm已经设为自增长,所以在插入记录的时候,省略 mm 这一系列。 2可以手机号多输,(因为没有限制长度)也可以日期超前。
 
常见约束:(为了保证数据的完整性而实现的一套机制)
主码/键约束:primary key:具有唯一性,不能重复
默认值约束:default 1 (只对数字有反应,默认为null空,但是可以自己设置数字)
非空约束:not null (约束后字段里面内容不能为空
外码/键约束:foreign key –        作用:数据单一化,避免造成表中数据出现冗余
4. mysql> desc aa;  查询表结构
5 rows in set
 
6. mysql> alter table aa rename bb;
Query OK, 0 rows affected    //修改表名;
7. mysql> alter table bb change id dd int(20);
Query OK, 0 rows affected   //修改表字段 注,如果是设置了自增长, 也可以用这个修改,如修改数据类型为(20)里面主没有自增长了. 修改自增长时不想修改字段就可以 id id(int7) 数值自字义.
8. mysql> alter table aa add numbr int(3) not null first;//在第一个字段前加一个‘number’字段   not null 是约束后字段里面内容不能为空,rirst是第一。也可以不约束,直接添加。
Query OK, 0 rows affected
Records: 0  Duplicates: 0  Warnings: 0
9. mysql> alter table aa add phone int(3) not null after age; //增加表字段class在age后面  not null 约束后字段里面内容不能为空
10. alter table aa add (English int(4),Chinese int(4));同时增加俩个字段
11.alter table aa modify id int(8) first ;可以实现调整表字段的位置;这是将‘id’字段放在最前面 注:modify:更改
10. mysql> alter table aa drop number;  //删除‘number’字段
Query OK, 0 rows affected
Records: 0  Duplicates: 0  Warnings: 0
10. mysql> alter table aa change id_dd int(12) auto_increment; //将主码id设为自增长注,id 是原字段 dd是将要变成的字段 ,要设置唯一值,这里一定要输入值名,如果不想更改,则id id int(12)…
注:要设为自增长,首先要先把要设置的字段设置为primary key,加上主健值(唯一值)会在key里出现pri字样 加了唯一值后,后才能设置自增长。哪个字段设置了主健值,哪个字段才可以设置自增长。设置了自增长的,后面插入数据时,就可以不写这一系列,默认从一开始 .(如果只设了主键值,那就要一一输入,且不能重复.如果建表的时候没有加上,可以后来加上,alter table aa add primary key(id)在id 的位置加。


 
 
Query OK, 0 rows affected
Records: 0  Duplicates: 0  Warnings: 0
 
11.  drop table 表名; //删除基本表 (将表结构删除) 删除整个表,连表名一起删除
12,删除数据
delete from 表名 //删除表中数据   只删除表中的内容,(表结构(数据类型)和字段名都在
delete from 表名 where 条件  //’where’可以指定删除对象
注:原本想要按人名删除,但这个文件设置了主健约束和自增长,所以按mm这一列才能删掉,删的也准确。
13.  truncate 表名;  //快速删除大量表数据,truncate后面直接接表名,比delete删除速度要快
14.  delete from aa where id=5 or id=7:删除指定的内容  注:可以同时删除两种,如果是and 则是满足两个条件的才可以删。
 
注:TRUNCATE,DELETE,DROP放在一起比较:
TRUNCATE TABLE:删除内容、释放空间但不删除定义。
DELETE TABLE:删除内容不删除定义,不释放空间。
DROP TABLE:删除内容和定义,释放空间。
 
1. insert into student(name,sex,age,class,number)values('test',1,30,1603,13424302636); //插入一条记录
insert into 文件名(name,age,sex,score)values('qqqq',34,1,77),('wwww',34,1,77),('eeeee',34,1,77);  //插入多条记录
2. select * from student; //查出表中所有数据
 
3. select id ,name from aa; 查出表中具体字段的数据       
 
4.
select * from student order by ph desc; //降序查询 order by 以什么排序 desc 降
select * from student ORDER BY id asc;  //升序查询
删除主键约束:alter table 表名 drop primary key;
建表后增加主键约束:alter table aa add primary key(id) 注: key后面不用加空格。
 
格式:update 表名 set 值 where 条件
 
5. update wzq_student1 set name='wzq' where s_id=1;  //改指定字段的值或字符,这里改的是‘name‘字段的字符,
Query OK, 1 row affected
Rows matchedsse: 1  Changed: 1  Warnings: 0
 有可能name是重复的,所以要设唯一值 ,才不会删错 或者是 值and名字。
6. update wzq_student1 set age=age+5;  //将年龄加大5岁 加或减都可以.
Query OK, 1 row affectedsh
Rows matched: 1  Changed: 1  Warnings: 0
 
7. SELECT * from student where sex<>1; <>不等于1
SELECT * from student where sex!=1; 不等于1
SELECT * from student where sex  not in(1); 不等于1
//查出性别不为1的所有数据 可以以输入>号,查大于它的数值.
 
 
简单函数
8.
SELECT distinct(name )from student where sex<>1; //查出性别不为1的且不重复的姓名的数据(重复的话只显示一个)
 
8.
SELECT distinct(name),age from student where sex=0 or sex=2; 查找唯一姓名的,0和2?
SELECT distinct(name),age from student where sex=0 and sex=2; 查找0或2?
 
9.
SELECT count(id) from student where age between 31 and 32; //统计出年龄在31岁到32岁之间的学生人数 between:包含边界值, 按年龄和姓别都是同一个答案
#SELECT count(id) from student where age>=31 or age<=25;    大于等于,小于等于(包含所有的 数值了)*
10. SELECT * from student where id limit 0,10; //查出从第一行开始计算,共十行的记录 0是代表第一行, 假如有10个id 第一个坐标是0 . 第五行取7行, 是4,7 取2-8行,是1.7 ( 20-28 等于 19-9) 第一个数值减一,第二个数值等于,两个相加等于要到的行数.
11. SELECT sex as "性别",count(sex) as "各性别总人数" from student group by sex; //根据性别分组查班上男生女生总人数各是多少 as 和中文都可以省略掉,只是加上,搜索出的文档标题更清晰明了.?
 
12. select * from dcs where id limit 0,3; 从第一行开始共统计3行;
 
13. select * from dcs where class is null;查询班级为空的学生信息
14. select * from dcs where class is not null;查询班级不为空的学生信息
 
注:select * from student where number=1342430263 or 1=1; //安全性测试的SQL注入,(一旦在文本框内输入该SQL命令,若代码未过滤,则会显示出所有的数据)

安全测试 sql注入 xss攻击 跨目录访问
安全扫描: fortify
 
 
1.where 不能放在GROUP BY 后面
where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数比如SUM(),AVG()等,使用where条件显示特定的行。
 
2.having 是跟GROUP BY 连在一起用的,放在GROUP BY 后面,此时的作用相当于WHERE
     having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
 
 
3.1如何给普通的数据库用户赋予相应的权限(如增删改查):
 
1.使用root账号登录,输入root用户的密码:******
2.进入mysql数据库:use mysql;
3.查询mysql数据库服务器已经创建了哪些用户:select host,user from user; 要进到库里面才能以执行. 从,user 里面查 host,user 这两个字段
3.创建用户但是未授权(方法一)
insert into user (Host,User,Password)values('localhost','wang',password('123456'));创建用户
创建用户后需要刷新下:flush privileges

 
4.创建用户后进行授权(方法二)
grant select,update,delete,drop on *.* to ‘wang’@'localhost' identified by '123123'

所有的权限,可以直接输入 all,或者一个一个输入. nt select,update,delete,drop on赋予的权限,*.*所有数据库下面的,成有的表.
授予一个普通用户xiaowang及密码为123456,允许其可以通过所有客户机访问本数据库下所有的库及,假如为localhost只能在本地进行访问。
 查询有什么权限是 show grant for ‘wang’@'localhost';
5、创建用户同时授权
grant all privileges on *.* to ‘root’@'%' identified by '123123';
 授权的,@localhost 只针对mysql ,% 只针对远程连接,也有两都有的.
6、flush privileges  ---刷新
 
show grants for 'wang'@'%'; //查看数据库的指定授权用户的权限
revoke all on *.* from sss@localhost ;//取消所有权限
delete from user where user='zhongguo'and host='localhost';删除用户
update user set password=password("test") where user='root';
 
 
 
 
 
四:数据库单表练习
作业:完成时间2016-4-11
0、给student表增加3个字段(数据类型及长度自定义,建议要合理),
alter table dcs33 add (tiyu int(3),lish int(4),kexue int(7));
1、查询1832班的成绩信息
select * from dcs33 where class=1832;
2,查询1833班,语文成绩大于80小于90的成绩信息
select * from dcs33 where chinese>80 and chinese <90 and class=1833;
3,查询学生表中5到10行的数据
select * from dcs33 where age limit 4,6;
4,显示1832班英语成绩为98,数学成绩为77的姓名与学号,
select name,sid,class from dcs33 where english=98 and math=77;
5,查询出1832班成绩并且按语文成绩排序(降序)
select * from dcs33 where class=1832 order by chinese desc;
6,查询1833班与1832班,语文成绩与数学成绩都小于80的姓名。
7,查询出没有参加语文考试的学生姓名和班级名称。8,求出班上语文成绩不及格的学生姓名

9,求出每个班的数学平均成绩

10、求出每个班级语文成绩总分 --涉及到每个的时候都需要分组

11、将语文成绩不及格的学生成绩改为60分
12、三科分数都大于70分的人名和年纪
13、英语分数高于70且其它任何一科目大于60分的人和班级
14、创建一个’dcs21’用户只授予该用户删除权限
 

第二部分 :
 “navicat”数据库客户端连接工具
MYSQL的注释://这是在使用“navicat”数据库客户端连接工具的“查询编辑器”窗口使用的
行注释:#
连续多行注释:/*``````*/
段注释:/*
 
 
 
备份student表中的所有数据:
create table dcs15 like dcs;   创建表且表字段与‘dcs’一样
insert into dcs15 select * from dcs;  将表‘dcs’的数据插入表‘dcs15’
insert into dcs150(id,name) select id,name from dcs;  指定字段插入,如果dcs50有数据是不能插入,需要重新创建一个表;
 
数据库备份 在linux 下的root 用户备份的. 备份到linux里.
[duoceshi@localhost Desktop]$ mysqldump -u root -p wang > wang.sql 第一人wang代表库,第二个代表文件,无论备份还是还原,都要库在前.
Enter password:
[duoceshi@localhost Desktop]$ ll duoceshi10.sql 这两个不要
-rw-rw-r--. 1 duoceshi duoceshi 13137 Feb 25 11:56 duoceshi10.sql
2.2 再执行mysql命令完成还原(前提duoceshi10要存在)
[duoceshi@localhost Desktop]$ mysql -u root -p wang < wang.sql 第一个 wang 代表要移到mysql 里的库名
Enter password:
 
 
select class,avg(math) as avg_mat dcs group by class having avg_math>80; //哪一些班级的数学平均成绩大于80
 
select max(math) from dcs group by class;   //按班级查出数学最高分;
select class,min(math) from dcs group by class;  //查询出每班数学最低分
 
select class,sum(math) from dcs group by class; //查询出每班数学总分
 
select class,avg(math) from dcs group by class; //查询出每班数学平均分
 
select class,count(*) from dcs group by class; //查询出每班学生总数 星号代表所有
 
数据库的“-,+、*、/”
select sum(math)+5 from dcs; //在数学总分上加‘5’分
select sum(math)-5 from dcs;
select sum(math)*5 from dcs;
select sum(math)/5 from dcs;
 
 
select * from dcs where name like 'wangz%' //查询姓名“wang”开头的用户
select * from dcs where name like '%qiang'   //查询姓名“dan”结尾的用户
select * from dcs where name like '%zhi%'  //查询姓名中间包含“yan”用户
 
 

全部作者的其他最新日志

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册