数据库简介及SQL语法

  ①Oracle Database:甲骨文公司

 ②SQL Server:微软公司

 ③DB2:IBM 公司

 ④PostgreSQL:开源

 ⑤MySQL:开源

 ⑥Access:微软公司 [古董]

红色为最常见服务器

数据库结构:

数据库结构

  1.服务端:用于接收并处理其它程序发出的请求的程序(软件),或者是安装此类程序的设备(计算机)。

       2.客户端:向服务器发出请求的程序(软件),或者是安装此类程序的设备(计算机)

       3.库:就是一堆表组成的数据集合

      4.表(table):类似 Excel,由行和列组成的二维表。

      5.字段:字段就是表格的表头(垂直方向)。

      6.记录:表里面的的数据。【注意】关系数据库必须以行为单位进行数据读写。

       字段+记录形成了<=>很多表<=>库<=>服务端<=>通过服务端访问

     

       SQL 语句:用关键字、表名和列名等组合而成的一条语句。

3 种 SQL 语句种类:

 (1)ddl(数据定义语言):创建、删除或修改数据库以及数据库中的表等对象。

      ①create:创建数据库和表等对象

      ②drop:删除数据库和表等对象

      ③alter:修改数据库和表等对象

    (2)dml(数据操作语言):查询或修改表中的记录。

      ①select:查询表中的数据

      ②insert:向表中插入数据

      ③update:修改表中的数据

      ④delete:删除表中的数据

              (3)DCL(数据控制语言):确认或取消对数据库中的数据变更的执行操作,以及对用户的操作数据库中的对象权限进行设定。

                                  数据库操作:

                 create database 库名 [ 新建数据库 ]
 create database kali;

                 show databases;  [ 查看所有数据库 ]
show databases;

                 drop database 库名 ;  [ 删除数据库 ]
drop database kali;

                  use 库名 ;(进入库)
use kali;
                 数据表操作:
建表>定义类型>定义属性
ps:要先定义类型才能加上属性
create table 表名 (字段 类型 ,字段 类型 ); [ 新建表 ]
 create table shuju(xm int,xb varchar(99));
ps:字符串属性要记得指定长度

create table 表名 (字段 类型 属性,字段 类型 属性); [新建表]

 create table shuju3(xm int not null,xb varchar(99) not null);

show tables; [ 查看所有数据表 ]
show tables;
drop table 表名 ; [ 删除表格 ]
drop table shuju;

删除多张表

drop table shuju2,shuju3;

desc 表名 [ 查看表的类型 ]
desc shuju;
alter table 表名   drop 字段名; [ 删除表里面的字段 ]

alter table shuju drop xb;

alter table 表名   add 字段名 类型 属性(长度) ; [ 添加表里面的字段 }
alter table shuju add admin varchar(99) not null;

alter table 表名 change 被修改名  修改名 属性 ; [ 修改字段名和类型 ]
 
alter table shuju change admin admins int(99) not null;

例子:create table aa(xh int primary key auto_increment not null,xm varchar(99));
create table表名(字段名+类型+属性,字段名+类型(长度));

字段其实是有一些类型属性的。

数据类型: varchar(255)《字符串(255)是长度》         int(1)《整数》          char float《浮点数》

主键  PRIMARY KEY [不能为空,而且是不能重复的值]

设置编码:CHARSET=utf8

自增长 AUTO_INCREMENT  

NOT NULL 数据不能为空

基本SQL语法(2

插入数据 :  
insert into 表名 values (第一个字段的数据,'第二个字段的数据');
insert into shuju values ('admin','admin');

ps:没有字段则需要添加新的字段才能插入数据,整数类型只会输出数字,不会输出字符串,无法输出字符串先改变字段类型

insert into 表名 (第一个字段名,第二个字段名)values ('第一个数据','第二个数据');
insert into shuju (xs,xm) values ('admin','password');

数据与字段是相对应的,一对一,二对二

insert into user (username,password) values (’admin’, ’admin’);

红色是字段名绿色是对应的数据,不定义就是默认对认

查询数据 :

  select * from 表名;(意思是从中选择)

select*from shuju;

select 字段名 查询什么东西 ,from 表名,从哪个表查询 

select xm,xs from shuju;

where 表达式,条件 要通过什么来查询

ps:在编程中,‘之间的东西是字符串’
修改数据:
update 表名 set 字段名='字段里的全部数据';
update shuju set xm='zhanghao';

update 表名 set 字段名=字段里的数据 where 指定的字段名=指定的字段数据;

ps:当where设置的条件满足,指定的字段名 =指定的字段数据时,触发修改为set 字段名=‘字段里的数据’。
update shuju set xm='nihao' where xs=245;

and:与

update shuju set xm='h' where xs=245 and xm='hao';

or:或

update shuju set xm='kjkj' where xs=245 or xm='qq';

and 与 ,or 或 (与,可以设置两个条件,满足两个即可,或,设置两个条件,满足其中一个即可)
在and中,前面的条件不满足,会直接返回false不会执行后面的条件。
删除数据:
delete from 表名 where 字段名=字段数据
delete from shuju where xm='ppp';

mysql字符串是可以接受16进制的insert into 表名 values (0x十六进制之后的数据);

ps:0x就是告诉数据库这个不是字符串是数据,十六进制只能代表数据

极端情况下,不让用引号可以转换为十六进制。

insert into shuju (xm) values (0x7368617a69);

insert into  表名 (字段名) values (0x字符转十六进制);


16进制到文本字符串的转换,16进制-BeJSON.com
http://www.bejson.com/convert/ox2str/

select database(); 查询当前库名

select database();

SQL 语句书写规范:

①以英文分号(;)结尾;

②SQL语句本身大小写不敏感,不区分关键字的大小写;【注意】插入到表中的数据是区分大小写的,如“HI”、“Hi”和“hi”都不同。

③该系列随笔将采用“关键字大写,表名和列名的首字母大写”的格式。

④单词使用英文空格或换行符隔开

常数的书写方式:

字符串、日期:用单引号括起来('),如'Hello World','2018-12-4'。

数字:直接书写,不用加单引号,如:5。

选库>>建表>>字段+类型+属性>插数据

表字段排序

升序

知道字段的情况下,select*from 表 order by 字段 [ASC(默认)/DESC];

 select*from shuju order by xm;

假如不知道字段名可以用1,2,1是排序第一个字段,2是排序第二个字段。

select*from shuju order by 1;

select*from shuju order by 2;

倒序

select*from 表 order by 字段 desc

升序(从小到大)ASC,降序(从大到小) desc

select*from shuju order by xm desc;

select*from shuju order by xm asc;

查询分页

select*from 表 limit n,m;
n表示从第几行开始,m表示取几条

select*from shuju limit 1,3;

模糊查询

select *from 表 where 字段名 like '%设想的数据%';

select*from shuju where xs like '%5%';

like就是像的意思,%是通配符(意思是百分号是任意数量任意字符)

select *from 表 where 字段名 like '%a'(把字段里的以a结尾的全部输出)

select*from shuju where xm like '%j';

select *from 表 where 字段名 like 'a%'(把字段里的以a开头的全部输出)

select*from shuju where xm like 'k%';

select *from 表 where 字段名 like '%a%'(有a的全部输出)

select*from shuju where xm like '%k%';

运算符号:  + - * / %  加减乘除取余

select  a+ - * / %a

逻辑运算:
NOT   (!!)变假为真,变真为假,取反

select*from shuju where not xs=245;


AND   (&&)满足两个

select*from shuju where xs=245 && xm='kjkj';


OR      (||)满足两个之一

select*from shuju where xs=245 or xm='kjkj';

and就是满足and前后的两个条件返回真
or就是两个条件满足其中一个即可为真
!就是 否定你前面的结果,若条件结果为false 加!后 最终结果为true

0是假,1是真

sleep(想延时几秒就写几秒);是延时的意思

mysql> select*from shuju where xm='kjkj' and sleep(2);
Empty set (4.00 sec)

ps:因为sleep()  没有返回值 就默认是0


mysql> select*from shuju where xm='kjkj' or sleep(2);
+-----+------+
| xs  | xm   |
+-----+------+
| 245 | kjkj |
| 245 | kjkj |
+-----+------+
2 rows in set (2.00 sec)


a  and  b  ,a和b两个条件都为真 才会返回真

sleep()函数是没有返回值的  就默认是0

0是假

所以总体就返回假

所以就会查询失败

联合查询(union条件:字段数必须相同)

表的内容无重复:

SELECT * FROM 表1 UNION SELECT * FROM 表2;

select*from shuju union select*from shuju2;

表的内容有重复:
SELECT * FROM 表1 UNION ALL SELECT * FROM 表2;

select*from shuju union all select*from shuju2;

官方定义:子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块。当一个查询是另一个查询的条件时,称之为子查询。

老师理解:子查询就如同 1+2*2=5 (1+2)*2=6
        子查询就是优先执行,然后执行得到的结果作为某个查询的条件

select*from shuju where xm=(select 'kjkj');

  

 select *from user where username = (select username from admin where id=1);
    
    admin表当id=1的用户名是否在user表也存在

select*from user where username in (select username from admin)
    检查admin表和user表是否有用户名相等


子查询就行优先执行括号里的数据。

GROUP_CONCAT(col)     返回由属于一组的列值连接组合而成的结果

多行输出字段里的数据:

select xm from shuju;

一行输出字段里的全部数据:

select group_concat(xm) from shuju;

DATABASE()     返回当前数据库名

select database();

USER()或SYSTEM_USER()    返回当前登陆用户名

select user();             


select system_user();

VERSION()     返回MySQL服务器的版本

 select version();

SLEEP(n)  休眠n秒

 select sleep(想休眠几秒就写几秒);
 

PHP与数据库交互

<?php
$conn = mysqli_connect('localhost','root','root','jjj');
                              链接地址,账号,密码,库名
mysqli_select_db($conn,'jjj');
                         链接,库名
$sql='insert into kali value(88,\'nf\')';
 mysqli_query($conn,$sql);
               执行任意SQL语句
?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值